Merge "Use ArrayMap instead of HashMap for storing relavant nodes" into mnc-dev
diff --git a/Android.mk b/Android.mk
index b71f08c..27dedd9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -348,12 +348,6 @@
 	media/java/android/media/projection/IMediaProjectionCallback.aidl \
 	media/java/android/media/projection/IMediaProjectionManager.aidl \
 	media/java/android/media/projection/IMediaProjectionWatcherCallback.aidl \
-	media/java/android/media/routing/IMediaRouteService.aidl \
-	media/java/android/media/routing/IMediaRouteClientCallback.aidl \
-	media/java/android/media/routing/IMediaRouter.aidl \
-	media/java/android/media/routing/IMediaRouterDelegate.aidl \
-	media/java/android/media/routing/IMediaRouterRoutingCallback.aidl \
-	media/java/android/media/routing/IMediaRouterStateCallback.aidl \
 	media/java/android/media/session/IActiveSessionsListener.aidl \
 	media/java/android/media/session/ISessionController.aidl \
 	media/java/android/media/session/ISessionControllerCallback.aidl \
@@ -460,7 +454,6 @@
 	frameworks/base/location/java/android/location/Criteria.aidl \
 	frameworks/base/media/java/android/media/MediaMetadata.aidl \
 	frameworks/base/media/java/android/media/MediaDescription.aidl \
-	frameworks/base/media/java/android/media/routing/MediaRouteSelector.aidl \
 	frameworks/base/media/java/android/media/Rating.aidl \
 	frameworks/base/media/java/android/media/AudioAttributes.aidl \
 	frameworks/base/media/java/android/media/AudioFocusInfo.aidl \
diff --git a/CleanSpec.mk b/CleanSpec.mk
index c812b6a..667ed02 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -233,6 +233,7 @@
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/symbols/system/lib/libinputflingerhost.so $(PRODUCT_OUT)/symbols/system/lib64/libinputflingerhost.so)
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/lib/libinputflingerhost.so $(PRODUCT_OUT)/obj_arm/lib/libinputflingerhost.so)
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libinputflingerhost_intermediates $(PRODUCT_OUT)/obj_arm/SHARED_LIBRARIES/libinputflingerhost_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/target/common/obj/framework.aidl)
 
 # ******************************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER
diff --git a/api/current.txt b/api/current.txt
index 1ffa5aa..1b2e2e0 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -28,7 +28,6 @@
     field public static final java.lang.String BIND_DREAM_SERVICE = "android.permission.BIND_DREAM_SERVICE";
     field public static final java.lang.String BIND_INCALL_SERVICE = "android.permission.BIND_INCALL_SERVICE";
     field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
-    field public static final java.lang.String BIND_MEDIA_ROUTE_SERVICE = "android.permission.BIND_MEDIA_ROUTE_SERVICE";
     field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
     field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
     field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
@@ -218,6 +217,7 @@
 
   public static final class R.attr {
     ctor public R.attr();
+    field public static final int __reserved0 = 16844020; // 0x10104f4
     field public static final int absListViewStyle = 16842858; // 0x101006a
     field public static final int accessibilityEventTypes = 16843648; // 0x1010380
     field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -280,7 +280,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 = 16844005; // 0x10104e5
+    field public static final int allowUndo = 16844006; // 0x10104e6
     field public static final int alpha = 16843551; // 0x101031f
     field public static final int alphabeticShortcut = 16843235; // 0x10101e3
     field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
@@ -301,7 +301,6 @@
     field public static final int anyDensity = 16843372; // 0x101026c
     field public static final int apduServiceBanner = 16843757; // 0x10103ed
     field public static final int apiKey = 16843281; // 0x1010211
-    field public static final int assistBlocked = 16844019; // 0x10104f3
     field public static final int author = 16843444; // 0x10102b4
     field public static final int authorities = 16842776; // 0x1010018
     field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -312,7 +311,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 = 16844009; // 0x10104e9
+    field public static final int autoVerify = 16844010; // 0x10104ea
     field public static final int background = 16842964; // 0x10100d4
     field public static final int backgroundDimAmount = 16842802; // 0x1010032
     field public static final int backgroundDimEnabled = 16843295; // 0x101021f
@@ -336,7 +335,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 = 16844010; // 0x10104ea
+    field public static final int breakStrategy = 16844011; // 0x10104eb
     field public static final int bufferType = 16843086; // 0x101014e
     field public static final int button = 16843015; // 0x1010107
     field public static final int buttonBarButtonStyle = 16843567; // 0x101032f
@@ -398,7 +397,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 = 16844006; // 0x10104e6
+    field public static final int colorBackgroundFloating = 16844007; // 0x10104e7
     field public static final int colorButtonNormal = 16843819; // 0x101042b
     field public static final int colorControlActivated = 16843818; // 0x101042a
     field public static final int colorControlHighlight = 16843820; // 0x101042c
@@ -507,7 +506,7 @@
     field public static final int dropDownWidth = 16843362; // 0x1010262
     field public static final int duplicateParentState = 16842985; // 0x10100e9
     field public static final int duration = 16843160; // 0x1010198
-    field public static final int dynamicResources = 16844018; // 0x10104f2
+    field public static final int dynamicResources = 16844019; // 0x10104f3
     field public static final int editTextBackground = 16843602; // 0x1010352
     field public static final int editTextColor = 16843601; // 0x1010351
     field public static final int editTextPreferenceStyle = 16842898; // 0x1010092
@@ -541,7 +540,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 = 16844007; // 0x10104e7
+    field public static final int extractNativeLibs = 16844008; // 0x10104e8
     field public static final int factor = 16843219; // 0x10101d3
     field public static final int fadeDuration = 16843384; // 0x1010278
     field public static final int fadeEnabled = 16843390; // 0x101027e
@@ -610,6 +609,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 fullBackupOnly = 16843891; // 0x1010473
     field public static final int fullBright = 16842954; // 0x10100ca
     field public static final int fullDark = 16842950; // 0x10100c6
@@ -796,7 +796,7 @@
     field public static final int layout_x = 16843135; // 0x101017f
     field public static final int layout_y = 16843136; // 0x1010180
     field public static final int left = 16843181; // 0x10101ad
-    field public static final int leftIndents = 16844015; // 0x10104ef
+    field public static final int leftIndents = 16844016; // 0x10104f0
     field public static final int letterSpacing = 16843958; // 0x10104b6
     field public static final int lineSpacingExtra = 16843287; // 0x1010217
     field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
@@ -819,7 +819,7 @@
     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 = 16844014; // 0x10104ee
+    field public static final int lockTaskMode = 16844015; // 0x10104ef
     field public static final int logo = 16843454; // 0x10102be
     field public static final int longClickable = 16842982; // 0x10100e6
     field public static final int loopViews = 16843527; // 0x1010307
@@ -997,7 +997,7 @@
     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 = 16844013; // 0x10104ed
+    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
@@ -1025,7 +1025,7 @@
     field public static final int reversible = 16843851; // 0x101044b
     field public static final int revisionCode = 16843989; // 0x10104d5
     field public static final int right = 16843183; // 0x10101af
-    field public static final int rightIndents = 16844016; // 0x10104f0
+    field public static final int rightIndents = 16844017; // 0x10104f1
     field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
     field public static final int ringtoneType = 16843257; // 0x10101f9
     field public static final int rotation = 16843558; // 0x1010326
@@ -1048,6 +1048,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 scrollViewStyle = 16842880; // 0x1010080
     field public static final int scrollX = 16842962; // 0x10100d2
     field public static final int scrollY = 16842963; // 0x10100d3
@@ -1101,7 +1102,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 = 16844017; // 0x10104f1
+    field public static final int showForAllUsers = 16844018; // 0x10104f2
     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
@@ -1173,6 +1174,7 @@
     field public static final int strokeLineJoin = 16843788; // 0x101040c
     field public static final int strokeMiterLimit = 16843789; // 0x101040d
     field public static final int strokeWidth = 16843783; // 0x1010407
+    field public static final int stylusButtonPressable = 16844021; // 0x10104f5
     field public static final int submitBackground = 16843912; // 0x1010488
     field public static final int subtitle = 16843473; // 0x10102d1
     field public static final int subtitleTextAppearance = 16843823; // 0x101042f
@@ -1187,7 +1189,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 supportsAssistGesture = 16844011; // 0x10104eb
+    field public static final int supportsAssist = 16844012; // 0x10104ec
+    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844022; // 0x10104f6
     field public static final int supportsRtl = 16843695; // 0x10103af
     field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
     field public static final int supportsUploading = 16843419; // 0x101029b
@@ -1288,7 +1291,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 = 16844012; // 0x10104ec
+    field public static final int thumbPosition = 16844013; // 0x10104ed
     field public static final int thumbTextPadding = 16843634; // 0x1010372
     field public static final int thumbTint = 16843889; // 0x1010471
     field public static final int thumbTintMode = 16843890; // 0x1010472
@@ -1352,7 +1355,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 = 16844008; // 0x10104e8
+    field public static final int usesCleartextTraffic = 16844009; // 0x10104e9
     field public static final int value = 16842788; // 0x1010024
     field public static final int valueFrom = 16843486; // 0x10102de
     field public static final int valueTo = 16843487; // 0x10102df
@@ -1684,8 +1687,13 @@
 
   public static final class R.id {
     ctor public R.id();
+    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 accessibilityActionStylusButtonPress = 16908348; // 0x102003c
     field public static final int addToDictionary = 16908330; // 0x102002a
     field public static final int background = 16908288; // 0x1020000
     field public static final int button1 = 16908313; // 0x1020019
@@ -1725,7 +1733,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 = 16908343; // 0x1020037
+    field public static final int shareText = 16908347; // 0x102003b
     field public static final int startSelectingText = 16908328; // 0x1020028
     field public static final int statusBarBackground = 16908335; // 0x102002f
     field public static final int stopSelectingText = 16908329; // 0x1020029
@@ -3977,48 +3985,6 @@
     field public java.lang.String serviceDetails;
   }
 
-  public final class AssistAction {
-    method public static void updateAssistData(android.os.Bundle, android.os.Bundle);
-    field public static final java.lang.String ASSIST_ACTION_KEY = "android:assist_action";
-    field public static final java.lang.String KEY_ACTION_OBJECT = "object";
-    field public static final java.lang.String KEY_ACTION_STATUS = "actionStatus";
-    field public static final java.lang.String KEY_DESCRIPTION = "description";
-    field public static final java.lang.String KEY_ID = "@id";
-    field public static final java.lang.String KEY_NAME = "name";
-    field public static final java.lang.String KEY_TYPE = "@type";
-    field public static final java.lang.String KEY_URL = "url";
-    field public static final java.lang.String STATUS_TYPE_ACTIVE = "ActiveActionStatus";
-    field public static final java.lang.String STATUS_TYPE_COMPLETED = "CompletedActionStatus";
-    field public static final java.lang.String TYPE_ADD_ACTION = "AddAction";
-    field public static final java.lang.String TYPE_BOOKMARK_ACTION = "BookmarkAction";
-    field public static final java.lang.String TYPE_LIKE_ACTION = "LikeAction";
-    field public static final java.lang.String TYPE_LISTEN_ACTION = "ListenAction";
-    field public static final java.lang.String TYPE_VIEW_ACTION = "ViewAction";
-    field public static final java.lang.String TYPE_WANT_ACTION = "WantAction";
-    field public static final java.lang.String TYPE_WATCH_ACTION = "WatchAction";
-  }
-
-  public static final class AssistAction.ActionBuilder {
-    ctor public AssistAction.ActionBuilder();
-    method public android.os.Bundle build();
-    method public android.app.AssistAction.ActionBuilder set(java.lang.String, java.lang.String);
-    method public android.app.AssistAction.ActionBuilder set(java.lang.String, android.os.Bundle);
-    method public android.app.AssistAction.ActionBuilder setObject(android.os.Bundle);
-    method public android.app.AssistAction.ActionBuilder setType(java.lang.String);
-  }
-
-  public static final class AssistAction.ThingBuilder {
-    ctor public AssistAction.ThingBuilder();
-    method public android.os.Bundle build();
-    method public android.app.AssistAction.ThingBuilder set(java.lang.String, java.lang.String);
-    method public android.app.AssistAction.ThingBuilder set(java.lang.String, android.os.Bundle);
-    method public android.app.AssistAction.ThingBuilder setDescription(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setId(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setName(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setType(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setUrl(android.net.Uri);
-  }
-
   public class AssistContent implements android.os.Parcelable {
     ctor public AssistContent();
     method public int describeContents();
@@ -4079,6 +4045,7 @@
     method public boolean isFocused();
     method public boolean isLongClickable();
     method public boolean isSelected();
+    method public boolean isStylusButtonPressable();
     field public static final int TEXT_COLOR_UNDEFINED = 1; // 0x1
     field public static final int TEXT_STYLE_BOLD = 1; // 0x1
     field public static final int TEXT_STYLE_ITALIC = 2; // 0x2
@@ -4325,9 +4292,11 @@
     method public boolean getAllowReturnTransitionOverlap();
     method public final android.os.Bundle getArguments();
     method public final android.app.FragmentManager getChildFragmentManager();
+    method public android.content.Context getContext();
     method public android.transition.Transition getEnterTransition();
     method public android.transition.Transition getExitTransition();
     method public final android.app.FragmentManager getFragmentManager();
+    method public final java.lang.Object getHost();
     method public final int getId();
     method public android.app.LoaderManager getLoaderManager();
     method public final android.app.Fragment getParentFragment();
@@ -4357,7 +4326,8 @@
     method public final boolean isVisible();
     method public void onActivityCreated(android.os.Bundle);
     method public void onActivityResult(int, int, android.content.Intent);
-    method public void onAttach(android.app.Activity);
+    method public void onAttach(android.content.Context);
+    method public deprecated void onAttach(android.app.Activity);
     method public void onConfigurationChanged(android.content.res.Configuration);
     method public boolean onContextItemSelected(android.view.MenuItem);
     method public void onCreate(android.os.Bundle);
@@ -4371,7 +4341,8 @@
     method public void onDetach();
     method public void onHiddenChanged(boolean);
     method public deprecated void onInflate(android.util.AttributeSet, android.os.Bundle);
-    method public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+    method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+    method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
     method public void onLowMemory();
     method public boolean onOptionsItemSelected(android.view.MenuItem);
     method public void onOptionsMenuClosed(android.view.Menu);
@@ -4438,6 +4409,65 @@
     method public abstract boolean onBreadCrumbClick(android.app.FragmentManager.BackStackEntry, int);
   }
 
+  public abstract class FragmentContainer {
+    ctor public FragmentContainer();
+    method public abstract android.view.View onFindViewById(int);
+    method public abstract boolean onHasView();
+  }
+
+  public class FragmentController {
+    method public void attachHost(android.app.Fragment);
+    method public static final android.app.FragmentController createController(android.app.FragmentHostCallback<?>);
+    method public void dispatchActivityCreated();
+    method public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method public boolean dispatchContextItemSelected(android.view.MenuItem);
+    method public void dispatchCreate();
+    method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method public void dispatchDestroy();
+    method public void dispatchDestroyView();
+    method public void dispatchLowMemory();
+    method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+    method public void dispatchOptionsMenuClosed(android.view.Menu);
+    method public void dispatchPause();
+    method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+    method public void dispatchResume();
+    method public void dispatchStart();
+    method public void dispatchStop();
+    method public void dispatchTrimMemory(int);
+    method public void doLoaderDestroy();
+    method public void doLoaderStart();
+    method public void doLoaderStop(boolean);
+    method public void dumpLoaders(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public boolean execPendingActions();
+    method public android.app.Fragment findFragmentByWho(java.lang.String);
+    method public android.app.FragmentManager getFragmentManager();
+    method public android.app.LoaderManager getLoaderManager();
+    method public void noteStateNotSaved();
+    method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+    method public void reportLoaderStart();
+    method public void restoreAllState(android.os.Parcelable, java.util.List<android.app.Fragment>);
+    method public void restoreLoaderNonConfig(android.util.ArrayMap<java.lang.String, android.app.LoaderManager>);
+    method public android.util.ArrayMap<java.lang.String, android.app.LoaderManager> retainLoaderNonConfig();
+    method public java.util.List<android.app.Fragment> retainNonConfig();
+    method public android.os.Parcelable saveAllState();
+  }
+
+  public abstract class FragmentHostCallback extends android.app.FragmentContainer {
+    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method public void onAttachFragment(android.app.Fragment);
+    method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public android.view.View onFindViewById(int);
+    method public abstract E onGetHost();
+    method public android.view.LayoutInflater onGetLayoutInflater();
+    method public int onGetWindowAnimations();
+    method public boolean onHasView();
+    method public boolean onHasWindowAnimations();
+    method public void onInvalidateOptionsMenu();
+    method public boolean onShouldSaveFragmentState(android.app.Fragment);
+    method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
+    method public boolean onUseFragmentManagerInflaterFactory();
+  }
+
   public abstract class FragmentManager {
     ctor public FragmentManager();
     method public abstract void addOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener);
@@ -4986,54 +5016,6 @@
     method public android.app.PendingIntent getReplyPendingIntent();
   }
 
-  public static final class Notification.ContentInfoExtender implements android.app.Notification.Extender {
-    ctor public Notification.ContentInfoExtender();
-    ctor public Notification.ContentInfoExtender(android.app.Notification);
-    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
-    method public java.lang.String[] getContentTypes();
-    method public java.lang.String[] getGenres();
-    method public java.lang.String getMaturityRating();
-    method public java.lang.String getPricingType();
-    method public java.lang.String getPricingValue();
-    method public java.lang.String getPrimaryContentType();
-    method public long getRunningTime();
-    method public int getStatus();
-    method public android.app.Notification.ContentInfoExtender setContentTypes(java.lang.String[]);
-    method public android.app.Notification.ContentInfoExtender setGenres(java.lang.String[]);
-    method public android.app.Notification.ContentInfoExtender setMaturityRating(java.lang.String);
-    method public android.app.Notification.ContentInfoExtender setPricingInformation(java.lang.String, java.lang.String);
-    method public android.app.Notification.ContentInfoExtender setRunningTime(long);
-    method public android.app.Notification.ContentInfoExtender setStatus(int);
-    field public static final java.lang.String CONTENT_MATURITY_ALL = "android.contentMaturity.all";
-    field public static final java.lang.String CONTENT_MATURITY_HIGH = "android.contentMaturity.high";
-    field public static final java.lang.String CONTENT_MATURITY_LOW = "android.contentMaturity.low";
-    field public static final java.lang.String CONTENT_MATURITY_MEDIUM = "android.contentMaturity.medium";
-    field public static final java.lang.String CONTENT_PRICING_FREE = "android.contentPrice.free";
-    field public static final java.lang.String CONTENT_PRICING_PREORDER = "android.contentPrice.preorder";
-    field public static final java.lang.String CONTENT_PRICING_PURCHASE = "android.contentPrice.purchase";
-    field public static final java.lang.String CONTENT_PRICING_RENTAL = "android.contentPrice.rental";
-    field public static final java.lang.String CONTENT_PRICING_SUBSCRIPTION = "android.contentPrice.subscription";
-    field public static final int CONTENT_STATUS_AVAILABLE = 2; // 0x2
-    field public static final int CONTENT_STATUS_PENDING = 1; // 0x1
-    field public static final int CONTENT_STATUS_READY = 0; // 0x0
-    field public static final int CONTENT_STATUS_UNAVAILABLE = 3; // 0x3
-    field public static final java.lang.String CONTENT_TYPE_APP = "android.contentType.app";
-    field public static final java.lang.String CONTENT_TYPE_BOOK = "android.contentType.book";
-    field public static final java.lang.String CONTENT_TYPE_COMIC = "android.contentType.comic";
-    field public static final java.lang.String CONTENT_TYPE_GAME = "android.contentType.game";
-    field public static final java.lang.String CONTENT_TYPE_MAGAZINE = "android.contentType.magazine";
-    field public static final java.lang.String CONTENT_TYPE_MOVIE = "android.contentType.movie";
-    field public static final java.lang.String CONTENT_TYPE_MUSIC = "android.contentType.music";
-    field public static final java.lang.String CONTENT_TYPE_NEWS = "android.contentType.news";
-    field public static final java.lang.String CONTENT_TYPE_PODCAST = "android.contentType.podcast";
-    field public static final java.lang.String CONTENT_TYPE_RADIO = "android.contentType.radio";
-    field public static final java.lang.String CONTENT_TYPE_SERIAL = "android.contentType.serial";
-    field public static final java.lang.String CONTENT_TYPE_SPORTS = "android.contentType.sports";
-    field public static final java.lang.String CONTENT_TYPE_TRAILER = "android.contentType.trailer";
-    field public static final java.lang.String CONTENT_TYPE_VIDEO = "android.contentType.video";
-    field public static final java.lang.String CONTENT_TYPE_WEBSITE = "android.contentType.website";
-  }
-
   public static abstract interface Notification.Extender {
     method public abstract android.app.Notification.Builder extend(android.app.Notification.Builder);
   }
@@ -5121,17 +5103,31 @@
     method public void cancel(java.lang.String, int);
     method public void cancelAll();
     method public android.service.notification.StatusBarNotification[] getActiveNotifications();
-    method public android.app.NotificationManager.Policy getNotificationPolicy(android.app.NotificationManager.Policy.Token);
-    method public boolean isNotificationPolicyTokenValid(android.app.NotificationManager.Policy.Token);
+    method public final int getCurrentInterruptionFilter();
+    method public android.app.NotificationManager.Policy getNotificationPolicy();
+    method public boolean isNotificationPolicyAccessGranted();
     method public void notify(int, android.app.Notification);
     method public void notify(java.lang.String, int, android.app.Notification);
-    method public void requestNotificationPolicyToken(android.app.NotificationManager.Policy.Token.RequestCallback, android.os.Handler);
-    method public void setNotificationPolicy(android.app.NotificationManager.Policy.Token, android.app.NotificationManager.Policy);
+    method public void requestPolicyAccess(android.app.NotificationManager.NotificationPolicyAccessRequestCallback, android.os.Handler);
+    method public final void setInterruptionFilter(int);
+    method public void setNotificationPolicy(android.app.NotificationManager.Policy);
+    field public static final java.lang.String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED";
     field public static final java.lang.String ACTION_NOTIFICATION_POLICY_CHANGED = "android.app.action.NOTIFICATION_POLICY_CHANGED";
+    field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
+    field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
+    field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
+    field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
+  }
+
+  public static abstract class NotificationManager.NotificationPolicyAccessRequestCallback {
+    ctor public NotificationManager.NotificationPolicyAccessRequestCallback();
+    method public abstract void onAccessDenied();
+    method public abstract void onAccessGranted();
   }
 
   public static class NotificationManager.Policy implements android.os.Parcelable {
-    ctor public NotificationManager.Policy(int, int);
+    ctor public NotificationManager.Policy(int, int, int);
     method public int describeContents();
     method public static java.lang.String priorityCategoriesToString(int);
     method public static java.lang.String prioritySendersToString(int);
@@ -5145,20 +5141,9 @@
     field public static final int PRIORITY_SENDERS_ANY = 0; // 0x0
     field public static final int PRIORITY_SENDERS_CONTACTS = 1; // 0x1
     field public static final int PRIORITY_SENDERS_STARRED = 2; // 0x2
+    field public final int priorityCallSenders;
     field public final int priorityCategories;
-    field public final int prioritySenders;
-  }
-
-  public static class NotificationManager.Policy.Token implements android.os.Parcelable {
-    method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.app.NotificationManager.Policy.Token> CREATOR;
-  }
-
-  public static abstract class NotificationManager.Policy.Token.RequestCallback {
-    ctor public NotificationManager.Policy.Token.RequestCallback();
-    method public abstract void onTokenDenied();
-    method public abstract void onTokenGranted(android.app.NotificationManager.Policy.Token);
+    field public final int priorityMessageSenders;
   }
 
   public final class PendingIntent implements android.os.Parcelable {
@@ -5671,9 +5656,6 @@
   }
 
   public class DeviceInitializerStatus {
-    method public static boolean isCustomStatus(int);
-    method public static boolean isErrorStatus(int);
-    method public static boolean isHighPriority(int);
     field public static final int FLAG_STATUS_CUSTOM = 33554432; // 0x2000000
     field public static final int FLAG_STATUS_ERROR = 16777216; // 0x1000000
     field public static final int FLAG_STATUS_HIGH_PRIORITY = 134217728; // 0x8000000
@@ -5685,9 +5667,9 @@
     field public static final int STATUS_ERROR_INSTALL_PACKAGE = 16777240; // 0x1000018
     field public static final int STATUS_ERROR_RESET_PROTECTION_BLOCKING_PROVISIONING = 16777238; // 0x1000016
     field public static final int STATUS_ERROR_SET_DEVICE_POLICY = 16777241; // 0x1000019
-    field public static final int STATUS_STATE_CONNECT_BLUETOOTH_PROXY = 134217736; // 0x8000008
+    field public static final int STATUS_STATE_CONNECTING_BLUETOOTH_PROXY = 134217736; // 0x8000008
     field public static final int STATUS_STATE_DEVICE_PROVISIONED = 134217738; // 0x800000a
-    field public static final int STATUS_STATE_DISCONNECT_BLUETOOTH_PROXY = 134217737; // 0x8000009
+    field public static final int STATUS_STATE_DISCONNECTING_BLUETOOTH_PROXY = 134217737; // 0x8000009
   }
 
   public class DevicePolicyManager {
@@ -5767,8 +5749,8 @@
     method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean);
     method public boolean setDeviceInitializer(android.content.ComponentName, android.content.ComponentName, java.lang.String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
     method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String);
+    method public boolean setKeyguardDisabled(android.content.ComponentName, boolean);
     method public void setKeyguardDisabledFeatures(android.content.ComponentName, int);
-    method public boolean setKeyguardEnabledState(android.content.ComponentName, boolean);
     method public void setLockTaskPackages(android.content.ComponentName, java.lang.String[]) throws java.lang.SecurityException;
     method public void setMasterVolumeMuted(android.content.ComponentName, boolean);
     method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int);
@@ -5794,7 +5776,7 @@
     method public void setRestrictionsProvider(android.content.ComponentName, android.content.ComponentName);
     method public void setScreenCaptureDisabled(android.content.ComponentName, boolean);
     method public void setSecureSetting(android.content.ComponentName, java.lang.String, java.lang.String);
-    method public void setStatusBarEnabledState(android.content.ComponentName, boolean);
+    method public boolean setStatusBarDisabled(android.content.ComponentName, boolean);
     method public int setStorageEncryption(android.content.ComponentName, boolean);
     method public void setSystemUpdatePolicy(android.content.ComponentName, android.app.admin.SystemUpdatePolicy);
     method public void setTrustAgentConfiguration(android.content.ComponentName, android.content.ComponentName, android.os.PersistableBundle);
@@ -5811,7 +5793,6 @@
     field public static final java.lang.String ACTION_SET_NEW_PASSWORD = "android.app.action.SET_NEW_PASSWORD";
     field public static final java.lang.String ACTION_START_ENCRYPTION = "android.app.action.START_ENCRYPTION";
     field public static final java.lang.String ACTION_SYSTEM_UPDATE_POLICY_CHANGED = "android.app.action.SYSTEM_UPDATE_POLICY_CHANGED";
-    field public static final int DO_NOT_ASK_CREDENTIALS_ON_BOOT = 2; // 0x2
     field public static final int ENCRYPTION_STATUS_ACTIVATING = 2; // 0x2
     field public static final int ENCRYPTION_STATUS_ACTIVE = 3; // 0x3
     field public static final int ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY = 4; // 0x4
@@ -5876,6 +5857,7 @@
     field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2
     field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1
     field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0
+    field public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 2; // 0x2
     field public static final int RESET_PASSWORD_REQUIRE_ENTRY = 1; // 0x1
     field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1
     field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2
@@ -6137,7 +6119,7 @@
   }
 
   public final class UsageStatsManager {
-    method public boolean isAppIdle(java.lang.String);
+    method public boolean isAppInactive(java.lang.String);
     method public java.util.Map<java.lang.String, android.app.usage.UsageStats> queryAndAggregateUsageStats(long, long);
     method public java.util.List<android.app.usage.ConfigurationStats> queryConfigurations(int, long, long);
     method public android.app.usage.UsageEvents queryEvents(long, long);
@@ -6986,25 +6968,6 @@
     method public abstract void onServiceDisconnected(int);
   }
 
-  public final class BluetoothSap implements android.bluetooth.BluetoothProfile {
-    method public synchronized void close();
-    method public boolean connect(android.bluetooth.BluetoothDevice);
-    method public boolean disconnect(android.bluetooth.BluetoothDevice);
-    method public android.bluetooth.BluetoothDevice getClient();
-    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
-    method public int getConnectionState(android.bluetooth.BluetoothDevice);
-    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
-    method public int getPriority(android.bluetooth.BluetoothDevice);
-    method public int getState();
-    method public boolean isConnected(android.bluetooth.BluetoothDevice);
-    method public boolean setPriority(android.bluetooth.BluetoothDevice, int);
-    field public static final java.lang.String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.sap.profile.action.CONNECTION_STATE_CHANGED";
-    field public static final int RESULT_CANCELED = 2; // 0x2
-    field public static final int RESULT_FAILURE = 0; // 0x0
-    field public static final int RESULT_SUCCESS = 1; // 0x1
-    field public static final int STATE_ERROR = -1; // 0xffffffff
-  }
-
   public final class BluetoothServerSocket implements java.io.Closeable {
     method public android.bluetooth.BluetoothSocket accept() throws java.io.IOException;
     method public android.bluetooth.BluetoothSocket accept(int) throws java.io.IOException;
@@ -7173,7 +7136,14 @@
     method public int getScanResultType();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final int CALLBACK_TYPE_ALL_MATCHES = 1; // 0x1
+    field public static final int CALLBACK_TYPE_FIRST_MATCH = 2; // 0x2
+    field public static final int CALLBACK_TYPE_MATCH_LOST = 4; // 0x4
     field public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanSettings> CREATOR;
+    field public static final int MATCH_MODE_AGGRESSIVE = 1; // 0x1
+    field public static final int MATCH_MODE_STICKY = 2; // 0x2
+    field public static final int MATCH_NUM_FEW_ADVERTISEMENT = 2; // 0x2
+    field public static final int MATCH_NUM_MAX_ADVERTISEMENT = 3; // 0x3
+    field public static final int MATCH_NUM_ONE_ADVERTISEMENT = 1; // 0x1
     field public static final int SCAN_MODE_BALANCED = 1; // 0x1
     field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2
     field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0
@@ -7183,6 +7153,8 @@
   public static final class ScanSettings.Builder {
     ctor public ScanSettings.Builder();
     method public android.bluetooth.le.ScanSettings build();
+    method public android.bluetooth.le.ScanSettings.Builder setMatchMode(int);
+    method public android.bluetooth.le.ScanSettings.Builder setNumOfMatches(int);
     method public android.bluetooth.le.ScanSettings.Builder setReportDelay(long);
     method public android.bluetooth.le.ScanSettings.Builder setScanMode(int);
   }
@@ -7749,7 +7721,6 @@
     field public static final java.lang.String ALARM_SERVICE = "alarm";
     field public static final java.lang.String APPWIDGET_SERVICE = "appwidget";
     field public static final java.lang.String APP_OPS_SERVICE = "appops";
-    field public static final java.lang.String AUDIO_DEVICES_SERVICE = "audio_devices_manager";
     field public static final java.lang.String AUDIO_SERVICE = "audio";
     field public static final java.lang.String BATTERY_SERVICE = "batterymanager";
     field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
@@ -8267,6 +8238,7 @@
     field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
     field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE";
     field public static final deprecated java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
+    field public static final java.lang.String EXTRA_ALTERNATE_INTENTS = "android.intent.extra.ALTERNATE_INTENTS";
     field public static final java.lang.String EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT";
     field public static final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD";
     field public static final java.lang.String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
@@ -8278,7 +8250,7 @@
     field public static final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list";
     field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
     field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
-    field public static final java.lang.String EXTRA_CHOOSER_TARGETS = "android.intent.extra.CHOOSER_TARGETS";
+    field public static final java.lang.String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER = "android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER";
     field public static final java.lang.String EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT";
     field public static final java.lang.String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER";
     field public static final java.lang.String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED";
@@ -8310,6 +8282,7 @@
     field public static final java.lang.String EXTRA_RESTRICTIONS_BUNDLE = "android.intent.extra.restrictions_bundle";
     field public static final java.lang.String EXTRA_RESTRICTIONS_INTENT = "android.intent.extra.restrictions_intent";
     field public static final java.lang.String EXTRA_RESTRICTIONS_LIST = "android.intent.extra.restrictions_list";
+    field public static final java.lang.String EXTRA_RESULT_RECEIVER = "android.intent.extra.RESULT_RECEIVER";
     field public static final java.lang.String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT";
     field public static final java.lang.String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON";
     field public static final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE";
@@ -8945,6 +8918,7 @@
     field public int descriptionRes;
     field public boolean enabled;
     field public int flags;
+    field public int fullBackupContent;
     field public boolean hardwareAccelerated;
     field public int largestWidthLimitDp;
     field public java.lang.String manageSpaceActivityName;
@@ -9323,6 +9297,7 @@
     field public static final java.lang.String FEATURE_APP_WIDGETS = "android.software.app_widgets";
     field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
     field public static final java.lang.String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
+    field public static final java.lang.String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
     field public static final java.lang.String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
     field public static final java.lang.String FEATURE_BACKUP = "android.software.backup";
     field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
@@ -9814,6 +9789,7 @@
   public final class Resources.Theme {
     method public void applyStyle(int, boolean);
     method public void dump(int, java.lang.String, java.lang.String);
+    method public int getChangingConfigurations();
     method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
     method public android.content.res.Resources getResources();
     method public android.content.res.TypedArray obtainStyledAttributes(int[]);
@@ -12421,6 +12397,25 @@
     enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL;
   }
 
+  public final class Icon implements android.os.Parcelable {
+    method public static android.graphics.drawable.Icon createWithBitmap(android.graphics.Bitmap);
+    method public static android.graphics.drawable.Icon createWithContentUri(java.lang.String);
+    method public static android.graphics.drawable.Icon createWithContentUri(android.net.Uri);
+    method public static android.graphics.drawable.Icon createWithData(byte[], int, int);
+    method public static android.graphics.drawable.Icon createWithFilePath(java.lang.String);
+    method public static android.graphics.drawable.Icon createWithResource(android.content.res.Resources, int);
+    method public int describeContents();
+    method public android.graphics.drawable.Drawable loadDrawable(android.content.Context);
+    method public void loadDrawableAsync(android.content.Context, android.os.Message);
+    method public void loadDrawableAsync(android.content.Context, android.os.Handler, android.graphics.drawable.Icon.OnDrawableLoadedListener);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.graphics.drawable.Icon> CREATOR;
+  }
+
+  public static abstract interface Icon.OnDrawableLoadedListener {
+    method public abstract void onDrawableLoaded(android.graphics.drawable.Drawable);
+  }
+
   public class InsetDrawable extends android.graphics.drawable.DrawableWrapper {
     ctor public InsetDrawable(android.graphics.drawable.Drawable, int);
     ctor public InsetDrawable(android.graphics.drawable.Drawable, int, int, int, int);
@@ -14689,12 +14684,12 @@
     method public android.media.AudioAttributes.Builder setUsage(int);
   }
 
-  public class AudioDeviceInfo {
-    method public java.lang.String getAddress();
+  public final class AudioDeviceInfo {
     method public int[] getChannelCounts();
     method public int[] getChannelMasks();
     method public int[] getFormats();
-    method public java.lang.String getName();
+    method public int getId();
+    method public java.lang.CharSequence getName();
     method public int[] getSampleRates();
     method public int getType();
     method public boolean isSink();
@@ -14721,15 +14716,6 @@
     field public static final int TYPE_WIRED_HEADSET = 3; // 0x3
   }
 
-  public class AudioDevicesManager {
-    method public void addOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener, android.os.Handler);
-    method public android.media.AudioDeviceInfo[] listDevices(int);
-    method public void removeOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener);
-    field public static final int LIST_DEVICES_ALL = 3; // 0x3
-    field public static final int LIST_DEVICES_INPUTS = 1; // 0x1
-    field public static final int LIST_DEVICES_OUTPUTS = 2; // 0x2
-  }
-
   public class AudioFormat {
     method public int getChannelCount();
     method public int getChannelIndexMask();
@@ -14800,11 +14786,13 @@
 
   public class AudioManager {
     method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener);
+    method public void addOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener, android.os.Handler);
     method public void adjustStreamVolume(int, int, int);
     method public void adjustSuggestedStreamVolume(int, int, int);
     method public void adjustVolume(int, int);
     method public void dispatchMediaKeyEvent(android.view.KeyEvent);
     method public int generateAudioSessionId();
+    method public android.media.AudioDeviceInfo[] getDevices(int);
     method public int getMode();
     method public java.lang.String getParameters(java.lang.String);
     method public java.lang.String getProperty(java.lang.String);
@@ -14829,6 +14817,7 @@
     method public deprecated void registerMediaButtonEventReceiver(android.app.PendingIntent);
     method public deprecated void registerRemoteControlClient(android.media.RemoteControlClient);
     method public deprecated boolean registerRemoteController(android.media.RemoteController);
+    method public void removeOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener);
     method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int);
     method public deprecated void setBluetoothA2dpOn(boolean);
     method public void setBluetoothScoOn(boolean);
@@ -14897,6 +14886,9 @@
     field public static final int FX_KEYPRESS_SPACEBAR = 6; // 0x6
     field public static final int FX_KEYPRESS_STANDARD = 5; // 0x5
     field public static final int FX_KEY_CLICK = 0; // 0x0
+    field public static final int GET_DEVICES_ALL = 3; // 0x3
+    field public static final int GET_DEVICES_INPUTS = 1; // 0x1
+    field public static final int GET_DEVICES_OUTPUTS = 2; // 0x2
     field public static final int MODE_CURRENT = -1; // 0xffffffff
     field public static final int MODE_INVALID = -2; // 0xfffffffe
     field public static final int MODE_IN_CALL = 2; // 0x2
@@ -14945,7 +14937,7 @@
 
   public class AudioRecord {
     ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
-    method public void addOnAudioRecordRoutingListener(android.media.OnAudioRecordRoutingListener, android.os.Handler);
+    method public void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
     method public int getAudioFormat();
     method public int getAudioSessionId();
     method public int getAudioSource();
@@ -14956,7 +14948,7 @@
     method public int getNativeFrameCount() throws java.lang.IllegalStateException;
     method public int getNotificationMarkerPosition();
     method public int getPositionNotificationPeriod();
-    method public android.media.AudioDeviceInfo getPreferredInputDevice();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
     method public int getRecordingState();
     method public android.media.AudioDeviceInfo getRoutedDevice();
     method public int getSampleRate();
@@ -14969,10 +14961,10 @@
     method public int read(java.nio.ByteBuffer, int);
     method public int read(java.nio.ByteBuffer, int, int);
     method public void release();
-    method public void removeOnAudioRecordRoutingListener(android.media.OnAudioRecordRoutingListener);
+    method public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener);
     method public int setNotificationMarkerPosition(int);
     method public int setPositionNotificationPeriod(int);
-    method public boolean setPreferredInputDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
     method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener);
     method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener, android.os.Handler);
     method public void startRecording() throws java.lang.IllegalStateException;
@@ -14994,8 +14986,8 @@
     ctor public AudioRecord.Builder();
     method public android.media.AudioRecord build() throws java.lang.UnsupportedOperationException;
     method public android.media.AudioRecord.Builder setAudioFormat(android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioRecord.Builder setAudioSource(int) throws java.lang.IllegalArgumentException;
     method public android.media.AudioRecord.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException;
-    method public android.media.AudioRecord.Builder setCapturePreset(int) throws java.lang.IllegalArgumentException;
   }
 
   public static abstract interface AudioRecord.OnRecordPositionUpdateListener {
@@ -15003,6 +14995,10 @@
     method public abstract void onPeriodicNotification(android.media.AudioRecord);
   }
 
+  public static abstract interface AudioRecord.OnRoutingChangedListener {
+    method public abstract void onRoutingChanged(android.media.AudioRecord);
+  }
+
   public final class AudioTimestamp {
     ctor public AudioTimestamp();
     field public long framePosition;
@@ -15013,7 +15009,7 @@
     ctor public AudioTrack(int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
     ctor public AudioTrack(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
     ctor public AudioTrack(android.media.AudioAttributes, android.media.AudioFormat, int, int, int) throws java.lang.IllegalArgumentException;
-    method public void addOnAudioTrackRoutingListener(android.media.OnAudioTrackRoutingListener, android.os.Handler);
+    method public void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
     method public int attachAuxEffect(int);
     method public void flush();
     method public int getAudioFormat();
@@ -15029,10 +15025,10 @@
     method public int getNotificationMarkerPosition();
     method public int getPlayState();
     method public int getPlaybackHeadPosition();
+    method public android.media.PlaybackParams getPlaybackParams();
     method public int getPlaybackRate();
-    method public android.media.PlaybackSettings getPlaybackSettings();
     method public int getPositionNotificationPeriod();
-    method public android.media.AudioDeviceInfo getPreferredOutputDevice();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
     method public android.media.AudioDeviceInfo getRoutedDevice();
     method public int getSampleRate();
     method public int getState();
@@ -15042,17 +15038,17 @@
     method public void play() throws java.lang.IllegalStateException;
     method public void release();
     method public int reloadStaticData();
-    method public void removeOnAudioTrackRoutingListener(android.media.OnAudioTrackRoutingListener);
+    method public void removeOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener);
     method public int setAuxEffectSendLevel(float);
     method public int setLoopPoints(int, int, int);
     method public int setNotificationMarkerPosition(int);
     method public int setPlaybackHeadPosition(int);
+    method public void setPlaybackParams(android.media.PlaybackParams);
     method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener);
     method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler);
     method public int setPlaybackRate(int);
-    method public void setPlaybackSettings(android.media.PlaybackSettings);
     method public int setPositionNotificationPeriod(int);
-    method public boolean setPreferredOutputDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
     method protected deprecated void setState(int);
     method public deprecated int setStereoVolume(float, float);
     method public int setVolume(float);
@@ -15095,6 +15091,10 @@
     method public abstract void onPeriodicNotification(android.media.AudioTrack);
   }
 
+  public static abstract interface AudioTrack.OnRoutingChangedListener {
+    method public abstract void onRoutingChanged(android.media.AudioTrack);
+  }
+
   public class CamcorderProfile {
     method public static android.media.CamcorderProfile get(int);
     method public static android.media.CamcorderProfile get(int, int);
@@ -15376,11 +15376,11 @@
 
   public static final class MediaCodec.CodecException extends java.lang.IllegalStateException {
     method public java.lang.String getDiagnosticInfo();
-    method public int getReason();
+    method public int getErrorCode();
     method public boolean isRecoverable();
     method public boolean isTransient();
-    field public static final int REASON_HARDWARE = 0; // 0x0
-    field public static final int REASON_RECLAIMED = 1; // 0x1
+    field public static final int ERROR_INSUFFICIENT_RESOURCE = 1100; // 0x44c
+    field public static final int ERROR_RECLAIMED = 1101; // 0x44d
   }
 
   public static final class MediaCodec.CryptoException extends java.lang.RuntimeException {
@@ -15574,6 +15574,16 @@
     field public static final int HEVCMainTierLevel62 = 16777216; // 0x1000000
     field public static final int HEVCProfileMain = 1; // 0x1
     field public static final int HEVCProfileMain10 = 2; // 0x2
+    field public static final int MPEG2LevelH14 = 2; // 0x2
+    field public static final int MPEG2LevelHL = 3; // 0x3
+    field public static final int MPEG2LevelLL = 0; // 0x0
+    field public static final int MPEG2LevelML = 1; // 0x1
+    field public static final int MPEG2Profile422 = 2; // 0x2
+    field public static final int MPEG2ProfileHigh = 5; // 0x5
+    field public static final int MPEG2ProfileMain = 1; // 0x1
+    field public static final int MPEG2ProfileSNR = 3; // 0x3
+    field public static final int MPEG2ProfileSimple = 0; // 0x0
+    field public static final int MPEG2ProfileSpatial = 4; // 0x4
     field public static final int MPEG4Level0 = 1; // 0x1
     field public static final int MPEG4Level0b = 2; // 0x2
     field public static final int MPEG4Level1 = 4; // 0x4
@@ -16040,9 +16050,9 @@
     method public int getAudioSessionId();
     method public int getCurrentPosition();
     method public int getDuration();
-    method public android.media.PlaybackSettings getPlaybackSettings();
+    method public android.media.PlaybackParams getPlaybackParams();
     method public int getSelectedTrack(int) throws java.lang.IllegalStateException;
-    method public android.media.SyncSettings getSyncSettings();
+    method public android.media.SyncParams getSyncParams();
     method public android.media.MediaTimestamp getTimestamp();
     method public android.media.MediaPlayer.TrackInfo[] getTrackInfo() throws java.lang.IllegalStateException;
     method public int getVideoHeight();
@@ -16078,11 +16088,11 @@
     method public void setOnTimedMetaDataListener(android.media.MediaPlayer.OnTimedMetaDataListener);
     method public void setOnTimedTextListener(android.media.MediaPlayer.OnTimedTextListener);
     method public void setOnVideoSizeChangedListener(android.media.MediaPlayer.OnVideoSizeChangedListener);
+    method public void setPlaybackParams(android.media.PlaybackParams);
     method public void setPlaybackRate(float, int);
-    method public void setPlaybackSettings(android.media.PlaybackSettings);
     method public void setScreenOnWhilePlaying(boolean);
     method public void setSurface(android.view.Surface);
-    method public void setSyncSettings(android.media.SyncSettings);
+    method public void setSyncParams(android.media.SyncParams);
     method public void setVideoScalingMode(int);
     method public void setVolume(float, float);
     method public void setWakeMode(android.content.Context, int);
@@ -16401,18 +16411,18 @@
     ctor public MediaSync();
     method public final android.view.Surface createInputSurface();
     method public void flush();
-    method public android.media.PlaybackSettings getPlaybackSettings();
-    method public android.media.SyncSettings getSyncSettings();
+    method public android.media.PlaybackParams getPlaybackParams();
+    method public android.media.SyncParams getSyncParams();
     method public android.media.MediaTimestamp getTimestamp();
-    method public void queueAudio(java.nio.ByteBuffer, int, int, long);
+    method public void queueAudio(java.nio.ByteBuffer, int, long);
     method public final void release();
     method public void setAudioTrack(android.media.AudioTrack);
     method public void setCallback(android.media.MediaSync.Callback, android.os.Handler);
     method public void setOnErrorListener(android.media.MediaSync.OnErrorListener, android.os.Handler);
+    method public void setPlaybackParams(android.media.PlaybackParams);
     method public void setPlaybackRate(float, int);
-    method public void setPlaybackSettings(android.media.PlaybackSettings);
     method public void setSurface(android.view.Surface);
-    method public void setSyncSettings(android.media.SyncSettings);
+    method public void setSyncParams(android.media.SyncParams);
     field public static final int MEDIASYNC_ERROR_AUDIOTRACK_FAIL = 1; // 0x1
     field public static final int MEDIASYNC_ERROR_SURFACE_FAIL = 2; // 0x2
     field public static final int PLAYBACK_RATE_AUDIO_MODE_DEFAULT = 0; // 0x0
@@ -16452,23 +16462,15 @@
     method public abstract void onAudioDeviceConnection();
   }
 
-  public abstract interface OnAudioRecordRoutingListener {
-    method public abstract void onAudioRecordRouting(android.media.AudioRecord);
-  }
-
-  public abstract interface OnAudioTrackRoutingListener {
-    method public abstract void onAudioTrackRouting(android.media.AudioTrack);
-  }
-
-  public final class PlaybackSettings {
-    ctor public PlaybackSettings();
-    method public android.media.PlaybackSettings allowDefaults();
+  public final class PlaybackParams {
+    ctor public PlaybackParams();
+    method public android.media.PlaybackParams allowDefaults();
     method public int getAudioFallbackMode();
     method public float getPitch();
     method public float getSpeed();
-    method public android.media.PlaybackSettings setAudioFallbackMode(int);
-    method public android.media.PlaybackSettings setPitch(float);
-    method public android.media.PlaybackSettings setSpeed(float);
+    method public android.media.PlaybackParams setAudioFallbackMode(int);
+    method public android.media.PlaybackParams setPitch(float);
+    method public android.media.PlaybackParams setSpeed(float);
     field public static final int AUDIO_FALLBACK_MODE_DEFAULT = 0; // 0x0
     field public static final int AUDIO_FALLBACK_MODE_FAIL = 2; // 0x2
     field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1
@@ -16659,17 +16661,17 @@
     method public abstract void onLoadComplete(android.media.SoundPool, int, int);
   }
 
-  public final class SyncSettings {
-    ctor public SyncSettings();
-    method public android.media.SyncSettings allowDefaults();
+  public final class SyncParams {
+    ctor public SyncParams();
+    method public android.media.SyncParams allowDefaults();
     method public int getAudioAdjustMode();
     method public float getFrameRate();
     method public int getSyncSource();
     method public float getTolerance();
-    method public android.media.SyncSettings setAudioAdjustMode(int);
-    method public android.media.SyncSettings setFrameRate(float);
-    method public android.media.SyncSettings setSyncSource(int);
-    method public android.media.SyncSettings setTolerance(float);
+    method public android.media.SyncParams setAudioAdjustMode(int);
+    method public android.media.SyncParams setFrameRate(float);
+    method public android.media.SyncParams setSyncSource(int);
+    method public android.media.SyncParams setTolerance(float);
     field public static final int AUDIO_ADJUST_MODE_DEFAULT = 0; // 0x0
     field public static final int AUDIO_ADJUST_MODE_RESAMPLE = 2; // 0x2
     field public static final int AUDIO_ADJUST_MODE_STRETCH = 1; // 0x1
@@ -17378,248 +17380,11 @@
 
 }
 
-package android.media.routing {
-
-  public final class MediaRouteSelector implements android.os.Parcelable {
-    method public boolean containsProtocol(java.lang.Class<?>);
-    method public boolean containsProtocol(java.lang.String);
-    method public int describeContents();
-    method public android.os.Bundle getExtras();
-    method public int getOptionalFeatures();
-    method public java.util.List<java.lang.String> getOptionalProtocols();
-    method public int getRequiredFeatures();
-    method public java.util.List<java.lang.String> getRequiredProtocols();
-    method public java.lang.String getServicePackageName();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.media.routing.MediaRouteSelector> CREATOR;
-  }
-
-  public static final class MediaRouteSelector.Builder {
-    ctor public MediaRouteSelector.Builder();
-    method public android.media.routing.MediaRouteSelector.Builder addOptionalProtocol(java.lang.Class<?>);
-    method public android.media.routing.MediaRouteSelector.Builder addOptionalProtocol(java.lang.String);
-    method public android.media.routing.MediaRouteSelector.Builder addRequiredProtocol(java.lang.Class<?>);
-    method public android.media.routing.MediaRouteSelector.Builder addRequiredProtocol(java.lang.String);
-    method public android.media.routing.MediaRouteSelector build();
-    method public android.media.routing.MediaRouteSelector.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouteSelector.Builder setOptionalFeatures(int);
-    method public android.media.routing.MediaRouteSelector.Builder setRequiredFeatures(int);
-    method public android.media.routing.MediaRouteSelector.Builder setServicePackageName(java.lang.String);
-  }
-
-  public abstract class MediaRouteService extends android.app.Service {
-    ctor public MediaRouteService();
-    method public android.media.routing.MediaRouter.ServiceMetadata getServiceMetadata();
-    method public android.os.IBinder onBind(android.content.Intent);
-    method public abstract android.media.routing.MediaRouteService.ClientSession onCreateClientSession(android.media.routing.MediaRouteService.ClientInfo);
-    field public static final java.lang.String SERVICE_INTERFACE = "android.media.routing.MediaRouteService";
-  }
-
-  public static final class MediaRouteService.ClientInfo {
-    method public java.lang.String getPackageName();
-    method public int getUid();
-  }
-
-  public static abstract class MediaRouteService.ClientSession {
-    ctor public MediaRouteService.ClientSession();
-    method public abstract boolean onConnect(android.media.routing.MediaRouter.ConnectionRequest, android.media.routing.MediaRouteService.ConnectionCallback);
-    method public abstract void onDisconnect();
-    method public void onPauseStream();
-    method public void onRelease();
-    method public void onResumeStream();
-    method public abstract boolean onStartDiscovery(android.media.routing.MediaRouter.DiscoveryRequest, android.media.routing.MediaRouteService.DiscoveryCallback);
-    method public abstract void onStopDiscovery();
-  }
-
-  public final class MediaRouteService.ConnectionCallback {
-    method public void onConnected(android.media.routing.MediaRouter.ConnectionInfo);
-    method public void onConnectionFailed(int, java.lang.CharSequence, android.os.Bundle);
-    method public void onDisconnected();
-  }
-
-  public final class MediaRouteService.DiscoveryCallback {
-    method public void onDestinationFound(android.media.routing.MediaRouter.DestinationInfo, java.util.List<android.media.routing.MediaRouter.RouteInfo>);
-    method public void onDestinationLost(android.media.routing.MediaRouter.DestinationInfo);
-    method public void onDiscoveryFailed(int, java.lang.CharSequence, android.os.Bundle);
-  }
-
-  public final class MediaRouter {
-    ctor public MediaRouter(android.content.Context);
-    method public void addSelector(android.media.routing.MediaRouteSelector);
-    method public void clearSelectors();
-    method public android.media.routing.MediaRouter.Delegate createDelegate();
-    method public android.media.routing.MediaRouter.ConnectionInfo getConnection();
-    method public int getConnectionState();
-    method public java.util.List<android.media.routing.MediaRouter.DestinationInfo> getDiscoveredDestinations();
-    method public java.util.List<android.media.routing.MediaRouter.RouteInfo> getDiscoveredRoutes(android.media.routing.MediaRouter.DestinationInfo);
-    method public int getDiscoveryState();
-    method public android.media.AudioAttributes getPreferredAudioAttributes();
-    method public android.view.Display getPreferredPresentationDisplay();
-    method public android.media.VolumeProvider getPreferredVolumeProvider();
-    method public android.media.routing.MediaRouter.DestinationInfo getSelectedDestination();
-    method public android.media.routing.MediaRouter.RouteInfo getSelectedRoute();
-    method public java.util.List<android.media.routing.MediaRouteSelector> getSelectors();
-    method public boolean isReleased();
-    method public void pauseStream();
-    method public void release();
-    method public void removeSelector(android.media.routing.MediaRouteSelector);
-    method public void resumeStream();
-    method public void setRoutingCallback(android.media.routing.MediaRouter.RoutingCallback, android.os.Handler);
-    field public static final int CONNECTION_ERROR_ABORTED = 1; // 0x1
-    field public static final int CONNECTION_ERROR_BARGED = 7; // 0x7
-    field public static final int CONNECTION_ERROR_BROKEN = 6; // 0x6
-    field public static final int CONNECTION_ERROR_BUSY = 4; // 0x4
-    field public static final int CONNECTION_ERROR_TIMEOUT = 5; // 0x5
-    field public static final int CONNECTION_ERROR_UNAUTHORIZED = 2; // 0x2
-    field public static final int CONNECTION_ERROR_UNKNOWN = 0; // 0x0
-    field public static final int CONNECTION_ERROR_UNREACHABLE = 3; // 0x3
-    field public static final int CONNECTION_FLAG_BARGE = 1; // 0x1
-    field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
-    field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
-    field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
-    field public static final int DISCONNECTION_REASON_APPLICATION_REQUEST = 0; // 0x0
-    field public static final int DISCONNECTION_REASON_ERROR = 2; // 0x2
-    field public static final int DISCONNECTION_REASON_USER_REQUEST = 1; // 0x1
-    field public static final int DISCOVERY_ERROR_ABORTED = 1; // 0x1
-    field public static final int DISCOVERY_ERROR_NO_CONNECTIVITY = 2; // 0x2
-    field public static final int DISCOVERY_ERROR_UNKNOWN = 0; // 0x0
-    field public static final int DISCOVERY_FLAG_BACKGROUND = 1; // 0x1
-    field public static final int DISCOVERY_STATE_STARTED = 1; // 0x1
-    field public static final int DISCOVERY_STATE_STOPPED = 0; // 0x0
-    field public static final int ROUTE_FEATURE_LIVE_AUDIO = 1; // 0x1
-    field public static final int ROUTE_FEATURE_LIVE_VIDEO = 2; // 0x2
-  }
-
-  public static final class MediaRouter.ConnectionInfo {
-    method public android.media.AudioAttributes getAudioAttributes();
-    method public android.os.Bundle getExtras();
-    method public int getFeatures();
-    method public android.view.Display getPresentationDisplay();
-    method public android.os.IBinder getProtocolBinder(java.lang.String);
-    method public android.os.IBinder getProtocolBinder(int);
-    method public T getProtocolObject(java.lang.Class<T>);
-    method public java.util.List<java.lang.String> getProtocols();
-    method public android.media.routing.MediaRouter.RouteInfo getRoute();
-    method public android.media.VolumeProvider getVolumeProvider();
-  }
-
-  public static final class MediaRouter.ConnectionInfo.Builder {
-    ctor public MediaRouter.ConnectionInfo.Builder(android.media.routing.MediaRouter.RouteInfo);
-    method public android.media.routing.MediaRouter.ConnectionInfo build();
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setAudioAttributes(android.media.AudioAttributes);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setPresentationDisplay(android.view.Display);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setProtocolBinder(java.lang.String, android.os.IBinder);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setProtocolStub(java.lang.Class<?>, android.os.IInterface);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setVolumeProvider(android.media.VolumeProvider);
-  }
-
-  public static final class MediaRouter.ConnectionRequest {
-    method public android.os.Bundle getExtras();
-    method public int getFlags();
-    method public android.media.routing.MediaRouter.RouteInfo getRoute();
-    method public void setExtras(android.os.Bundle);
-    method public void setFlags(int);
-    method public void setRoute(android.media.routing.MediaRouter.RouteInfo);
-  }
-
-  public static final class MediaRouter.Delegate {
-    ctor public MediaRouter.Delegate();
-    method public void addStateCallback(android.media.routing.MediaRouter.StateCallback, android.os.Handler);
-    method public void connect(android.media.routing.MediaRouter.DestinationInfo, int);
-    method public void disconnect(int);
-    method public int getConnectionState();
-    method public java.util.List<android.media.routing.MediaRouter.DestinationInfo> getDiscoveredDestinations();
-    method public int getDiscoveryState();
-    method public android.media.routing.MediaRouter.DestinationInfo getSelectedDestination();
-    method public boolean isReleased();
-    method public void removeStateCallback(android.media.routing.MediaRouter.StateCallback);
-    method public void startDiscovery(int);
-    method public void stopDiscovery();
-  }
-
-  public static final class MediaRouter.DestinationInfo {
-    method public java.lang.CharSequence getDescription();
-    method public android.os.Bundle getExtras();
-    method public int getIconResourceId();
-    method public java.lang.String getId();
-    method public java.lang.CharSequence getName();
-    method public android.media.routing.MediaRouter.ServiceMetadata getServiceMetadata();
-    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
-  }
-
-  public static final class MediaRouter.DestinationInfo.Builder {
-    ctor public MediaRouter.DestinationInfo.Builder(java.lang.String, android.media.routing.MediaRouter.ServiceMetadata, java.lang.CharSequence);
-    method public android.media.routing.MediaRouter.DestinationInfo build();
-    method public android.media.routing.MediaRouter.DestinationInfo.Builder setDescription(java.lang.CharSequence);
-    method public android.media.routing.MediaRouter.DestinationInfo.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouter.DestinationInfo.Builder setIconResourceId(int);
-  }
-
-  public static final class MediaRouter.DiscoveryRequest {
-    method public int getFlags();
-    method public java.util.List<android.media.routing.MediaRouteSelector> getSelectors();
-    method public void setFlags(int);
-    method public void setSelectors(java.util.List<android.media.routing.MediaRouteSelector>);
-  }
-
-  public static final class MediaRouter.RouteInfo {
-    method public android.media.routing.MediaRouter.DestinationInfo getDestination();
-    method public android.os.Bundle getExtras();
-    method public int getFeatures();
-    method public java.lang.String getId();
-    method public java.util.List<java.lang.String> getProtocols();
-    method public android.media.routing.MediaRouteSelector getSelector();
-  }
-
-  public static final class MediaRouter.RouteInfo.Builder {
-    ctor public MediaRouter.RouteInfo.Builder(java.lang.String, android.media.routing.MediaRouter.DestinationInfo, android.media.routing.MediaRouteSelector);
-    method public android.media.routing.MediaRouter.RouteInfo.Builder addProtocol(java.lang.Class<T>);
-    method public android.media.routing.MediaRouter.RouteInfo.Builder addProtocol(java.lang.String);
-    method public android.media.routing.MediaRouter.RouteInfo build();
-    method public android.media.routing.MediaRouter.RouteInfo.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouter.RouteInfo.Builder setFeatures(int);
-  }
-
-  public static abstract class MediaRouter.RoutingCallback extends android.media.routing.MediaRouter.StateCallback {
-    ctor public MediaRouter.RoutingCallback();
-    method public boolean onPrepareConnectionRequest(android.media.routing.MediaRouter.ConnectionRequest, android.media.routing.MediaRouter.DestinationInfo, java.util.List<android.media.routing.MediaRouter.RouteInfo>);
-    method public boolean onPrepareDiscoveryRequest(android.media.routing.MediaRouter.DiscoveryRequest, java.util.List<android.media.routing.MediaRouteSelector>);
-  }
-
-  public static final class MediaRouter.ServiceMetadata {
-    method public android.content.ComponentName getComponentName();
-    method public android.graphics.drawable.Drawable getIcon(android.content.pm.PackageManager);
-    method public java.lang.CharSequence getLabel(android.content.pm.PackageManager);
-    method public java.lang.String getPackageName();
-    method public android.content.pm.ServiceInfo getService();
-  }
-
-  public static abstract class MediaRouter.StateCallback {
-    ctor public MediaRouter.StateCallback();
-    method public void onConnected();
-    method public void onConnecting();
-    method public void onConnectionFailed(int, java.lang.CharSequence, android.os.Bundle);
-    method public void onConnectionStateChanged(int);
-    method public void onDestinationFound(android.media.routing.MediaRouter.DestinationInfo);
-    method public void onDestinationLost(android.media.routing.MediaRouter.DestinationInfo);
-    method public void onDisconnected();
-    method public void onDiscoveryFailed(int, java.lang.CharSequence, android.os.Bundle);
-    method public void onDiscoveryStarted();
-    method public void onDiscoveryStateChanged(int);
-    method public void onDiscoveryStopped();
-    method public void onReleased();
-    method public void onSelectedDestinationChanged(android.media.routing.MediaRouter.DestinationInfo);
-  }
-
-}
-
 package android.media.session {
 
   public final class MediaController {
     ctor public MediaController(android.content.Context, android.media.session.MediaSession.Token);
     method public void adjustVolume(int, int);
-    method public android.media.routing.MediaRouter.Delegate createMediaRouterDelegate();
     method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
     method public android.os.Bundle getExtras();
     method public long getFlags();
@@ -17693,7 +17458,6 @@
     method public void setExtras(android.os.Bundle);
     method public void setFlags(int);
     method public void setMediaButtonReceiver(android.app.PendingIntent);
-    method public void setMediaRouter(android.media.routing.MediaRouter);
     method public void setMetadata(android.media.MediaMetadata);
     method public void setPlaybackState(android.media.session.PlaybackState);
     method public void setPlaybackToLocal(android.media.AudioAttributes);
@@ -18334,6 +18098,7 @@
     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);
     method public void requestNetwork(android.net.NetworkRequest, android.app.PendingIntent);
     method public deprecated void setNetworkPreference(int);
@@ -18373,6 +18138,7 @@
     method public void onLinkPropertiesChanged(android.net.Network, android.net.LinkProperties);
     method public void onLosing(android.net.Network, int);
     method public void onLost(android.net.Network);
+    method public void onPreCheck(android.net.Network);
   }
 
   public static abstract interface ConnectivityManager.OnNetworkActiveListener {
@@ -22855,6 +22621,7 @@
     ctor public Build.VERSION();
     field public static final java.lang.String CODENAME;
     field public static final java.lang.String INCREMENTAL;
+    field public static final int PREVIEW_SDK_INT;
     field public static final java.lang.String RELEASE;
     field public static final deprecated java.lang.String SDK;
     field public static final int SDK_INT;
@@ -23819,7 +23586,7 @@
     method public boolean isUserAGoat();
     method public boolean isUserRunning(android.os.UserHandle);
     method public boolean isUserRunningOrStopping(android.os.UserHandle);
-    method public boolean setRestrictionsChallenge(java.lang.String);
+    method public deprecated boolean setRestrictionsChallenge(java.lang.String);
     method public deprecated void setUserRestriction(java.lang.String, boolean);
     method public deprecated void setUserRestrictions(android.os.Bundle);
     method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle);
@@ -26732,6 +26499,7 @@
     field public static final java.lang.String ACTION_WIFI_IP_SETTINGS = "android.settings.WIFI_IP_SETTINGS";
     field public static final java.lang.String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS";
     field public static final java.lang.String ACTION_WIRELESS_SETTINGS = "android.settings.WIRELESS_SETTINGS";
+    field public static final java.lang.String ACTION_ZEN_ACCESS_SETTINGS = "android.settings.ZEN_ACCESS_SETTINGS";
     field public static final java.lang.String AUTHORITY = "settings";
     field public static final java.lang.String EXTRA_ACCOUNT_TYPES = "account_types";
     field public static final java.lang.String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
@@ -27098,7 +26866,8 @@
   public static final class Telephony.Carriers implements android.provider.BaseColumns {
     field public static final java.lang.String APN = "apn";
     field public static final java.lang.String AUTH_TYPE = "authtype";
-    field public static final java.lang.String BEARER = "bearer";
+    field public static final deprecated java.lang.String BEARER = "bearer";
+    field public static final java.lang.String BEARER_BITMASK = "bearer_bitmask";
     field public static final java.lang.String CARRIER_ENABLED = "carrier_enabled";
     field public static final android.net.Uri CONTENT_URI;
     field public static final java.lang.String CURRENT = "current";
@@ -27461,7 +27230,6 @@
     method public void copyTo(short[]);
     method public void copyTo(int[]);
     method public void copyTo(float[]);
-    method public void copyToFieldPacker(int, int, int, int, android.renderscript.FieldPacker);
     method public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
     method public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap);
     method public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
@@ -28616,7 +28384,7 @@
     method public android.security.KeyGeneratorSpec.Builder setAlias(java.lang.String);
     method public android.security.KeyGeneratorSpec.Builder setBlockModes(java.lang.String...);
     method public android.security.KeyGeneratorSpec.Builder setEncryptionPaddings(java.lang.String...);
-    method public android.security.KeyGeneratorSpec.Builder setEncryptionRequired(boolean);
+    method public android.security.KeyGeneratorSpec.Builder setEncryptionRequired();
     method public android.security.KeyGeneratorSpec.Builder setKeySize(int);
     method public android.security.KeyGeneratorSpec.Builder setKeyValidityEnd(java.util.Date);
     method public android.security.KeyGeneratorSpec.Builder setKeyValidityForConsumptionEnd(java.util.Date);
@@ -28693,6 +28461,53 @@
   public abstract class KeyStoreKeyProperties {
   }
 
+  public static abstract class KeyStoreKeyProperties.Algorithm {
+    field public static final java.lang.String AES = "AES";
+    field public static final java.lang.String EC = "EC";
+    field public static final java.lang.String HMAC_SHA1 = "HmacSHA1";
+    field public static final java.lang.String HMAC_SHA224 = "HmacSHA224";
+    field public static final java.lang.String HMAC_SHA256 = "HmacSHA256";
+    field public static final java.lang.String HMAC_SHA384 = "HmacSHA384";
+    field public static final java.lang.String HMAC_SHA512 = "HmacSHA512";
+    field public static final java.lang.String RSA = "RSA";
+  }
+
+  public static abstract class KeyStoreKeyProperties.AlgorithmEnum implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class KeyStoreKeyProperties.BlockMode {
+    field public static final java.lang.String CBC = "CBC";
+    field public static final java.lang.String CTR = "CTR";
+    field public static final java.lang.String ECB = "ECB";
+    field public static final java.lang.String GCM = "GCM";
+  }
+
+  public static abstract class KeyStoreKeyProperties.BlockModeEnum implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class KeyStoreKeyProperties.Digest {
+    field public static final java.lang.String MD5 = "MD5";
+    field public static final java.lang.String NONE = "NONE";
+    field public static final java.lang.String SHA1 = "SHA-1";
+    field public static final java.lang.String SHA224 = "SHA-224";
+    field public static final java.lang.String SHA256 = "SHA-256";
+    field public static final java.lang.String SHA384 = "SHA-384";
+    field public static final java.lang.String SHA512 = "SHA-512";
+  }
+
+  public static abstract class KeyStoreKeyProperties.DigestEnum implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class KeyStoreKeyProperties.EncryptionPadding {
+    field public static final java.lang.String NONE = "NoPadding";
+    field public static final java.lang.String PKCS7 = "PKCS7Padding";
+    field public static final java.lang.String RSA_OAEP = "OAEPPadding";
+    field public static final java.lang.String RSA_PKCS1 = "PKCS1Padding";
+  }
+
+  public static abstract class KeyStoreKeyProperties.EncryptionPaddingEnum implements java.lang.annotation.Annotation {
+  }
+
   public static abstract class KeyStoreKeyProperties.Origin {
     field public static final int GENERATED = 1; // 0x1
     field public static final int IMPORTED = 2; // 0x2
@@ -28712,6 +28527,14 @@
   public static abstract class KeyStoreKeyProperties.PurposeEnum implements java.lang.annotation.Annotation {
   }
 
+  public static abstract class KeyStoreKeyProperties.SignaturePadding {
+    field public static final java.lang.String RSA_PKCS1 = "PKCS1";
+    field public static final java.lang.String RSA_PSS = "PSS";
+  }
+
+  public static abstract class KeyStoreKeyProperties.SignaturePaddingEnum implements java.lang.annotation.Annotation {
+  }
+
   public class KeyStoreKeySpec implements java.security.spec.KeySpec {
     method public java.lang.String[] getBlockModes();
     method public java.lang.String[] getDigests();
@@ -28725,9 +28548,9 @@
     method public int getPurposes();
     method public java.lang.String[] getSignaturePaddings();
     method public int getUserAuthenticationValidityDurationSeconds();
-    method public boolean isTeeBacked();
+    method public boolean isInsideSecureHardware();
     method public boolean isUserAuthenticationRequired();
-    method public boolean isUserAuthenticationRequirementTeeEnforced();
+    method public boolean isUserAuthenticationRequirementEnforcedBySecureHardware();
   }
 
   public final class KeyStoreParameter implements java.security.KeyStore.ProtectionParameter {
@@ -28805,13 +28628,17 @@
     method public android.os.IBinder onBind(android.content.Intent);
     method public void onDownloadMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Integer>);
     method public void onFilterSms(android.service.carrier.MessagePdu, java.lang.String, int, int, android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Boolean>);
-    method public void onSendDataSms(byte[], int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public deprecated void onSendDataSms(byte[], int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendDataSms(byte[], int, java.lang.String, int, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
     method public void onSendMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMmsResult>);
-    method public void onSendMultipartTextSms(java.util.List<java.lang.String>, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
-    method public void onSendTextSms(java.lang.String, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public deprecated void onSendMultipartTextSms(java.util.List<java.lang.String>, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method public void onSendMultipartTextSms(java.util.List<java.lang.String>, int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method public deprecated void onSendTextSms(java.lang.String, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendTextSms(java.lang.String, int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
     field public static final int DOWNLOAD_STATUS_ERROR = 2; // 0x2
     field public static final int DOWNLOAD_STATUS_OK = 0; // 0x0
     field public static final int DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
+    field public static final int SEND_FLAG_REQUEST_DELIVERY_STATUS = 1; // 0x1
     field public static final int SEND_STATUS_ERROR = 2; // 0x2
     field public static final int SEND_STATUS_OK = 0; // 0x0
     field public static final int SEND_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
@@ -28855,10 +28682,8 @@
   public final class ChooserTarget implements android.os.Parcelable {
     ctor public ChooserTarget(java.lang.CharSequence, android.graphics.Bitmap, float, android.app.PendingIntent);
     ctor public ChooserTarget(java.lang.CharSequence, android.graphics.Bitmap, float, android.content.IntentSender);
-    ctor public ChooserTarget(java.lang.CharSequence, android.graphics.Bitmap, float, android.content.Intent);
     method public int describeContents();
     method public android.graphics.Bitmap getIcon();
-    method public android.content.Intent getIntent();
     method public android.content.IntentSender getIntentSender();
     method public float getScore();
     method public java.lang.CharSequence getTitle();
@@ -28971,7 +28796,6 @@
     method public final int getCurrentInterruptionFilter();
     method public final int getCurrentListenerHints();
     method public android.service.notification.NotificationListenerService.RankingMap getCurrentRanking();
-    method public final android.app.NotificationManager.Policy.Token getNotificationPolicyToken();
     method public android.os.IBinder onBind(android.content.Intent);
     method public void onInterruptionFilterChanged(int);
     method public void onListenerConnected();
@@ -29102,6 +28926,7 @@
     method public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(java.lang.String, java.util.Locale, android.service.voice.AlwaysOnHotwordDetector.Callback);
     method public static boolean isActiveService(android.content.Context, android.content.ComponentName);
     method public android.os.IBinder onBind(android.content.Intent);
+    method public void onLaunchVoiceAssistFromKeyguard();
     method public void onReady();
     method public void onShutdown();
     method public void showSession(android.os.Bundle, int);
@@ -30192,6 +30017,7 @@
     method public void playDtmfTone(char);
     method public void postDialContinue(boolean);
     method public void registerCallback(android.telecom.Call.Callback);
+    method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
     method public void reject(boolean, java.lang.String);
     method public void splitFromConference();
     method public void stopDtmfTone();
@@ -30240,17 +30066,17 @@
     method public int getHandlePresentation();
     method public android.telecom.StatusHints getStatusHints();
     method public int getVideoState();
+    method public static boolean hasProperty(int, int);
+    method public boolean hasProperty(int);
+    method public static java.lang.String propertiesToString(int);
     field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
     field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
-    field public static final int CAPABILITY_GENERIC_CONFERENCE = 16384; // 0x4000
-    field public static final int CAPABILITY_HIGH_DEF_AUDIO = 32768; // 0x8000
     field public static final int CAPABILITY_HOLD = 1; // 0x1
     field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
     field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4
     field public static final int CAPABILITY_MUTE = 64; // 0x40
     field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
     field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
-    field public static final int CAPABILITY_SHOW_CALLBACK_NUMBER = 131072; // 0x20000
     field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
     field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
     field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
@@ -30259,12 +30085,11 @@
     field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
     field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
     field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
-    field public static final int CAPABILITY_WIFI = 65536; // 0x10000
-  }
-
-  public class CallProperties {
-    ctor public CallProperties();
-    field public static final int CONFERENCE = 1; // 0x1
+    field public static final int PROPERTY_CONFERENCE = 1; // 0x1
+    field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4
+    field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
+    field public static final int PROPERTY_HIGH_DEF_AUDIO = 16; // 0x10
+    field public static final int PROPERTY_WIFI = 8; // 0x8
   }
 
   public final class CameraCapabilities implements android.os.Parcelable {
@@ -30290,6 +30115,8 @@
     method public android.telecom.Connection getPrimaryConnection();
     method public final int getState();
     method public final android.telecom.StatusHints getStatusHints();
+    method public android.telecom.Connection.VideoProvider getVideoProvider();
+    method public int getVideoState();
     method public void onAudioStateChanged(android.telecom.AudioState);
     method public void onConnectionAdded(android.telecom.Connection);
     method public void onDisconnect();
@@ -30309,6 +30136,8 @@
     method public final void setDisconnected(android.telecom.DisconnectCause);
     method public final void setOnHold();
     method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(android.telecom.Connection, int);
     field public static final long CONNECT_TIME_NOT_SPECIFIED = 0L; // 0x0L
   }
 
@@ -30336,6 +30165,7 @@
     method public final android.telecom.Connection.VideoProvider getVideoProvider();
     method public final boolean isRingbackRequested();
     method public void onAbort();
+    method public void onAnswer(int);
     method public void onAnswer();
     method public void onAudioStateChanged(android.telecom.AudioState);
     method public void onDisconnect();
@@ -30365,7 +30195,11 @@
     method public final void setRingbackRequested(boolean);
     method public final void setRinging();
     method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(int);
     method public static java.lang.String stateToString(int);
+    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 524288; // 0x80000
     field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
     field public static final int CAPABILITY_HOLD = 1; // 0x1
     field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
@@ -30373,6 +30207,12 @@
     field public static final int CAPABILITY_MUTE = 64; // 0x40
     field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
     field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL = 3072; // 0xc00
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_RX = 1024; // 0x400
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
     field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
     field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
     field public static final int STATE_ACTIVE = 4; // 0x4
@@ -30393,7 +30233,7 @@
     method public void handleCallSessionEvent(int);
     method public abstract void onRequestCameraCapabilities();
     method public abstract void onRequestConnectionDataUsage();
-    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile);
+    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
     method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
     method public abstract void onSetCamera(java.lang.String);
     method public abstract void onSetDeviceOrientation(int);
@@ -30418,10 +30258,12 @@
 
   public final class ConnectionRequest implements android.os.Parcelable {
     ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle);
+    ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle, int);
     method public int describeContents();
     method public android.telecom.PhoneAccountHandle getAccountHandle();
     method public android.net.Uri getAddress();
     method public android.os.Bundle getExtras();
+    method public int getVideoState();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.telecom.ConnectionRequest> CREATOR;
   }
@@ -30499,6 +30341,7 @@
   public static abstract class InCallService.VideoCall {
     ctor public InCallService.VideoCall();
     method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
+    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback, android.os.Handler);
     method public abstract void requestCallDataUsage();
     method public abstract void requestCameraCapabilities();
     method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
@@ -30509,7 +30352,7 @@
     method public abstract void setPauseImage(java.lang.String);
     method public abstract void setPreviewSurface(android.view.Surface);
     method public abstract void setZoom(float);
-    method public abstract void unregisterCallback();
+    method public abstract void unregisterCallback(android.telecom.InCallService.VideoCall.Callback);
   }
 
   public static abstract class InCallService.VideoCall.Callback {
@@ -30597,6 +30440,7 @@
     method public void merge();
     method public void playDtmfTone(char);
     method public final void registerCallback(android.telecom.RemoteConference.Callback);
+    method public final void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
     method public void separate(android.telecom.RemoteConnection);
     method public void setAudioState(android.telecom.AudioState);
     method public void stopDtmfTone();
@@ -30636,6 +30480,7 @@
     method public void playDtmfTone(char);
     method public void postDialContinue(boolean);
     method public void registerCallback(android.telecom.RemoteConnection.Callback);
+    method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
     method public void reject();
     method public void setAudioState(android.telecom.AudioState);
     method public void stopDtmfTone();
@@ -30738,6 +30583,7 @@
     method public static boolean isPaused(int);
     method public static boolean isReceptionEnabled(int);
     method public static boolean isTransmissionEnabled(int);
+    method public static java.lang.String videoStateToString(int);
     field public static final int AUDIO_ONLY = 0; // 0x0
     field public static final int BIDIRECTIONAL = 3; // 0x3
     field public static final int PAUSED = 4; // 0x4
@@ -31158,7 +31004,8 @@
   public class SmsMessage {
     method public static int[] calculateLength(java.lang.CharSequence, boolean);
     method public static int[] calculateLength(java.lang.String, boolean);
-    method public static android.telephony.SmsMessage createFromPdu(byte[]);
+    method public static deprecated android.telephony.SmsMessage createFromPdu(byte[]);
+    method public static android.telephony.SmsMessage createFromPdu(byte[], java.lang.String);
     method public java.lang.String getDisplayMessageBody();
     method public java.lang.String getDisplayOriginatingAddress();
     method public java.lang.String getEmailBody();
@@ -32535,6 +32382,21 @@
     method public int getTopPadding();
   }
 
+  public static final class StaticLayout.Builder {
+    method public android.text.StaticLayout build();
+    method public static android.text.StaticLayout.Builder obtain(java.lang.CharSequence, int, int, android.text.TextPaint, int);
+    method public android.text.StaticLayout.Builder setAlignment(android.text.Layout.Alignment);
+    method public android.text.StaticLayout.Builder setBreakStrategy(int);
+    method public android.text.StaticLayout.Builder setEllipsize(android.text.TextUtils.TruncateAt);
+    method public android.text.StaticLayout.Builder setEllipsizedWidth(int);
+    method public android.text.StaticLayout.Builder setIncludePad(boolean);
+    method public android.text.StaticLayout.Builder setIndents(int[], int[]);
+    method public android.text.StaticLayout.Builder setLineSpacing(float, float);
+    method public android.text.StaticLayout.Builder setMaxLines(int);
+    method public android.text.StaticLayout.Builder setText(java.lang.CharSequence);
+    method public android.text.StaticLayout.Builder setTextDir(android.text.TextDirectionHeuristic);
+  }
+
   public abstract interface TextDirectionHeuristic {
     method public abstract boolean isRtl(char[], int, int);
     method public abstract boolean isRtl(java.lang.CharSequence, int, int);
@@ -34113,14 +33975,6 @@
   }
 
   public deprecated class FloatMath {
-    method public static float ceil(float);
-    method public static float cos(float);
-    method public static float exp(float);
-    method public static float floor(float);
-    method public static float hypot(float, float);
-    method public static float pow(float, float);
-    method public static float sin(float);
-    method public static float sqrt(float);
   }
 
   public final class JsonReader implements java.io.Closeable {
@@ -34874,6 +34728,7 @@
     field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
     field public static final int KEYBOARD_TAP = 3; // 0x3
     field public static final int LONG_PRESS = 0; // 0x0
+    field public static final int STYLUS_BUTTON_PRESS = 6; // 0x6
     field public static final int VIRTUAL_KEY = 1; // 0x1
   }
 
@@ -35606,6 +35461,7 @@
     method public final float getY(int);
     method public final float getYPrecision();
     method public final boolean isButtonPressed(int);
+    method public final boolean isStylusButtonPressed();
     method public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int);
     method public static deprecated android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int);
     method public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int);
@@ -35996,7 +35852,7 @@
     method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
     method public boolean dispatchNestedScroll(int, int, int, int, int[]);
     method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void dispatchProvideAssistStructure(android.view.ViewAssistStructure);
+    method public void dispatchProvideStructure(android.view.ViewStructure);
     method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSetActivated(boolean);
@@ -36125,6 +35981,7 @@
     method public int getScrollBarFadeDuration();
     method public int getScrollBarSize();
     method public int getScrollBarStyle();
+    method public int getScrollIndicators();
     method public final int getScrollX();
     method public final int getScrollY();
     method public int getSolidColor();
@@ -36175,7 +36032,6 @@
     method public void invalidateOutline();
     method public boolean isAccessibilityFocused();
     method public boolean isActivated();
-    method public boolean isAssistBlocked();
     method public boolean isAttachedToWindow();
     method public boolean isClickable();
     method public boolean isDirty();
@@ -36206,10 +36062,12 @@
     method public boolean isSaveEnabled();
     method public boolean isSaveFromParentEnabled();
     method public boolean isScrollContainer();
+    method public boolean isScrollIndicatorEnabled(int);
     method public boolean isScrollbarFadingEnabled();
     method public boolean isSelected();
     method public boolean isShown();
     method public boolean isSoundEffectsEnabled();
+    method public boolean isStylusButtonPressable();
     method public boolean isTextAlignmentResolved();
     method public boolean isTextDirectionResolved();
     method public boolean isVerticalFadingEdgeEnabled();
@@ -36255,8 +36113,8 @@
     method protected void onMeasure(int, int);
     method protected void onOverScrolled(int, int, boolean, boolean);
     method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void onProvideAssistStructure(android.view.ViewAssistStructure);
-    method public void onProvideVirtualAssistStructure(android.view.ViewAssistStructure);
+    method public void onProvideStructure(android.view.ViewStructure);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
     method protected void onRestoreInstanceState(android.os.Parcelable);
     method public void onRtlPropertiesChanged(int);
     method protected android.os.Parcelable onSaveInstanceState();
@@ -36277,6 +36135,7 @@
     method public boolean performHapticFeedback(int);
     method public boolean performHapticFeedback(int, int);
     method public boolean performLongClick();
+    method public boolean performStylusButtonPress();
     method public void playSoundEffect(int);
     method public boolean post(java.lang.Runnable);
     method public boolean postDelayed(java.lang.Runnable, long);
@@ -36318,7 +36177,6 @@
     method public void setActivated(boolean);
     method public void setAlpha(float);
     method public void setAnimation(android.view.animation.Animation);
-    method public void setAssistBlocked(boolean);
     method public void setBackground(android.graphics.drawable.Drawable);
     method public void setBackgroundColor(int);
     method public deprecated void setBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -36380,6 +36238,7 @@
     method public void setOnKeyListener(android.view.View.OnKeyListener);
     method public void setOnLongClickListener(android.view.View.OnLongClickListener);
     method public void setOnScrollChangeListener(android.view.View.OnScrollChangeListener);
+    method public void setOnStylusButtonPressListener(android.view.View.OnStylusButtonPressListener);
     method public void setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener);
     method public void setOnTouchListener(android.view.View.OnTouchListener);
     method public void setOutlineProvider(android.view.ViewOutlineProvider);
@@ -36402,12 +36261,15 @@
     method public void setScrollBarSize(int);
     method public void setScrollBarStyle(int);
     method public void setScrollContainer(boolean);
+    method public void setScrollIndicators(int);
+    method public void setScrollIndicators(int, int);
     method public void setScrollX(int);
     method public void setScrollY(int);
     method public void setScrollbarFadingEnabled(boolean);
     method public void setSelected(boolean);
     method public void setSoundEffectsEnabled(boolean);
     method public void setStateListAnimator(android.animation.StateListAnimator);
+    method public void setStylusButtonPressable(boolean);
     method public void setSystemUiVisibility(int);
     method public void setTag(java.lang.Object);
     method public void setTag(int, java.lang.Object);
@@ -36526,6 +36388,12 @@
     field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
     field public static final int SCROLL_AXIS_NONE = 0; // 0x0
     field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
     field protected static final int[] SELECTED_STATE_SET;
     field protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET;
     field public static final int SOUND_EFFECTS_ENABLED = 134217728; // 0x8000000
@@ -36655,6 +36523,10 @@
     method public abstract void onScrollChange(android.view.View, int, int, int, int);
   }
 
+  public static abstract interface View.OnStylusButtonPressListener {
+    method public abstract boolean onStylusButtonPress(android.view.View);
+  }
+
   public static abstract interface View.OnSystemUiVisibilityChangeListener {
     method public abstract void onSystemUiVisibilityChange(int);
   }
@@ -36667,39 +36539,8 @@
     method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
   }
 
-  public abstract class ViewAssistStructure {
+  public abstract deprecated class ViewAssistStructure extends android.view.ViewStructure {
     ctor public ViewAssistStructure();
-    method public abstract void asyncCommit();
-    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
-    method public abstract void clearExtras();
-    method public abstract android.os.Bundle editExtras();
-    method public abstract int getChildCount();
-    method public abstract java.lang.CharSequence getHint();
-    method public abstract java.lang.CharSequence getText();
-    method public abstract int getTextSelectionEnd();
-    method public abstract int getTextSelectionStart();
-    method public abstract android.view.ViewAssistStructure newChild(int);
-    method public abstract void setAccessibilityFocused(boolean);
-    method public abstract void setActivated(boolean);
-    method public abstract void setAssistBlocked(boolean);
-    method public abstract void setCheckable(boolean);
-    method public abstract void setChecked(boolean);
-    method public abstract void setChildCount(int);
-    method public abstract void setClassName(java.lang.String);
-    method public abstract void setClickable(boolean);
-    method public abstract void setContentDescription(java.lang.CharSequence);
-    method public abstract void setDimens(int, int, int, int, int, int);
-    method public abstract void setEnabled(boolean);
-    method public abstract void setFocusable(boolean);
-    method public abstract void setFocused(boolean);
-    method public abstract void setHint(java.lang.CharSequence);
-    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
-    method public abstract void setLongClickable(boolean);
-    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 setTextPaint(android.text.TextPaint);
-    method public abstract void setVisibility(int);
   }
 
   public class ViewConfiguration {
@@ -37076,6 +36917,41 @@
     method public android.view.ViewPropertyAnimator zBy(float);
   }
 
+  public abstract class ViewStructure {
+    ctor public ViewStructure();
+    method public abstract void asyncCommit();
+    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
+    method public abstract int getChildCount();
+    method public abstract android.os.Bundle getExtras();
+    method public abstract java.lang.CharSequence getHint();
+    method public abstract java.lang.CharSequence getText();
+    method public abstract int getTextSelectionEnd();
+    method public abstract int getTextSelectionStart();
+    method public abstract boolean hasExtras();
+    method public abstract android.view.ViewAssistStructure newChild(int);
+    method public abstract void setAccessibilityFocused(boolean);
+    method public abstract void setActivated(boolean);
+    method public abstract void setCheckable(boolean);
+    method public abstract void setChecked(boolean);
+    method public abstract void setChildCount(int);
+    method public abstract void setClassName(java.lang.String);
+    method public abstract void setClickable(boolean);
+    method public abstract void setContentDescription(java.lang.CharSequence);
+    method public abstract void setDimens(int, int, int, int, int, int);
+    method public abstract void setEnabled(boolean);
+    method public abstract void setFocusable(boolean);
+    method public abstract void setFocused(boolean);
+    method public abstract void setHint(java.lang.CharSequence);
+    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
+    method public abstract void setLongClickable(boolean);
+    method public abstract void setSelected(boolean);
+    method public abstract void setStylusButtonPressable(boolean);
+    method public abstract void setText(java.lang.CharSequence);
+    method public abstract void setText(java.lang.CharSequence, int, int);
+    method public abstract void setTextPaint(android.text.TextPaint);
+    method public abstract void setVisibility(int);
+  }
+
   public final class ViewStub extends android.view.View {
     ctor public ViewStub(android.content.Context);
     ctor public ViewStub(android.content.Context, int);
@@ -37581,6 +37457,7 @@
     field public static final int TYPE_VIEW_LONG_CLICKED = 2; // 0x2
     field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
     field public static final int TYPE_VIEW_SELECTED = 4; // 0x4
+    field public static final int TYPE_VIEW_STYLUS_BUTTON_PRESSED = 8388608; // 0x800000
     field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10
     field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
     field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
@@ -37671,6 +37548,7 @@
     method public boolean isPassword();
     method public boolean isScrollable();
     method public boolean isSelected();
+    method public boolean isStylusButtonPressable();
     method public boolean isVisibleToUser();
     method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View);
     method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View, int);
@@ -37721,6 +37599,7 @@
     method public void setSelected(boolean);
     method public void setSource(android.view.View);
     method public void setSource(android.view.View, int);
+    method public void setStylusButtonPressable(boolean);
     method public void setText(java.lang.CharSequence);
     method public void setTextSelection(int, int);
     method public void setTraversalAfter(android.view.View);
@@ -37792,12 +37671,17 @@
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_BACKWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_DOWN;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_FORWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_LEFT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_RIGHT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_TO_POSITION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_UP;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SELECT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_SELECTION;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_TEXT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_ON_SCREEN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_STYLUS_BUTTON_PRESS;
   }
 
   public static final class AccessibilityNodeInfo.CollectionInfo {
@@ -40555,6 +40439,7 @@
     method public void setSoftInputMode(int);
     method public void setVerticalOffset(int);
     method public void setWidth(int);
+    method public void setWindowLayoutType(int);
     method public void show();
     field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
     field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
diff --git a/api/removed.txt b/api/removed.txt
index 5e77e15..0046a70 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -108,6 +108,21 @@
 
 }
 
+package android.util {
+
+  public deprecated class FloatMath {
+    method public static float ceil(float);
+    method public static float cos(float);
+    method public static float exp(float);
+    method public static float floor(float);
+    method public static float hypot(float, float);
+    method public static float pow(float, float);
+    method public static float sin(float);
+    method public static float sqrt(float);
+  }
+
+}
+
 package android.view {
 
   public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
diff --git a/api/system-current.txt b/api/system-current.txt
index 15989b3..fe0f874 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -39,7 +39,6 @@
     field public static final java.lang.String BIND_INCALL_SERVICE = "android.permission.BIND_INCALL_SERVICE";
     field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
     field public static final java.lang.String BIND_KEYGUARD_APPWIDGET = "android.permission.BIND_KEYGUARD_APPWIDGET";
-    field public static final java.lang.String BIND_MEDIA_ROUTE_SERVICE = "android.permission.BIND_MEDIA_ROUTE_SERVICE";
     field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
     field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
     field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
@@ -110,6 +109,7 @@
     field public static final java.lang.String INTERNET = "android.permission.INTERNET";
     field public static final java.lang.String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP";
     field public static final java.lang.String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES";
+    field public static final java.lang.String KILL_UID = "android.permission.KILL_UID";
     field public static final java.lang.String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE";
     field public static final java.lang.String LOOP_RADIO = "android.permission.LOOP_RADIO";
     field public static final java.lang.String MANAGE_ACCOUNTS = "android.permission.MANAGE_ACCOUNTS";
@@ -289,6 +289,7 @@
 
   public static final class R.attr {
     ctor public R.attr();
+    field public static final int __reserved0 = 16844020; // 0x10104f4
     field public static final int absListViewStyle = 16842858; // 0x101006a
     field public static final int accessibilityEventTypes = 16843648; // 0x1010380
     field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -351,7 +352,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 = 16844005; // 0x10104e5
+    field public static final int allowUndo = 16844006; // 0x10104e6
     field public static final int alpha = 16843551; // 0x101031f
     field public static final int alphabeticShortcut = 16843235; // 0x10101e3
     field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
@@ -372,7 +373,6 @@
     field public static final int anyDensity = 16843372; // 0x101026c
     field public static final int apduServiceBanner = 16843757; // 0x10103ed
     field public static final int apiKey = 16843281; // 0x1010211
-    field public static final int assistBlocked = 16844019; // 0x10104f3
     field public static final int author = 16843444; // 0x10102b4
     field public static final int authorities = 16842776; // 0x1010018
     field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -383,7 +383,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 = 16844009; // 0x10104e9
+    field public static final int autoVerify = 16844010; // 0x10104ea
     field public static final int background = 16842964; // 0x10100d4
     field public static final int backgroundDimAmount = 16842802; // 0x1010032
     field public static final int backgroundDimEnabled = 16843295; // 0x101021f
@@ -407,7 +407,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 = 16844010; // 0x10104ea
+    field public static final int breakStrategy = 16844011; // 0x10104eb
     field public static final int bufferType = 16843086; // 0x101014e
     field public static final int button = 16843015; // 0x1010107
     field public static final int buttonBarButtonStyle = 16843567; // 0x101032f
@@ -469,7 +469,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 = 16844006; // 0x10104e6
+    field public static final int colorBackgroundFloating = 16844007; // 0x10104e7
     field public static final int colorButtonNormal = 16843819; // 0x101042b
     field public static final int colorControlActivated = 16843818; // 0x101042a
     field public static final int colorControlHighlight = 16843820; // 0x101042c
@@ -578,7 +578,7 @@
     field public static final int dropDownWidth = 16843362; // 0x1010262
     field public static final int duplicateParentState = 16842985; // 0x10100e9
     field public static final int duration = 16843160; // 0x1010198
-    field public static final int dynamicResources = 16844018; // 0x10104f2
+    field public static final int dynamicResources = 16844019; // 0x10104f3
     field public static final int editTextBackground = 16843602; // 0x1010352
     field public static final int editTextColor = 16843601; // 0x1010351
     field public static final int editTextPreferenceStyle = 16842898; // 0x1010092
@@ -612,7 +612,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 = 16844007; // 0x10104e7
+    field public static final int extractNativeLibs = 16844008; // 0x10104e8
     field public static final int factor = 16843219; // 0x10101d3
     field public static final int fadeDuration = 16843384; // 0x1010278
     field public static final int fadeEnabled = 16843390; // 0x101027e
@@ -681,6 +681,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 fullBackupOnly = 16843891; // 0x1010473
     field public static final int fullBright = 16842954; // 0x10100ca
     field public static final int fullDark = 16842950; // 0x10100c6
@@ -867,7 +868,7 @@
     field public static final int layout_x = 16843135; // 0x101017f
     field public static final int layout_y = 16843136; // 0x1010180
     field public static final int left = 16843181; // 0x10101ad
-    field public static final int leftIndents = 16844015; // 0x10104ef
+    field public static final int leftIndents = 16844016; // 0x10104f0
     field public static final int letterSpacing = 16843958; // 0x10104b6
     field public static final int lineSpacingExtra = 16843287; // 0x1010217
     field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
@@ -890,7 +891,7 @@
     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 = 16844014; // 0x10104ee
+    field public static final int lockTaskMode = 16844015; // 0x10104ef
     field public static final int logo = 16843454; // 0x10102be
     field public static final int longClickable = 16842982; // 0x10100e6
     field public static final int loopViews = 16843527; // 0x1010307
@@ -1068,7 +1069,7 @@
     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 = 16844013; // 0x10104ed
+    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
@@ -1096,7 +1097,7 @@
     field public static final int reversible = 16843851; // 0x101044b
     field public static final int revisionCode = 16843989; // 0x10104d5
     field public static final int right = 16843183; // 0x10101af
-    field public static final int rightIndents = 16844016; // 0x10104f0
+    field public static final int rightIndents = 16844017; // 0x10104f1
     field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
     field public static final int ringtoneType = 16843257; // 0x10101f9
     field public static final int rotation = 16843558; // 0x1010326
@@ -1119,6 +1120,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 scrollViewStyle = 16842880; // 0x1010080
     field public static final int scrollX = 16842962; // 0x10100d2
     field public static final int scrollY = 16842963; // 0x10100d3
@@ -1176,7 +1178,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 = 16844017; // 0x10104f1
+    field public static final int showForAllUsers = 16844018; // 0x10104f2
     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
@@ -1248,6 +1250,7 @@
     field public static final int strokeLineJoin = 16843788; // 0x101040c
     field public static final int strokeMiterLimit = 16843789; // 0x101040d
     field public static final int strokeWidth = 16843783; // 0x1010407
+    field public static final int stylusButtonPressable = 16844021; // 0x10104f5
     field public static final int submitBackground = 16843912; // 0x1010488
     field public static final int subtitle = 16843473; // 0x10102d1
     field public static final int subtitleTextAppearance = 16843823; // 0x101042f
@@ -1262,7 +1265,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 supportsAssistGesture = 16844011; // 0x10104eb
+    field public static final int supportsAssist = 16844012; // 0x10104ec
+    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844022; // 0x10104f6
     field public static final int supportsRtl = 16843695; // 0x10103af
     field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
     field public static final int supportsUploading = 16843419; // 0x101029b
@@ -1363,7 +1367,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 = 16844012; // 0x10104ec
+    field public static final int thumbPosition = 16844013; // 0x10104ed
     field public static final int thumbTextPadding = 16843634; // 0x1010372
     field public static final int thumbTint = 16843889; // 0x1010471
     field public static final int thumbTintMode = 16843890; // 0x1010472
@@ -1427,7 +1431,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 = 16844008; // 0x10104e8
+    field public static final int usesCleartextTraffic = 16844009; // 0x10104e9
     field public static final int value = 16842788; // 0x1010024
     field public static final int valueFrom = 16843486; // 0x10102de
     field public static final int valueTo = 16843487; // 0x10102df
@@ -1759,8 +1763,13 @@
 
   public static final class R.id {
     ctor public R.id();
+    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 accessibilityActionStylusButtonPress = 16908348; // 0x102003c
     field public static final int addToDictionary = 16908330; // 0x102002a
     field public static final int background = 16908288; // 0x1020000
     field public static final int button1 = 16908313; // 0x1020019
@@ -1800,7 +1809,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 = 16908343; // 0x1020037
+    field public static final int shareText = 16908347; // 0x102003b
     field public static final int startSelectingText = 16908328; // 0x1020028
     field public static final int statusBarBackground = 16908335; // 0x102002f
     field public static final int stopSelectingText = 16908329; // 0x1020029
@@ -3663,6 +3672,7 @@
     method public static boolean isRunningInTestHarness();
     method public static boolean isUserAMonkey();
     method public void killBackgroundProcesses(java.lang.String);
+    method public void killUid(int, java.lang.String);
     method public void moveTaskToFront(int, int);
     method public void moveTaskToFront(int, int, android.os.Bundle);
     method public deprecated void restartPackage(java.lang.String);
@@ -4067,48 +4077,6 @@
     field public java.lang.String serviceDetails;
   }
 
-  public final class AssistAction {
-    method public static void updateAssistData(android.os.Bundle, android.os.Bundle);
-    field public static final java.lang.String ASSIST_ACTION_KEY = "android:assist_action";
-    field public static final java.lang.String KEY_ACTION_OBJECT = "object";
-    field public static final java.lang.String KEY_ACTION_STATUS = "actionStatus";
-    field public static final java.lang.String KEY_DESCRIPTION = "description";
-    field public static final java.lang.String KEY_ID = "@id";
-    field public static final java.lang.String KEY_NAME = "name";
-    field public static final java.lang.String KEY_TYPE = "@type";
-    field public static final java.lang.String KEY_URL = "url";
-    field public static final java.lang.String STATUS_TYPE_ACTIVE = "ActiveActionStatus";
-    field public static final java.lang.String STATUS_TYPE_COMPLETED = "CompletedActionStatus";
-    field public static final java.lang.String TYPE_ADD_ACTION = "AddAction";
-    field public static final java.lang.String TYPE_BOOKMARK_ACTION = "BookmarkAction";
-    field public static final java.lang.String TYPE_LIKE_ACTION = "LikeAction";
-    field public static final java.lang.String TYPE_LISTEN_ACTION = "ListenAction";
-    field public static final java.lang.String TYPE_VIEW_ACTION = "ViewAction";
-    field public static final java.lang.String TYPE_WANT_ACTION = "WantAction";
-    field public static final java.lang.String TYPE_WATCH_ACTION = "WatchAction";
-  }
-
-  public static final class AssistAction.ActionBuilder {
-    ctor public AssistAction.ActionBuilder();
-    method public android.os.Bundle build();
-    method public android.app.AssistAction.ActionBuilder set(java.lang.String, java.lang.String);
-    method public android.app.AssistAction.ActionBuilder set(java.lang.String, android.os.Bundle);
-    method public android.app.AssistAction.ActionBuilder setObject(android.os.Bundle);
-    method public android.app.AssistAction.ActionBuilder setType(java.lang.String);
-  }
-
-  public static final class AssistAction.ThingBuilder {
-    ctor public AssistAction.ThingBuilder();
-    method public android.os.Bundle build();
-    method public android.app.AssistAction.ThingBuilder set(java.lang.String, java.lang.String);
-    method public android.app.AssistAction.ThingBuilder set(java.lang.String, android.os.Bundle);
-    method public android.app.AssistAction.ThingBuilder setDescription(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setId(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setName(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setType(java.lang.String);
-    method public android.app.AssistAction.ThingBuilder setUrl(android.net.Uri);
-  }
-
   public class AssistContent implements android.os.Parcelable {
     ctor public AssistContent();
     method public int describeContents();
@@ -4169,6 +4137,7 @@
     method public boolean isFocused();
     method public boolean isLongClickable();
     method public boolean isSelected();
+    method public boolean isStylusButtonPressable();
     field public static final int TEXT_COLOR_UNDEFINED = 1; // 0x1
     field public static final int TEXT_STYLE_BOLD = 1; // 0x1
     field public static final int TEXT_STYLE_ITALIC = 2; // 0x2
@@ -4415,9 +4384,11 @@
     method public boolean getAllowReturnTransitionOverlap();
     method public final android.os.Bundle getArguments();
     method public final android.app.FragmentManager getChildFragmentManager();
+    method public android.content.Context getContext();
     method public android.transition.Transition getEnterTransition();
     method public android.transition.Transition getExitTransition();
     method public final android.app.FragmentManager getFragmentManager();
+    method public final java.lang.Object getHost();
     method public final int getId();
     method public android.app.LoaderManager getLoaderManager();
     method public final android.app.Fragment getParentFragment();
@@ -4447,7 +4418,8 @@
     method public final boolean isVisible();
     method public void onActivityCreated(android.os.Bundle);
     method public void onActivityResult(int, int, android.content.Intent);
-    method public void onAttach(android.app.Activity);
+    method public void onAttach(android.content.Context);
+    method public deprecated void onAttach(android.app.Activity);
     method public void onConfigurationChanged(android.content.res.Configuration);
     method public boolean onContextItemSelected(android.view.MenuItem);
     method public void onCreate(android.os.Bundle);
@@ -4461,7 +4433,8 @@
     method public void onDetach();
     method public void onHiddenChanged(boolean);
     method public deprecated void onInflate(android.util.AttributeSet, android.os.Bundle);
-    method public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+    method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+    method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
     method public void onLowMemory();
     method public boolean onOptionsItemSelected(android.view.MenuItem);
     method public void onOptionsMenuClosed(android.view.Menu);
@@ -4528,6 +4501,65 @@
     method public abstract boolean onBreadCrumbClick(android.app.FragmentManager.BackStackEntry, int);
   }
 
+  public abstract class FragmentContainer {
+    ctor public FragmentContainer();
+    method public abstract android.view.View onFindViewById(int);
+    method public abstract boolean onHasView();
+  }
+
+  public class FragmentController {
+    method public void attachHost(android.app.Fragment);
+    method public static final android.app.FragmentController createController(android.app.FragmentHostCallback<?>);
+    method public void dispatchActivityCreated();
+    method public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method public boolean dispatchContextItemSelected(android.view.MenuItem);
+    method public void dispatchCreate();
+    method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method public void dispatchDestroy();
+    method public void dispatchDestroyView();
+    method public void dispatchLowMemory();
+    method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+    method public void dispatchOptionsMenuClosed(android.view.Menu);
+    method public void dispatchPause();
+    method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+    method public void dispatchResume();
+    method public void dispatchStart();
+    method public void dispatchStop();
+    method public void dispatchTrimMemory(int);
+    method public void doLoaderDestroy();
+    method public void doLoaderStart();
+    method public void doLoaderStop(boolean);
+    method public void dumpLoaders(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public boolean execPendingActions();
+    method public android.app.Fragment findFragmentByWho(java.lang.String);
+    method public android.app.FragmentManager getFragmentManager();
+    method public android.app.LoaderManager getLoaderManager();
+    method public void noteStateNotSaved();
+    method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+    method public void reportLoaderStart();
+    method public void restoreAllState(android.os.Parcelable, java.util.List<android.app.Fragment>);
+    method public void restoreLoaderNonConfig(android.util.ArrayMap<java.lang.String, android.app.LoaderManager>);
+    method public android.util.ArrayMap<java.lang.String, android.app.LoaderManager> retainLoaderNonConfig();
+    method public java.util.List<android.app.Fragment> retainNonConfig();
+    method public android.os.Parcelable saveAllState();
+  }
+
+  public abstract class FragmentHostCallback extends android.app.FragmentContainer {
+    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method public void onAttachFragment(android.app.Fragment);
+    method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public android.view.View onFindViewById(int);
+    method public abstract E onGetHost();
+    method public android.view.LayoutInflater onGetLayoutInflater();
+    method public int onGetWindowAnimations();
+    method public boolean onHasView();
+    method public boolean onHasWindowAnimations();
+    method public void onInvalidateOptionsMenu();
+    method public boolean onShouldSaveFragmentState(android.app.Fragment);
+    method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
+    method public boolean onUseFragmentManagerInflaterFactory();
+  }
+
   public abstract class FragmentManager {
     ctor public FragmentManager();
     method public abstract void addOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener);
@@ -5076,54 +5108,6 @@
     method public android.app.PendingIntent getReplyPendingIntent();
   }
 
-  public static final class Notification.ContentInfoExtender implements android.app.Notification.Extender {
-    ctor public Notification.ContentInfoExtender();
-    ctor public Notification.ContentInfoExtender(android.app.Notification);
-    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
-    method public java.lang.String[] getContentTypes();
-    method public java.lang.String[] getGenres();
-    method public java.lang.String getMaturityRating();
-    method public java.lang.String getPricingType();
-    method public java.lang.String getPricingValue();
-    method public java.lang.String getPrimaryContentType();
-    method public long getRunningTime();
-    method public int getStatus();
-    method public android.app.Notification.ContentInfoExtender setContentTypes(java.lang.String[]);
-    method public android.app.Notification.ContentInfoExtender setGenres(java.lang.String[]);
-    method public android.app.Notification.ContentInfoExtender setMaturityRating(java.lang.String);
-    method public android.app.Notification.ContentInfoExtender setPricingInformation(java.lang.String, java.lang.String);
-    method public android.app.Notification.ContentInfoExtender setRunningTime(long);
-    method public android.app.Notification.ContentInfoExtender setStatus(int);
-    field public static final java.lang.String CONTENT_MATURITY_ALL = "android.contentMaturity.all";
-    field public static final java.lang.String CONTENT_MATURITY_HIGH = "android.contentMaturity.high";
-    field public static final java.lang.String CONTENT_MATURITY_LOW = "android.contentMaturity.low";
-    field public static final java.lang.String CONTENT_MATURITY_MEDIUM = "android.contentMaturity.medium";
-    field public static final java.lang.String CONTENT_PRICING_FREE = "android.contentPrice.free";
-    field public static final java.lang.String CONTENT_PRICING_PREORDER = "android.contentPrice.preorder";
-    field public static final java.lang.String CONTENT_PRICING_PURCHASE = "android.contentPrice.purchase";
-    field public static final java.lang.String CONTENT_PRICING_RENTAL = "android.contentPrice.rental";
-    field public static final java.lang.String CONTENT_PRICING_SUBSCRIPTION = "android.contentPrice.subscription";
-    field public static final int CONTENT_STATUS_AVAILABLE = 2; // 0x2
-    field public static final int CONTENT_STATUS_PENDING = 1; // 0x1
-    field public static final int CONTENT_STATUS_READY = 0; // 0x0
-    field public static final int CONTENT_STATUS_UNAVAILABLE = 3; // 0x3
-    field public static final java.lang.String CONTENT_TYPE_APP = "android.contentType.app";
-    field public static final java.lang.String CONTENT_TYPE_BOOK = "android.contentType.book";
-    field public static final java.lang.String CONTENT_TYPE_COMIC = "android.contentType.comic";
-    field public static final java.lang.String CONTENT_TYPE_GAME = "android.contentType.game";
-    field public static final java.lang.String CONTENT_TYPE_MAGAZINE = "android.contentType.magazine";
-    field public static final java.lang.String CONTENT_TYPE_MOVIE = "android.contentType.movie";
-    field public static final java.lang.String CONTENT_TYPE_MUSIC = "android.contentType.music";
-    field public static final java.lang.String CONTENT_TYPE_NEWS = "android.contentType.news";
-    field public static final java.lang.String CONTENT_TYPE_PODCAST = "android.contentType.podcast";
-    field public static final java.lang.String CONTENT_TYPE_RADIO = "android.contentType.radio";
-    field public static final java.lang.String CONTENT_TYPE_SERIAL = "android.contentType.serial";
-    field public static final java.lang.String CONTENT_TYPE_SPORTS = "android.contentType.sports";
-    field public static final java.lang.String CONTENT_TYPE_TRAILER = "android.contentType.trailer";
-    field public static final java.lang.String CONTENT_TYPE_VIDEO = "android.contentType.video";
-    field public static final java.lang.String CONTENT_TYPE_WEBSITE = "android.contentType.website";
-  }
-
   public static abstract interface Notification.Extender {
     method public abstract android.app.Notification.Builder extend(android.app.Notification.Builder);
   }
@@ -5211,17 +5195,31 @@
     method public void cancel(java.lang.String, int);
     method public void cancelAll();
     method public android.service.notification.StatusBarNotification[] getActiveNotifications();
-    method public android.app.NotificationManager.Policy getNotificationPolicy(android.app.NotificationManager.Policy.Token);
-    method public boolean isNotificationPolicyTokenValid(android.app.NotificationManager.Policy.Token);
+    method public final int getCurrentInterruptionFilter();
+    method public android.app.NotificationManager.Policy getNotificationPolicy();
+    method public boolean isNotificationPolicyAccessGranted();
     method public void notify(int, android.app.Notification);
     method public void notify(java.lang.String, int, android.app.Notification);
-    method public void requestNotificationPolicyToken(android.app.NotificationManager.Policy.Token.RequestCallback, android.os.Handler);
-    method public void setNotificationPolicy(android.app.NotificationManager.Policy.Token, android.app.NotificationManager.Policy);
+    method public void requestPolicyAccess(android.app.NotificationManager.NotificationPolicyAccessRequestCallback, android.os.Handler);
+    method public final void setInterruptionFilter(int);
+    method public void setNotificationPolicy(android.app.NotificationManager.Policy);
+    field public static final java.lang.String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED";
     field public static final java.lang.String ACTION_NOTIFICATION_POLICY_CHANGED = "android.app.action.NOTIFICATION_POLICY_CHANGED";
+    field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
+    field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
+    field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
+    field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
+  }
+
+  public static abstract class NotificationManager.NotificationPolicyAccessRequestCallback {
+    ctor public NotificationManager.NotificationPolicyAccessRequestCallback();
+    method public abstract void onAccessDenied();
+    method public abstract void onAccessGranted();
   }
 
   public static class NotificationManager.Policy implements android.os.Parcelable {
-    ctor public NotificationManager.Policy(int, int);
+    ctor public NotificationManager.Policy(int, int, int);
     method public int describeContents();
     method public static java.lang.String priorityCategoriesToString(int);
     method public static java.lang.String prioritySendersToString(int);
@@ -5235,20 +5233,9 @@
     field public static final int PRIORITY_SENDERS_ANY = 0; // 0x0
     field public static final int PRIORITY_SENDERS_CONTACTS = 1; // 0x1
     field public static final int PRIORITY_SENDERS_STARRED = 2; // 0x2
+    field public final int priorityCallSenders;
     field public final int priorityCategories;
-    field public final int prioritySenders;
-  }
-
-  public static class NotificationManager.Policy.Token implements android.os.Parcelable {
-    method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.app.NotificationManager.Policy.Token> CREATOR;
-  }
-
-  public static abstract class NotificationManager.Policy.Token.RequestCallback {
-    ctor public NotificationManager.Policy.Token.RequestCallback();
-    method public abstract void onTokenDenied();
-    method public abstract void onTokenGranted(android.app.NotificationManager.Policy.Token);
+    field public final int priorityMessageSenders;
   }
 
   public final class PendingIntent implements android.os.Parcelable {
@@ -5765,9 +5752,6 @@
   }
 
   public class DeviceInitializerStatus {
-    method public static boolean isCustomStatus(int);
-    method public static boolean isErrorStatus(int);
-    method public static boolean isHighPriority(int);
     field public static final int FLAG_STATUS_CUSTOM = 33554432; // 0x2000000
     field public static final int FLAG_STATUS_ERROR = 16777216; // 0x1000000
     field public static final int FLAG_STATUS_HIGH_PRIORITY = 134217728; // 0x8000000
@@ -5779,9 +5763,9 @@
     field public static final int STATUS_ERROR_INSTALL_PACKAGE = 16777240; // 0x1000018
     field public static final int STATUS_ERROR_RESET_PROTECTION_BLOCKING_PROVISIONING = 16777238; // 0x1000016
     field public static final int STATUS_ERROR_SET_DEVICE_POLICY = 16777241; // 0x1000019
-    field public static final int STATUS_STATE_CONNECT_BLUETOOTH_PROXY = 134217736; // 0x8000008
+    field public static final int STATUS_STATE_CONNECTING_BLUETOOTH_PROXY = 134217736; // 0x8000008
     field public static final int STATUS_STATE_DEVICE_PROVISIONED = 134217738; // 0x800000a
-    field public static final int STATUS_STATE_DISCONNECT_BLUETOOTH_PROXY = 134217737; // 0x8000009
+    field public static final int STATUS_STATE_DISCONNECTING_BLUETOOTH_PROXY = 134217737; // 0x8000009
   }
 
   public class DevicePolicyManager {
@@ -5871,8 +5855,8 @@
     method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean);
     method public boolean setDeviceInitializer(android.content.ComponentName, android.content.ComponentName, java.lang.String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
     method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String);
+    method public boolean setKeyguardDisabled(android.content.ComponentName, boolean);
     method public void setKeyguardDisabledFeatures(android.content.ComponentName, int);
-    method public boolean setKeyguardEnabledState(android.content.ComponentName, boolean);
     method public void setLockTaskPackages(android.content.ComponentName, java.lang.String[]) throws java.lang.SecurityException;
     method public void setMasterVolumeMuted(android.content.ComponentName, boolean);
     method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int);
@@ -5898,7 +5882,7 @@
     method public void setRestrictionsProvider(android.content.ComponentName, android.content.ComponentName);
     method public void setScreenCaptureDisabled(android.content.ComponentName, boolean);
     method public void setSecureSetting(android.content.ComponentName, java.lang.String, java.lang.String);
-    method public void setStatusBarEnabledState(android.content.ComponentName, boolean);
+    method public boolean setStatusBarDisabled(android.content.ComponentName, boolean);
     method public int setStorageEncryption(android.content.ComponentName, boolean);
     method public void setSystemUpdatePolicy(android.content.ComponentName, android.app.admin.SystemUpdatePolicy);
     method public void setTrustAgentConfiguration(android.content.ComponentName, android.content.ComponentName, android.os.PersistableBundle);
@@ -5917,7 +5901,6 @@
     field public static final java.lang.String ACTION_SET_PROFILE_OWNER = "android.app.action.SET_PROFILE_OWNER";
     field public static final java.lang.String ACTION_START_ENCRYPTION = "android.app.action.START_ENCRYPTION";
     field public static final java.lang.String ACTION_SYSTEM_UPDATE_POLICY_CHANGED = "android.app.action.SYSTEM_UPDATE_POLICY_CHANGED";
-    field public static final int DO_NOT_ASK_CREDENTIALS_ON_BOOT = 2; // 0x2
     field public static final int ENCRYPTION_STATUS_ACTIVATING = 2; // 0x2
     field public static final int ENCRYPTION_STATUS_ACTIVE = 3; // 0x3
     field public static final int ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY = 4; // 0x4
@@ -5985,6 +5968,7 @@
     field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2
     field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1
     field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0
+    field public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 2; // 0x2
     field public static final int RESET_PASSWORD_REQUIRE_ENTRY = 1; // 0x1
     field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1
     field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2
@@ -6324,7 +6308,7 @@
   }
 
   public final class UsageStatsManager {
-    method public boolean isAppIdle(java.lang.String);
+    method public boolean isAppInactive(java.lang.String);
     method public java.util.Map<java.lang.String, android.app.usage.UsageStats> queryAndAggregateUsageStats(long, long);
     method public java.util.List<android.app.usage.ConfigurationStats> queryConfigurations(int, long, long);
     method public android.app.usage.UsageEvents queryEvents(long, long);
@@ -7177,25 +7161,6 @@
     method public abstract void onServiceDisconnected(int);
   }
 
-  public final class BluetoothSap implements android.bluetooth.BluetoothProfile {
-    method public synchronized void close();
-    method public boolean connect(android.bluetooth.BluetoothDevice);
-    method public boolean disconnect(android.bluetooth.BluetoothDevice);
-    method public android.bluetooth.BluetoothDevice getClient();
-    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
-    method public int getConnectionState(android.bluetooth.BluetoothDevice);
-    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
-    method public int getPriority(android.bluetooth.BluetoothDevice);
-    method public int getState();
-    method public boolean isConnected(android.bluetooth.BluetoothDevice);
-    method public boolean setPriority(android.bluetooth.BluetoothDevice, int);
-    field public static final java.lang.String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.sap.profile.action.CONNECTION_STATE_CHANGED";
-    field public static final int RESULT_CANCELED = 2; // 0x2
-    field public static final int RESULT_FAILURE = 0; // 0x0
-    field public static final int RESULT_SUCCESS = 1; // 0x1
-    field public static final int STATE_ERROR = -1; // 0xffffffff
-  }
-
   public final class BluetoothServerSocket implements java.io.Closeable {
     method public android.bluetooth.BluetoothSocket accept() throws java.io.IOException;
     method public android.bluetooth.BluetoothSocket accept(int) throws java.io.IOException;
@@ -7378,6 +7343,11 @@
     field public static final int CALLBACK_TYPE_FIRST_MATCH = 2; // 0x2
     field public static final int CALLBACK_TYPE_MATCH_LOST = 4; // 0x4
     field public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanSettings> CREATOR;
+    field public static final int MATCH_MODE_AGGRESSIVE = 1; // 0x1
+    field public static final int MATCH_MODE_STICKY = 2; // 0x2
+    field public static final int MATCH_NUM_FEW_ADVERTISEMENT = 2; // 0x2
+    field public static final int MATCH_NUM_MAX_ADVERTISEMENT = 3; // 0x3
+    field public static final int MATCH_NUM_ONE_ADVERTISEMENT = 1; // 0x1
     field public static final int SCAN_MODE_BALANCED = 1; // 0x1
     field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2
     field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0
@@ -7390,6 +7360,8 @@
     ctor public ScanSettings.Builder();
     method public android.bluetooth.le.ScanSettings build();
     method public android.bluetooth.le.ScanSettings.Builder setCallbackType(int);
+    method public android.bluetooth.le.ScanSettings.Builder setMatchMode(int);
+    method public android.bluetooth.le.ScanSettings.Builder setNumOfMatches(int);
     method public android.bluetooth.le.ScanSettings.Builder setReportDelay(long);
     method public android.bluetooth.le.ScanSettings.Builder setScanMode(int);
     method public android.bluetooth.le.ScanSettings.Builder setScanResultType(int);
@@ -7964,7 +7936,6 @@
     field public static final java.lang.String ALARM_SERVICE = "alarm";
     field public static final java.lang.String APPWIDGET_SERVICE = "appwidget";
     field public static final java.lang.String APP_OPS_SERVICE = "appops";
-    field public static final java.lang.String AUDIO_DEVICES_SERVICE = "audio_devices_manager";
     field public static final java.lang.String AUDIO_SERVICE = "audio";
     field public static final java.lang.String BACKUP_SERVICE = "backup";
     field public static final java.lang.String BATTERY_SERVICE = "batterymanager";
@@ -8493,6 +8464,7 @@
     field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
     field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE";
     field public static final deprecated java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
+    field public static final java.lang.String EXTRA_ALTERNATE_INTENTS = "android.intent.extra.ALTERNATE_INTENTS";
     field public static final java.lang.String EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT";
     field public static final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD";
     field public static final java.lang.String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
@@ -8504,7 +8476,7 @@
     field public static final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list";
     field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
     field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
-    field public static final java.lang.String EXTRA_CHOOSER_TARGETS = "android.intent.extra.CHOOSER_TARGETS";
+    field public static final java.lang.String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER = "android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER";
     field public static final java.lang.String EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT";
     field public static final java.lang.String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER";
     field public static final java.lang.String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED";
@@ -8539,6 +8511,7 @@
     field public static final java.lang.String EXTRA_RESTRICTIONS_BUNDLE = "android.intent.extra.restrictions_bundle";
     field public static final java.lang.String EXTRA_RESTRICTIONS_INTENT = "android.intent.extra.restrictions_intent";
     field public static final java.lang.String EXTRA_RESTRICTIONS_LIST = "android.intent.extra.restrictions_list";
+    field public static final java.lang.String EXTRA_RESULT_RECEIVER = "android.intent.extra.RESULT_RECEIVER";
     field public static final java.lang.String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT";
     field public static final java.lang.String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON";
     field public static final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE";
@@ -9174,6 +9147,7 @@
     field public int descriptionRes;
     field public boolean enabled;
     field public int flags;
+    field public int fullBackupContent;
     field public boolean hardwareAccelerated;
     field public int largestWidthLimitDp;
     field public java.lang.String manageSpaceActivityName;
@@ -9582,6 +9556,7 @@
     field public static final java.lang.String FEATURE_APP_WIDGETS = "android.software.app_widgets";
     field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
     field public static final java.lang.String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
+    field public static final java.lang.String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
     field public static final java.lang.String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
     field public static final java.lang.String FEATURE_BACKUP = "android.software.backup";
     field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
@@ -10108,6 +10083,7 @@
   public final class Resources.Theme {
     method public void applyStyle(int, boolean);
     method public void dump(int, java.lang.String, java.lang.String);
+    method public int getChangingConfigurations();
     method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
     method public android.content.res.Resources getResources();
     method public android.content.res.TypedArray obtainStyledAttributes(int[]);
@@ -12715,6 +12691,25 @@
     enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL;
   }
 
+  public final class Icon implements android.os.Parcelable {
+    method public static android.graphics.drawable.Icon createWithBitmap(android.graphics.Bitmap);
+    method public static android.graphics.drawable.Icon createWithContentUri(java.lang.String);
+    method public static android.graphics.drawable.Icon createWithContentUri(android.net.Uri);
+    method public static android.graphics.drawable.Icon createWithData(byte[], int, int);
+    method public static android.graphics.drawable.Icon createWithFilePath(java.lang.String);
+    method public static android.graphics.drawable.Icon createWithResource(android.content.res.Resources, int);
+    method public int describeContents();
+    method public android.graphics.drawable.Drawable loadDrawable(android.content.Context);
+    method public void loadDrawableAsync(android.content.Context, android.os.Message);
+    method public void loadDrawableAsync(android.content.Context, android.os.Handler, android.graphics.drawable.Icon.OnDrawableLoadedListener);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.graphics.drawable.Icon> CREATOR;
+  }
+
+  public static abstract interface Icon.OnDrawableLoadedListener {
+    method public abstract void onDrawableLoaded(android.graphics.drawable.Drawable);
+  }
+
   public class InsetDrawable extends android.graphics.drawable.DrawableWrapper {
     ctor public InsetDrawable(android.graphics.drawable.Drawable, int);
     ctor public InsetDrawable(android.graphics.drawable.Drawable, int, int, int, int);
@@ -15887,12 +15882,12 @@
     method public android.media.AudioAttributes.Builder setUsage(int);
   }
 
-  public class AudioDeviceInfo {
-    method public java.lang.String getAddress();
+  public final class AudioDeviceInfo {
     method public int[] getChannelCounts();
     method public int[] getChannelMasks();
     method public int[] getFormats();
-    method public java.lang.String getName();
+    method public int getId();
+    method public java.lang.CharSequence getName();
     method public int[] getSampleRates();
     method public int getType();
     method public boolean isSink();
@@ -15919,15 +15914,6 @@
     field public static final int TYPE_WIRED_HEADSET = 3; // 0x3
   }
 
-  public class AudioDevicesManager {
-    method public void addOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener, android.os.Handler);
-    method public android.media.AudioDeviceInfo[] listDevices(int);
-    method public void removeOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener);
-    field public static final int LIST_DEVICES_ALL = 3; // 0x3
-    field public static final int LIST_DEVICES_INPUTS = 1; // 0x1
-    field public static final int LIST_DEVICES_OUTPUTS = 2; // 0x2
-  }
-
   public final class AudioFocusInfo implements android.os.Parcelable {
     method public int describeContents();
     method public android.media.AudioAttributes getAttributes();
@@ -16011,11 +15997,13 @@
   public class AudioManager {
     method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener);
     method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
+    method public void addOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener, android.os.Handler);
     method public void adjustStreamVolume(int, int, int);
     method public void adjustSuggestedStreamVolume(int, int, int);
     method public void adjustVolume(int, int);
     method public void dispatchMediaKeyEvent(android.view.KeyEvent);
     method public int generateAudioSessionId();
+    method public android.media.AudioDeviceInfo[] getDevices(int);
     method public int getMode();
     method public java.lang.String getParameters(java.lang.String);
     method public java.lang.String getProperty(java.lang.String);
@@ -16042,6 +16030,7 @@
     method public deprecated void registerMediaButtonEventReceiver(android.app.PendingIntent);
     method public deprecated void registerRemoteControlClient(android.media.RemoteControlClient);
     method public deprecated boolean registerRemoteController(android.media.RemoteController);
+    method public void removeOnAudioDeviceConnectionListener(android.media.OnAudioDeviceConnectionListener);
     method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int);
     method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException;
     method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException;
@@ -16116,6 +16105,9 @@
     field public static final int FX_KEYPRESS_SPACEBAR = 6; // 0x6
     field public static final int FX_KEYPRESS_STANDARD = 5; // 0x5
     field public static final int FX_KEY_CLICK = 0; // 0x0
+    field public static final int GET_DEVICES_ALL = 3; // 0x3
+    field public static final int GET_DEVICES_INPUTS = 1; // 0x1
+    field public static final int GET_DEVICES_OUTPUTS = 2; // 0x2
     field public static final int MODE_CURRENT = -1; // 0xffffffff
     field public static final int MODE_INVALID = -2; // 0xfffffffe
     field public static final int MODE_IN_CALL = 2; // 0x2
@@ -16165,7 +16157,7 @@
   public class AudioRecord {
     ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
     ctor public AudioRecord(android.media.AudioAttributes, android.media.AudioFormat, int, int) throws java.lang.IllegalArgumentException;
-    method public void addOnAudioRecordRoutingListener(android.media.OnAudioRecordRoutingListener, android.os.Handler);
+    method public void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
     method public int getAudioFormat();
     method public int getAudioSessionId();
     method public int getAudioSource();
@@ -16176,7 +16168,7 @@
     method public int getNativeFrameCount() throws java.lang.IllegalStateException;
     method public int getNotificationMarkerPosition();
     method public int getPositionNotificationPeriod();
-    method public android.media.AudioDeviceInfo getPreferredInputDevice();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
     method public int getRecordingState();
     method public android.media.AudioDeviceInfo getRoutedDevice();
     method public int getSampleRate();
@@ -16189,10 +16181,10 @@
     method public int read(java.nio.ByteBuffer, int);
     method public int read(java.nio.ByteBuffer, int, int);
     method public void release();
-    method public void removeOnAudioRecordRoutingListener(android.media.OnAudioRecordRoutingListener);
+    method public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener);
     method public int setNotificationMarkerPosition(int);
     method public int setPositionNotificationPeriod(int);
-    method public boolean setPreferredInputDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
     method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener);
     method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener, android.os.Handler);
     method public void startRecording() throws java.lang.IllegalStateException;
@@ -16215,8 +16207,8 @@
     method public android.media.AudioRecord build() throws java.lang.UnsupportedOperationException;
     method public android.media.AudioRecord.Builder setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
     method public android.media.AudioRecord.Builder setAudioFormat(android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioRecord.Builder setAudioSource(int) throws java.lang.IllegalArgumentException;
     method public android.media.AudioRecord.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException;
-    method public android.media.AudioRecord.Builder setCapturePreset(int) throws java.lang.IllegalArgumentException;
     method public android.media.AudioRecord.Builder setSessionId(int) throws java.lang.IllegalArgumentException;
   }
 
@@ -16225,6 +16217,10 @@
     method public abstract void onPeriodicNotification(android.media.AudioRecord);
   }
 
+  public static abstract interface AudioRecord.OnRoutingChangedListener {
+    method public abstract void onRoutingChanged(android.media.AudioRecord);
+  }
+
   public final class AudioTimestamp {
     ctor public AudioTimestamp();
     field public long framePosition;
@@ -16235,7 +16231,7 @@
     ctor public AudioTrack(int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
     ctor public AudioTrack(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
     ctor public AudioTrack(android.media.AudioAttributes, android.media.AudioFormat, int, int, int) throws java.lang.IllegalArgumentException;
-    method public void addOnAudioTrackRoutingListener(android.media.OnAudioTrackRoutingListener, android.os.Handler);
+    method public void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
     method public int attachAuxEffect(int);
     method public void flush();
     method public int getAudioFormat();
@@ -16251,10 +16247,10 @@
     method public int getNotificationMarkerPosition();
     method public int getPlayState();
     method public int getPlaybackHeadPosition();
+    method public android.media.PlaybackParams getPlaybackParams();
     method public int getPlaybackRate();
-    method public android.media.PlaybackSettings getPlaybackSettings();
     method public int getPositionNotificationPeriod();
-    method public android.media.AudioDeviceInfo getPreferredOutputDevice();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
     method public android.media.AudioDeviceInfo getRoutedDevice();
     method public int getSampleRate();
     method public int getState();
@@ -16264,17 +16260,17 @@
     method public void play() throws java.lang.IllegalStateException;
     method public void release();
     method public int reloadStaticData();
-    method public void removeOnAudioTrackRoutingListener(android.media.OnAudioTrackRoutingListener);
+    method public void removeOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener);
     method public int setAuxEffectSendLevel(float);
     method public int setLoopPoints(int, int, int);
     method public int setNotificationMarkerPosition(int);
     method public int setPlaybackHeadPosition(int);
+    method public void setPlaybackParams(android.media.PlaybackParams);
     method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener);
     method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler);
     method public int setPlaybackRate(int);
-    method public void setPlaybackSettings(android.media.PlaybackSettings);
     method public int setPositionNotificationPeriod(int);
-    method public boolean setPreferredOutputDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
     method protected deprecated void setState(int);
     method public deprecated int setStereoVolume(float, float);
     method public int setVolume(float);
@@ -16317,6 +16313,10 @@
     method public abstract void onPeriodicNotification(android.media.AudioTrack);
   }
 
+  public static abstract interface AudioTrack.OnRoutingChangedListener {
+    method public abstract void onRoutingChanged(android.media.AudioTrack);
+  }
+
   public class CamcorderProfile {
     method public static android.media.CamcorderProfile get(int);
     method public static android.media.CamcorderProfile get(int, int);
@@ -16598,11 +16598,11 @@
 
   public static final class MediaCodec.CodecException extends java.lang.IllegalStateException {
     method public java.lang.String getDiagnosticInfo();
-    method public int getReason();
+    method public int getErrorCode();
     method public boolean isRecoverable();
     method public boolean isTransient();
-    field public static final int REASON_HARDWARE = 0; // 0x0
-    field public static final int REASON_RECLAIMED = 1; // 0x1
+    field public static final int ERROR_INSUFFICIENT_RESOURCE = 1100; // 0x44c
+    field public static final int ERROR_RECLAIMED = 1101; // 0x44d
   }
 
   public static final class MediaCodec.CryptoException extends java.lang.RuntimeException {
@@ -16796,6 +16796,16 @@
     field public static final int HEVCMainTierLevel62 = 16777216; // 0x1000000
     field public static final int HEVCProfileMain = 1; // 0x1
     field public static final int HEVCProfileMain10 = 2; // 0x2
+    field public static final int MPEG2LevelH14 = 2; // 0x2
+    field public static final int MPEG2LevelHL = 3; // 0x3
+    field public static final int MPEG2LevelLL = 0; // 0x0
+    field public static final int MPEG2LevelML = 1; // 0x1
+    field public static final int MPEG2Profile422 = 2; // 0x2
+    field public static final int MPEG2ProfileHigh = 5; // 0x5
+    field public static final int MPEG2ProfileMain = 1; // 0x1
+    field public static final int MPEG2ProfileSNR = 3; // 0x3
+    field public static final int MPEG2ProfileSimple = 0; // 0x0
+    field public static final int MPEG2ProfileSpatial = 4; // 0x4
     field public static final int MPEG4Level0 = 1; // 0x1
     field public static final int MPEG4Level0b = 2; // 0x2
     field public static final int MPEG4Level1 = 4; // 0x4
@@ -17263,9 +17273,9 @@
     method public int getAudioSessionId();
     method public int getCurrentPosition();
     method public int getDuration();
-    method public android.media.PlaybackSettings getPlaybackSettings();
+    method public android.media.PlaybackParams getPlaybackParams();
     method public int getSelectedTrack(int) throws java.lang.IllegalStateException;
-    method public android.media.SyncSettings getSyncSettings();
+    method public android.media.SyncParams getSyncParams();
     method public android.media.MediaTimestamp getTimestamp();
     method public android.media.MediaPlayer.TrackInfo[] getTrackInfo() throws java.lang.IllegalStateException;
     method public int getVideoHeight();
@@ -17301,11 +17311,11 @@
     method public void setOnTimedMetaDataListener(android.media.MediaPlayer.OnTimedMetaDataListener);
     method public void setOnTimedTextListener(android.media.MediaPlayer.OnTimedTextListener);
     method public void setOnVideoSizeChangedListener(android.media.MediaPlayer.OnVideoSizeChangedListener);
+    method public void setPlaybackParams(android.media.PlaybackParams);
     method public void setPlaybackRate(float, int);
-    method public void setPlaybackSettings(android.media.PlaybackSettings);
     method public void setScreenOnWhilePlaying(boolean);
     method public void setSurface(android.view.Surface);
-    method public void setSyncSettings(android.media.SyncSettings);
+    method public void setSyncParams(android.media.SyncParams);
     method public void setVideoScalingMode(int);
     method public void setVolume(float, float);
     method public void setWakeMode(android.content.Context, int);
@@ -17626,18 +17636,18 @@
     ctor public MediaSync();
     method public final android.view.Surface createInputSurface();
     method public void flush();
-    method public android.media.PlaybackSettings getPlaybackSettings();
-    method public android.media.SyncSettings getSyncSettings();
+    method public android.media.PlaybackParams getPlaybackParams();
+    method public android.media.SyncParams getSyncParams();
     method public android.media.MediaTimestamp getTimestamp();
-    method public void queueAudio(java.nio.ByteBuffer, int, int, long);
+    method public void queueAudio(java.nio.ByteBuffer, int, long);
     method public final void release();
     method public void setAudioTrack(android.media.AudioTrack);
     method public void setCallback(android.media.MediaSync.Callback, android.os.Handler);
     method public void setOnErrorListener(android.media.MediaSync.OnErrorListener, android.os.Handler);
+    method public void setPlaybackParams(android.media.PlaybackParams);
     method public void setPlaybackRate(float, int);
-    method public void setPlaybackSettings(android.media.PlaybackSettings);
     method public void setSurface(android.view.Surface);
-    method public void setSyncSettings(android.media.SyncSettings);
+    method public void setSyncParams(android.media.SyncParams);
     field public static final int MEDIASYNC_ERROR_AUDIOTRACK_FAIL = 1; // 0x1
     field public static final int MEDIASYNC_ERROR_SURFACE_FAIL = 2; // 0x2
     field public static final int PLAYBACK_RATE_AUDIO_MODE_DEFAULT = 0; // 0x0
@@ -17677,23 +17687,15 @@
     method public abstract void onAudioDeviceConnection();
   }
 
-  public abstract interface OnAudioRecordRoutingListener {
-    method public abstract void onAudioRecordRouting(android.media.AudioRecord);
-  }
-
-  public abstract interface OnAudioTrackRoutingListener {
-    method public abstract void onAudioTrackRouting(android.media.AudioTrack);
-  }
-
-  public final class PlaybackSettings {
-    ctor public PlaybackSettings();
-    method public android.media.PlaybackSettings allowDefaults();
+  public final class PlaybackParams {
+    ctor public PlaybackParams();
+    method public android.media.PlaybackParams allowDefaults();
     method public int getAudioFallbackMode();
     method public float getPitch();
     method public float getSpeed();
-    method public android.media.PlaybackSettings setAudioFallbackMode(int);
-    method public android.media.PlaybackSettings setPitch(float);
-    method public android.media.PlaybackSettings setSpeed(float);
+    method public android.media.PlaybackParams setAudioFallbackMode(int);
+    method public android.media.PlaybackParams setPitch(float);
+    method public android.media.PlaybackParams setSpeed(float);
     field public static final int AUDIO_FALLBACK_MODE_DEFAULT = 0; // 0x0
     field public static final int AUDIO_FALLBACK_MODE_FAIL = 2; // 0x2
     field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1
@@ -17884,17 +17886,17 @@
     method public abstract void onLoadComplete(android.media.SoundPool, int, int);
   }
 
-  public final class SyncSettings {
-    ctor public SyncSettings();
-    method public android.media.SyncSettings allowDefaults();
+  public final class SyncParams {
+    ctor public SyncParams();
+    method public android.media.SyncParams allowDefaults();
     method public int getAudioAdjustMode();
     method public float getFrameRate();
     method public int getSyncSource();
     method public float getTolerance();
-    method public android.media.SyncSettings setAudioAdjustMode(int);
-    method public android.media.SyncSettings setFrameRate(float);
-    method public android.media.SyncSettings setSyncSource(int);
-    method public android.media.SyncSettings setTolerance(float);
+    method public android.media.SyncParams setAudioAdjustMode(int);
+    method public android.media.SyncParams setFrameRate(float);
+    method public android.media.SyncParams setSyncSource(int);
+    method public android.media.SyncParams setTolerance(float);
     field public static final int AUDIO_ADJUST_MODE_DEFAULT = 0; // 0x0
     field public static final int AUDIO_ADJUST_MODE_RESAMPLE = 2; // 0x2
     field public static final int AUDIO_ADJUST_MODE_STRETCH = 1; // 0x1
@@ -18671,248 +18673,11 @@
 
 }
 
-package android.media.routing {
-
-  public final class MediaRouteSelector implements android.os.Parcelable {
-    method public boolean containsProtocol(java.lang.Class<?>);
-    method public boolean containsProtocol(java.lang.String);
-    method public int describeContents();
-    method public android.os.Bundle getExtras();
-    method public int getOptionalFeatures();
-    method public java.util.List<java.lang.String> getOptionalProtocols();
-    method public int getRequiredFeatures();
-    method public java.util.List<java.lang.String> getRequiredProtocols();
-    method public java.lang.String getServicePackageName();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.media.routing.MediaRouteSelector> CREATOR;
-  }
-
-  public static final class MediaRouteSelector.Builder {
-    ctor public MediaRouteSelector.Builder();
-    method public android.media.routing.MediaRouteSelector.Builder addOptionalProtocol(java.lang.Class<?>);
-    method public android.media.routing.MediaRouteSelector.Builder addOptionalProtocol(java.lang.String);
-    method public android.media.routing.MediaRouteSelector.Builder addRequiredProtocol(java.lang.Class<?>);
-    method public android.media.routing.MediaRouteSelector.Builder addRequiredProtocol(java.lang.String);
-    method public android.media.routing.MediaRouteSelector build();
-    method public android.media.routing.MediaRouteSelector.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouteSelector.Builder setOptionalFeatures(int);
-    method public android.media.routing.MediaRouteSelector.Builder setRequiredFeatures(int);
-    method public android.media.routing.MediaRouteSelector.Builder setServicePackageName(java.lang.String);
-  }
-
-  public abstract class MediaRouteService extends android.app.Service {
-    ctor public MediaRouteService();
-    method public android.media.routing.MediaRouter.ServiceMetadata getServiceMetadata();
-    method public android.os.IBinder onBind(android.content.Intent);
-    method public abstract android.media.routing.MediaRouteService.ClientSession onCreateClientSession(android.media.routing.MediaRouteService.ClientInfo);
-    field public static final java.lang.String SERVICE_INTERFACE = "android.media.routing.MediaRouteService";
-  }
-
-  public static final class MediaRouteService.ClientInfo {
-    method public java.lang.String getPackageName();
-    method public int getUid();
-  }
-
-  public static abstract class MediaRouteService.ClientSession {
-    ctor public MediaRouteService.ClientSession();
-    method public abstract boolean onConnect(android.media.routing.MediaRouter.ConnectionRequest, android.media.routing.MediaRouteService.ConnectionCallback);
-    method public abstract void onDisconnect();
-    method public void onPauseStream();
-    method public void onRelease();
-    method public void onResumeStream();
-    method public abstract boolean onStartDiscovery(android.media.routing.MediaRouter.DiscoveryRequest, android.media.routing.MediaRouteService.DiscoveryCallback);
-    method public abstract void onStopDiscovery();
-  }
-
-  public final class MediaRouteService.ConnectionCallback {
-    method public void onConnected(android.media.routing.MediaRouter.ConnectionInfo);
-    method public void onConnectionFailed(int, java.lang.CharSequence, android.os.Bundle);
-    method public void onDisconnected();
-  }
-
-  public final class MediaRouteService.DiscoveryCallback {
-    method public void onDestinationFound(android.media.routing.MediaRouter.DestinationInfo, java.util.List<android.media.routing.MediaRouter.RouteInfo>);
-    method public void onDestinationLost(android.media.routing.MediaRouter.DestinationInfo);
-    method public void onDiscoveryFailed(int, java.lang.CharSequence, android.os.Bundle);
-  }
-
-  public final class MediaRouter {
-    ctor public MediaRouter(android.content.Context);
-    method public void addSelector(android.media.routing.MediaRouteSelector);
-    method public void clearSelectors();
-    method public android.media.routing.MediaRouter.Delegate createDelegate();
-    method public android.media.routing.MediaRouter.ConnectionInfo getConnection();
-    method public int getConnectionState();
-    method public java.util.List<android.media.routing.MediaRouter.DestinationInfo> getDiscoveredDestinations();
-    method public java.util.List<android.media.routing.MediaRouter.RouteInfo> getDiscoveredRoutes(android.media.routing.MediaRouter.DestinationInfo);
-    method public int getDiscoveryState();
-    method public android.media.AudioAttributes getPreferredAudioAttributes();
-    method public android.view.Display getPreferredPresentationDisplay();
-    method public android.media.VolumeProvider getPreferredVolumeProvider();
-    method public android.media.routing.MediaRouter.DestinationInfo getSelectedDestination();
-    method public android.media.routing.MediaRouter.RouteInfo getSelectedRoute();
-    method public java.util.List<android.media.routing.MediaRouteSelector> getSelectors();
-    method public boolean isReleased();
-    method public void pauseStream();
-    method public void release();
-    method public void removeSelector(android.media.routing.MediaRouteSelector);
-    method public void resumeStream();
-    method public void setRoutingCallback(android.media.routing.MediaRouter.RoutingCallback, android.os.Handler);
-    field public static final int CONNECTION_ERROR_ABORTED = 1; // 0x1
-    field public static final int CONNECTION_ERROR_BARGED = 7; // 0x7
-    field public static final int CONNECTION_ERROR_BROKEN = 6; // 0x6
-    field public static final int CONNECTION_ERROR_BUSY = 4; // 0x4
-    field public static final int CONNECTION_ERROR_TIMEOUT = 5; // 0x5
-    field public static final int CONNECTION_ERROR_UNAUTHORIZED = 2; // 0x2
-    field public static final int CONNECTION_ERROR_UNKNOWN = 0; // 0x0
-    field public static final int CONNECTION_ERROR_UNREACHABLE = 3; // 0x3
-    field public static final int CONNECTION_FLAG_BARGE = 1; // 0x1
-    field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
-    field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
-    field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
-    field public static final int DISCONNECTION_REASON_APPLICATION_REQUEST = 0; // 0x0
-    field public static final int DISCONNECTION_REASON_ERROR = 2; // 0x2
-    field public static final int DISCONNECTION_REASON_USER_REQUEST = 1; // 0x1
-    field public static final int DISCOVERY_ERROR_ABORTED = 1; // 0x1
-    field public static final int DISCOVERY_ERROR_NO_CONNECTIVITY = 2; // 0x2
-    field public static final int DISCOVERY_ERROR_UNKNOWN = 0; // 0x0
-    field public static final int DISCOVERY_FLAG_BACKGROUND = 1; // 0x1
-    field public static final int DISCOVERY_STATE_STARTED = 1; // 0x1
-    field public static final int DISCOVERY_STATE_STOPPED = 0; // 0x0
-    field public static final int ROUTE_FEATURE_LIVE_AUDIO = 1; // 0x1
-    field public static final int ROUTE_FEATURE_LIVE_VIDEO = 2; // 0x2
-  }
-
-  public static final class MediaRouter.ConnectionInfo {
-    method public android.media.AudioAttributes getAudioAttributes();
-    method public android.os.Bundle getExtras();
-    method public int getFeatures();
-    method public android.view.Display getPresentationDisplay();
-    method public android.os.IBinder getProtocolBinder(java.lang.String);
-    method public android.os.IBinder getProtocolBinder(int);
-    method public T getProtocolObject(java.lang.Class<T>);
-    method public java.util.List<java.lang.String> getProtocols();
-    method public android.media.routing.MediaRouter.RouteInfo getRoute();
-    method public android.media.VolumeProvider getVolumeProvider();
-  }
-
-  public static final class MediaRouter.ConnectionInfo.Builder {
-    ctor public MediaRouter.ConnectionInfo.Builder(android.media.routing.MediaRouter.RouteInfo);
-    method public android.media.routing.MediaRouter.ConnectionInfo build();
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setAudioAttributes(android.media.AudioAttributes);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setPresentationDisplay(android.view.Display);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setProtocolBinder(java.lang.String, android.os.IBinder);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setProtocolStub(java.lang.Class<?>, android.os.IInterface);
-    method public android.media.routing.MediaRouter.ConnectionInfo.Builder setVolumeProvider(android.media.VolumeProvider);
-  }
-
-  public static final class MediaRouter.ConnectionRequest {
-    method public android.os.Bundle getExtras();
-    method public int getFlags();
-    method public android.media.routing.MediaRouter.RouteInfo getRoute();
-    method public void setExtras(android.os.Bundle);
-    method public void setFlags(int);
-    method public void setRoute(android.media.routing.MediaRouter.RouteInfo);
-  }
-
-  public static final class MediaRouter.Delegate {
-    ctor public MediaRouter.Delegate();
-    method public void addStateCallback(android.media.routing.MediaRouter.StateCallback, android.os.Handler);
-    method public void connect(android.media.routing.MediaRouter.DestinationInfo, int);
-    method public void disconnect(int);
-    method public int getConnectionState();
-    method public java.util.List<android.media.routing.MediaRouter.DestinationInfo> getDiscoveredDestinations();
-    method public int getDiscoveryState();
-    method public android.media.routing.MediaRouter.DestinationInfo getSelectedDestination();
-    method public boolean isReleased();
-    method public void removeStateCallback(android.media.routing.MediaRouter.StateCallback);
-    method public void startDiscovery(int);
-    method public void stopDiscovery();
-  }
-
-  public static final class MediaRouter.DestinationInfo {
-    method public java.lang.CharSequence getDescription();
-    method public android.os.Bundle getExtras();
-    method public int getIconResourceId();
-    method public java.lang.String getId();
-    method public java.lang.CharSequence getName();
-    method public android.media.routing.MediaRouter.ServiceMetadata getServiceMetadata();
-    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
-  }
-
-  public static final class MediaRouter.DestinationInfo.Builder {
-    ctor public MediaRouter.DestinationInfo.Builder(java.lang.String, android.media.routing.MediaRouter.ServiceMetadata, java.lang.CharSequence);
-    method public android.media.routing.MediaRouter.DestinationInfo build();
-    method public android.media.routing.MediaRouter.DestinationInfo.Builder setDescription(java.lang.CharSequence);
-    method public android.media.routing.MediaRouter.DestinationInfo.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouter.DestinationInfo.Builder setIconResourceId(int);
-  }
-
-  public static final class MediaRouter.DiscoveryRequest {
-    method public int getFlags();
-    method public java.util.List<android.media.routing.MediaRouteSelector> getSelectors();
-    method public void setFlags(int);
-    method public void setSelectors(java.util.List<android.media.routing.MediaRouteSelector>);
-  }
-
-  public static final class MediaRouter.RouteInfo {
-    method public android.media.routing.MediaRouter.DestinationInfo getDestination();
-    method public android.os.Bundle getExtras();
-    method public int getFeatures();
-    method public java.lang.String getId();
-    method public java.util.List<java.lang.String> getProtocols();
-    method public android.media.routing.MediaRouteSelector getSelector();
-  }
-
-  public static final class MediaRouter.RouteInfo.Builder {
-    ctor public MediaRouter.RouteInfo.Builder(java.lang.String, android.media.routing.MediaRouter.DestinationInfo, android.media.routing.MediaRouteSelector);
-    method public android.media.routing.MediaRouter.RouteInfo.Builder addProtocol(java.lang.Class<T>);
-    method public android.media.routing.MediaRouter.RouteInfo.Builder addProtocol(java.lang.String);
-    method public android.media.routing.MediaRouter.RouteInfo build();
-    method public android.media.routing.MediaRouter.RouteInfo.Builder setExtras(android.os.Bundle);
-    method public android.media.routing.MediaRouter.RouteInfo.Builder setFeatures(int);
-  }
-
-  public static abstract class MediaRouter.RoutingCallback extends android.media.routing.MediaRouter.StateCallback {
-    ctor public MediaRouter.RoutingCallback();
-    method public boolean onPrepareConnectionRequest(android.media.routing.MediaRouter.ConnectionRequest, android.media.routing.MediaRouter.DestinationInfo, java.util.List<android.media.routing.MediaRouter.RouteInfo>);
-    method public boolean onPrepareDiscoveryRequest(android.media.routing.MediaRouter.DiscoveryRequest, java.util.List<android.media.routing.MediaRouteSelector>);
-  }
-
-  public static final class MediaRouter.ServiceMetadata {
-    method public android.content.ComponentName getComponentName();
-    method public android.graphics.drawable.Drawable getIcon(android.content.pm.PackageManager);
-    method public java.lang.CharSequence getLabel(android.content.pm.PackageManager);
-    method public java.lang.String getPackageName();
-    method public android.content.pm.ServiceInfo getService();
-  }
-
-  public static abstract class MediaRouter.StateCallback {
-    ctor public MediaRouter.StateCallback();
-    method public void onConnected();
-    method public void onConnecting();
-    method public void onConnectionFailed(int, java.lang.CharSequence, android.os.Bundle);
-    method public void onConnectionStateChanged(int);
-    method public void onDestinationFound(android.media.routing.MediaRouter.DestinationInfo);
-    method public void onDestinationLost(android.media.routing.MediaRouter.DestinationInfo);
-    method public void onDisconnected();
-    method public void onDiscoveryFailed(int, java.lang.CharSequence, android.os.Bundle);
-    method public void onDiscoveryStarted();
-    method public void onDiscoveryStateChanged(int);
-    method public void onDiscoveryStopped();
-    method public void onReleased();
-    method public void onSelectedDestinationChanged(android.media.routing.MediaRouter.DestinationInfo);
-  }
-
-}
-
 package android.media.session {
 
   public final class MediaController {
     ctor public MediaController(android.content.Context, android.media.session.MediaSession.Token);
     method public void adjustVolume(int, int);
-    method public android.media.routing.MediaRouter.Delegate createMediaRouterDelegate();
     method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
     method public android.os.Bundle getExtras();
     method public long getFlags();
@@ -18986,7 +18751,6 @@
     method public void setExtras(android.os.Bundle);
     method public void setFlags(int);
     method public void setMediaButtonReceiver(android.app.PendingIntent);
-    method public void setMediaRouter(android.media.routing.MediaRouter);
     method public void setMetadata(android.media.MediaMetadata);
     method public void setPlaybackState(android.media.session.PlaybackState);
     method public void setPlaybackToLocal(android.media.AudioAttributes);
@@ -19802,6 +19566,7 @@
     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);
     method public void requestNetwork(android.net.NetworkRequest, android.app.PendingIntent);
     method public deprecated void setNetworkPreference(int);
@@ -19841,6 +19606,7 @@
     method public void onLinkPropertiesChanged(android.net.Network, android.net.LinkProperties);
     method public void onLosing(android.net.Network, int);
     method public void onLost(android.net.Network);
+    method public void onPreCheck(android.net.Network);
   }
 
   public static abstract interface ConnectivityManager.OnNetworkActiveListener {
@@ -20807,6 +20573,7 @@
     field public static final int REASON_INVALID_LISTENER = -3; // 0xfffffffd
     field public static final int REASON_INVALID_REQUEST = -4; // 0xfffffffc
     field public static final int REASON_NOT_AVAILABLE = -2; // 0xfffffffe
+    field public static final int REASON_PERMISSION_DENIED = -5; // 0xfffffffb
     field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff
     field public static final int RTT_BW_10_SUPPORT = 2; // 0x2
     field public static final int RTT_BW_160_SUPPORT = 32; // 0x20
@@ -24753,6 +24520,7 @@
     ctor public Build.VERSION();
     field public static final java.lang.String CODENAME;
     field public static final java.lang.String INCREMENTAL;
+    field public static final int PREVIEW_SDK_INT;
     field public static final java.lang.String RELEASE;
     field public static final deprecated java.lang.String SDK;
     field public static final int SDK_INT;
@@ -25729,7 +25497,7 @@
     method public boolean isUserAGoat();
     method public boolean isUserRunning(android.os.UserHandle);
     method public boolean isUserRunningOrStopping(android.os.UserHandle);
-    method public boolean setRestrictionsChallenge(java.lang.String);
+    method public deprecated boolean setRestrictionsChallenge(java.lang.String);
     method public deprecated void setUserRestriction(java.lang.String, boolean);
     method public deprecated void setUserRestrictions(android.os.Bundle);
     method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle);
@@ -28744,6 +28512,7 @@
     field public static final java.lang.String ACTION_WIFI_IP_SETTINGS = "android.settings.WIFI_IP_SETTINGS";
     field public static final java.lang.String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS";
     field public static final java.lang.String ACTION_WIRELESS_SETTINGS = "android.settings.WIRELESS_SETTINGS";
+    field public static final java.lang.String ACTION_ZEN_ACCESS_SETTINGS = "android.settings.ZEN_ACCESS_SETTINGS";
     field public static final java.lang.String AUTHORITY = "settings";
     field public static final java.lang.String EXTRA_ACCOUNT_TYPES = "account_types";
     field public static final java.lang.String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
@@ -29111,7 +28880,8 @@
   public static final class Telephony.Carriers implements android.provider.BaseColumns {
     field public static final java.lang.String APN = "apn";
     field public static final java.lang.String AUTH_TYPE = "authtype";
-    field public static final java.lang.String BEARER = "bearer";
+    field public static final deprecated java.lang.String BEARER = "bearer";
+    field public static final java.lang.String BEARER_BITMASK = "bearer_bitmask";
     field public static final java.lang.String CARRIER_ENABLED = "carrier_enabled";
     field public static final android.net.Uri CONTENT_URI;
     field public static final java.lang.String CURRENT = "current";
@@ -29474,7 +29244,6 @@
     method public void copyTo(short[]);
     method public void copyTo(int[]);
     method public void copyTo(float[]);
-    method public void copyToFieldPacker(int, int, int, int, android.renderscript.FieldPacker);
     method public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
     method public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap);
     method public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
@@ -30629,7 +30398,7 @@
     method public android.security.KeyGeneratorSpec.Builder setAlias(java.lang.String);
     method public android.security.KeyGeneratorSpec.Builder setBlockModes(java.lang.String...);
     method public android.security.KeyGeneratorSpec.Builder setEncryptionPaddings(java.lang.String...);
-    method public android.security.KeyGeneratorSpec.Builder setEncryptionRequired(boolean);
+    method public android.security.KeyGeneratorSpec.Builder setEncryptionRequired();
     method public android.security.KeyGeneratorSpec.Builder setKeySize(int);
     method public android.security.KeyGeneratorSpec.Builder setKeyValidityEnd(java.util.Date);
     method public android.security.KeyGeneratorSpec.Builder setKeyValidityForConsumptionEnd(java.util.Date);
@@ -30706,6 +30475,53 @@
   public abstract class KeyStoreKeyProperties {
   }
 
+  public static abstract class KeyStoreKeyProperties.Algorithm {
+    field public static final java.lang.String AES = "AES";
+    field public static final java.lang.String EC = "EC";
+    field public static final java.lang.String HMAC_SHA1 = "HmacSHA1";
+    field public static final java.lang.String HMAC_SHA224 = "HmacSHA224";
+    field public static final java.lang.String HMAC_SHA256 = "HmacSHA256";
+    field public static final java.lang.String HMAC_SHA384 = "HmacSHA384";
+    field public static final java.lang.String HMAC_SHA512 = "HmacSHA512";
+    field public static final java.lang.String RSA = "RSA";
+  }
+
+  public static abstract class KeyStoreKeyProperties.AlgorithmEnum implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class KeyStoreKeyProperties.BlockMode {
+    field public static final java.lang.String CBC = "CBC";
+    field public static final java.lang.String CTR = "CTR";
+    field public static final java.lang.String ECB = "ECB";
+    field public static final java.lang.String GCM = "GCM";
+  }
+
+  public static abstract class KeyStoreKeyProperties.BlockModeEnum implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class KeyStoreKeyProperties.Digest {
+    field public static final java.lang.String MD5 = "MD5";
+    field public static final java.lang.String NONE = "NONE";
+    field public static final java.lang.String SHA1 = "SHA-1";
+    field public static final java.lang.String SHA224 = "SHA-224";
+    field public static final java.lang.String SHA256 = "SHA-256";
+    field public static final java.lang.String SHA384 = "SHA-384";
+    field public static final java.lang.String SHA512 = "SHA-512";
+  }
+
+  public static abstract class KeyStoreKeyProperties.DigestEnum implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class KeyStoreKeyProperties.EncryptionPadding {
+    field public static final java.lang.String NONE = "NoPadding";
+    field public static final java.lang.String PKCS7 = "PKCS7Padding";
+    field public static final java.lang.String RSA_OAEP = "OAEPPadding";
+    field public static final java.lang.String RSA_PKCS1 = "PKCS1Padding";
+  }
+
+  public static abstract class KeyStoreKeyProperties.EncryptionPaddingEnum implements java.lang.annotation.Annotation {
+  }
+
   public static abstract class KeyStoreKeyProperties.Origin {
     field public static final int GENERATED = 1; // 0x1
     field public static final int IMPORTED = 2; // 0x2
@@ -30725,6 +30541,14 @@
   public static abstract class KeyStoreKeyProperties.PurposeEnum implements java.lang.annotation.Annotation {
   }
 
+  public static abstract class KeyStoreKeyProperties.SignaturePadding {
+    field public static final java.lang.String RSA_PKCS1 = "PKCS1";
+    field public static final java.lang.String RSA_PSS = "PSS";
+  }
+
+  public static abstract class KeyStoreKeyProperties.SignaturePaddingEnum implements java.lang.annotation.Annotation {
+  }
+
   public class KeyStoreKeySpec implements java.security.spec.KeySpec {
     method public java.lang.String[] getBlockModes();
     method public java.lang.String[] getDigests();
@@ -30738,9 +30562,9 @@
     method public int getPurposes();
     method public java.lang.String[] getSignaturePaddings();
     method public int getUserAuthenticationValidityDurationSeconds();
-    method public boolean isTeeBacked();
+    method public boolean isInsideSecureHardware();
     method public boolean isUserAuthenticationRequired();
-    method public boolean isUserAuthenticationRequirementTeeEnforced();
+    method public boolean isUserAuthenticationRequirementEnforcedBySecureHardware();
   }
 
   public final class KeyStoreParameter implements java.security.KeyStore.ProtectionParameter {
@@ -30818,13 +30642,17 @@
     method public android.os.IBinder onBind(android.content.Intent);
     method public void onDownloadMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Integer>);
     method public void onFilterSms(android.service.carrier.MessagePdu, java.lang.String, int, int, android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Boolean>);
-    method public void onSendDataSms(byte[], int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public deprecated void onSendDataSms(byte[], int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendDataSms(byte[], int, java.lang.String, int, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
     method public void onSendMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMmsResult>);
-    method public void onSendMultipartTextSms(java.util.List<java.lang.String>, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
-    method public void onSendTextSms(java.lang.String, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public deprecated void onSendMultipartTextSms(java.util.List<java.lang.String>, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method public void onSendMultipartTextSms(java.util.List<java.lang.String>, int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method public deprecated void onSendTextSms(java.lang.String, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendTextSms(java.lang.String, int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
     field public static final int DOWNLOAD_STATUS_ERROR = 2; // 0x2
     field public static final int DOWNLOAD_STATUS_OK = 0; // 0x0
     field public static final int DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
+    field public static final int SEND_FLAG_REQUEST_DELIVERY_STATUS = 1; // 0x1
     field public static final int SEND_STATUS_ERROR = 2; // 0x2
     field public static final int SEND_STATUS_OK = 0; // 0x0
     field public static final int SEND_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
@@ -30868,10 +30696,8 @@
   public final class ChooserTarget implements android.os.Parcelable {
     ctor public ChooserTarget(java.lang.CharSequence, android.graphics.Bitmap, float, android.app.PendingIntent);
     ctor public ChooserTarget(java.lang.CharSequence, android.graphics.Bitmap, float, android.content.IntentSender);
-    ctor public ChooserTarget(java.lang.CharSequence, android.graphics.Bitmap, float, android.content.Intent);
     method public int describeContents();
     method public android.graphics.Bitmap getIcon();
-    method public android.content.Intent getIntent();
     method public android.content.IntentSender getIntentSender();
     method public float getScore();
     method public java.lang.CharSequence getTitle();
@@ -31024,7 +30850,6 @@
     method public final int getCurrentInterruptionFilter();
     method public final int getCurrentListenerHints();
     method public android.service.notification.NotificationListenerService.RankingMap getCurrentRanking();
-    method public final android.app.NotificationManager.Policy.Token getNotificationPolicyToken();
     method public android.os.IBinder onBind(android.content.Intent);
     method public void onInterruptionFilterChanged(int);
     method public void onListenerConnected();
@@ -31215,6 +31040,7 @@
     method public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(java.lang.String, java.util.Locale, android.service.voice.AlwaysOnHotwordDetector.Callback);
     method public static boolean isActiveService(android.content.Context, android.content.ComponentName);
     method public android.os.IBinder onBind(android.content.Intent);
+    method public void onLaunchVoiceAssistFromKeyguard();
     method public void onReady();
     method public void onShutdown();
     method public void showSession(android.os.Bundle, int);
@@ -32306,6 +32132,7 @@
     method public void playDtmfTone(char);
     method public void postDialContinue(boolean);
     method public void registerCallback(android.telecom.Call.Callback);
+    method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
     method public void reject(boolean, java.lang.String);
     method public deprecated void removeListener(android.telecom.Call.Listener);
     method public void splitFromConference();
@@ -32356,17 +32183,17 @@
     method public int getHandlePresentation();
     method public android.telecom.StatusHints getStatusHints();
     method public int getVideoState();
+    method public static boolean hasProperty(int, int);
+    method public boolean hasProperty(int);
+    method public static java.lang.String propertiesToString(int);
     field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
     field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
-    field public static final int CAPABILITY_GENERIC_CONFERENCE = 16384; // 0x4000
-    field public static final int CAPABILITY_HIGH_DEF_AUDIO = 32768; // 0x8000
     field public static final int CAPABILITY_HOLD = 1; // 0x1
     field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
     field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4
     field public static final int CAPABILITY_MUTE = 64; // 0x40
     field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
     field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
-    field public static final int CAPABILITY_SHOW_CALLBACK_NUMBER = 131072; // 0x20000
     field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
     field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
     field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
@@ -32375,18 +32202,17 @@
     field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
     field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
     field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
-    field public static final int CAPABILITY_WIFI = 65536; // 0x10000
+    field public static final int PROPERTY_CONFERENCE = 1; // 0x1
+    field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4
+    field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
+    field public static final int PROPERTY_HIGH_DEF_AUDIO = 16; // 0x10
+    field public static final int PROPERTY_WIFI = 8; // 0x8
   }
 
   public static abstract deprecated class Call.Listener extends android.telecom.Call.Callback {
     ctor public Call.Listener();
   }
 
-  public class CallProperties {
-    ctor public CallProperties();
-    field public static final int CONFERENCE = 1; // 0x1
-  }
-
   public final class CameraCapabilities implements android.os.Parcelable {
     ctor public CameraCapabilities(int, int);
     method public int describeContents();
@@ -32410,6 +32236,8 @@
     method public android.telecom.Connection getPrimaryConnection();
     method public final int getState();
     method public final android.telecom.StatusHints getStatusHints();
+    method public android.telecom.Connection.VideoProvider getVideoProvider();
+    method public int getVideoState();
     method public void onAudioStateChanged(android.telecom.AudioState);
     method public void onConnectionAdded(android.telecom.Connection);
     method public void onDisconnect();
@@ -32429,6 +32257,8 @@
     method public final void setDisconnected(android.telecom.DisconnectCause);
     method public final void setOnHold();
     method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(android.telecom.Connection, int);
     field public static final long CONNECT_TIME_NOT_SPECIFIED = 0L; // 0x0L
   }
 
@@ -32456,6 +32286,7 @@
     method public final android.telecom.Connection.VideoProvider getVideoProvider();
     method public final boolean isRingbackRequested();
     method public void onAbort();
+    method public void onAnswer(int);
     method public void onAnswer();
     method public void onAudioStateChanged(android.telecom.AudioState);
     method public void onDisconnect();
@@ -32485,7 +32316,11 @@
     method public final void setRingbackRequested(boolean);
     method public final void setRinging();
     method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(int);
     method public static java.lang.String stateToString(int);
+    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 524288; // 0x80000
     field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
     field public static final int CAPABILITY_HOLD = 1; // 0x1
     field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
@@ -32493,6 +32328,12 @@
     field public static final int CAPABILITY_MUTE = 64; // 0x40
     field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
     field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL = 3072; // 0xc00
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_RX = 1024; // 0x400
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
     field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
     field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
     field public static final int STATE_ACTIVE = 4; // 0x4
@@ -32513,7 +32354,7 @@
     method public void handleCallSessionEvent(int);
     method public abstract void onRequestCameraCapabilities();
     method public abstract void onRequestConnectionDataUsage();
-    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile);
+    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
     method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
     method public abstract void onSetCamera(java.lang.String);
     method public abstract void onSetDeviceOrientation(int);
@@ -32538,10 +32379,12 @@
 
   public final class ConnectionRequest implements android.os.Parcelable {
     ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle);
+    ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle, int);
     method public int describeContents();
     method public android.telecom.PhoneAccountHandle getAccountHandle();
     method public android.net.Uri getAddress();
     method public android.os.Bundle getExtras();
+    method public int getVideoState();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.telecom.ConnectionRequest> CREATOR;
   }
@@ -32622,6 +32465,7 @@
   public static abstract class InCallService.VideoCall {
     ctor public InCallService.VideoCall();
     method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
+    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback, android.os.Handler);
     method public abstract void requestCallDataUsage();
     method public abstract void requestCameraCapabilities();
     method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
@@ -32632,7 +32476,7 @@
     method public abstract void setPauseImage(java.lang.String);
     method public abstract void setPreviewSurface(android.view.Surface);
     method public abstract void setZoom(float);
-    method public abstract void unregisterCallback();
+    method public abstract void unregisterCallback(android.telecom.InCallService.VideoCall.Callback);
   }
 
   public static abstract class InCallService.VideoCall.Callback {
@@ -32740,6 +32584,7 @@
     method public void merge();
     method public void playDtmfTone(char);
     method public final void registerCallback(android.telecom.RemoteConference.Callback);
+    method public final void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
     method public void separate(android.telecom.RemoteConnection);
     method public void setAudioState(android.telecom.AudioState);
     method public void stopDtmfTone();
@@ -32779,6 +32624,7 @@
     method public void playDtmfTone(char);
     method public void postDialContinue(boolean);
     method public void registerCallback(android.telecom.RemoteConnection.Callback);
+    method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
     method public void reject();
     method public void setAudioState(android.telecom.AudioState);
     method public void stopDtmfTone();
@@ -32900,6 +32746,7 @@
     method public static boolean isPaused(int);
     method public static boolean isReceptionEnabled(int);
     method public static boolean isTransmissionEnabled(int);
+    method public static java.lang.String videoStateToString(int);
     field public static final int AUDIO_ONLY = 0; // 0x0
     field public static final int BIDIRECTIONAL = 3; // 0x3
     field public static final int PAUSED = 4; // 0x4
@@ -33322,7 +33169,8 @@
   public class SmsMessage {
     method public static int[] calculateLength(java.lang.CharSequence, boolean);
     method public static int[] calculateLength(java.lang.String, boolean);
-    method public static android.telephony.SmsMessage createFromPdu(byte[]);
+    method public static deprecated android.telephony.SmsMessage createFromPdu(byte[]);
+    method public static android.telephony.SmsMessage createFromPdu(byte[], java.lang.String);
     method public java.lang.String getDisplayMessageBody();
     method public java.lang.String getDisplayOriginatingAddress();
     method public java.lang.String getEmailBody();
@@ -34745,6 +34593,21 @@
     method public int getTopPadding();
   }
 
+  public static final class StaticLayout.Builder {
+    method public android.text.StaticLayout build();
+    method public static android.text.StaticLayout.Builder obtain(java.lang.CharSequence, int, int, android.text.TextPaint, int);
+    method public android.text.StaticLayout.Builder setAlignment(android.text.Layout.Alignment);
+    method public android.text.StaticLayout.Builder setBreakStrategy(int);
+    method public android.text.StaticLayout.Builder setEllipsize(android.text.TextUtils.TruncateAt);
+    method public android.text.StaticLayout.Builder setEllipsizedWidth(int);
+    method public android.text.StaticLayout.Builder setIncludePad(boolean);
+    method public android.text.StaticLayout.Builder setIndents(int[], int[]);
+    method public android.text.StaticLayout.Builder setLineSpacing(float, float);
+    method public android.text.StaticLayout.Builder setMaxLines(int);
+    method public android.text.StaticLayout.Builder setText(java.lang.CharSequence);
+    method public android.text.StaticLayout.Builder setTextDir(android.text.TextDirectionHeuristic);
+  }
+
   public abstract interface TextDirectionHeuristic {
     method public abstract boolean isRtl(char[], int, int);
     method public abstract boolean isRtl(java.lang.CharSequence, int, int);
@@ -36323,14 +36186,6 @@
   }
 
   public deprecated class FloatMath {
-    method public static float ceil(float);
-    method public static float cos(float);
-    method public static float exp(float);
-    method public static float floor(float);
-    method public static float hypot(float, float);
-    method public static float pow(float, float);
-    method public static float sin(float);
-    method public static float sqrt(float);
   }
 
   public final class JsonReader implements java.io.Closeable {
@@ -37084,6 +36939,7 @@
     field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
     field public static final int KEYBOARD_TAP = 3; // 0x3
     field public static final int LONG_PRESS = 0; // 0x0
+    field public static final int STYLUS_BUTTON_PRESS = 6; // 0x6
     field public static final int VIRTUAL_KEY = 1; // 0x1
   }
 
@@ -37816,6 +37672,7 @@
     method public final float getY(int);
     method public final float getYPrecision();
     method public final boolean isButtonPressed(int);
+    method public final boolean isStylusButtonPressed();
     method public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int);
     method public static deprecated android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int);
     method public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int);
@@ -38206,7 +38063,7 @@
     method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
     method public boolean dispatchNestedScroll(int, int, int, int, int[]);
     method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void dispatchProvideAssistStructure(android.view.ViewAssistStructure);
+    method public void dispatchProvideStructure(android.view.ViewStructure);
     method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSetActivated(boolean);
@@ -38335,6 +38192,7 @@
     method public int getScrollBarFadeDuration();
     method public int getScrollBarSize();
     method public int getScrollBarStyle();
+    method public int getScrollIndicators();
     method public final int getScrollX();
     method public final int getScrollY();
     method public int getSolidColor();
@@ -38385,7 +38243,6 @@
     method public void invalidateOutline();
     method public boolean isAccessibilityFocused();
     method public boolean isActivated();
-    method public boolean isAssistBlocked();
     method public boolean isAttachedToWindow();
     method public boolean isClickable();
     method public boolean isDirty();
@@ -38416,10 +38273,12 @@
     method public boolean isSaveEnabled();
     method public boolean isSaveFromParentEnabled();
     method public boolean isScrollContainer();
+    method public boolean isScrollIndicatorEnabled(int);
     method public boolean isScrollbarFadingEnabled();
     method public boolean isSelected();
     method public boolean isShown();
     method public boolean isSoundEffectsEnabled();
+    method public boolean isStylusButtonPressable();
     method public boolean isTextAlignmentResolved();
     method public boolean isTextDirectionResolved();
     method public boolean isVerticalFadingEdgeEnabled();
@@ -38465,8 +38324,8 @@
     method protected void onMeasure(int, int);
     method protected void onOverScrolled(int, int, boolean, boolean);
     method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void onProvideAssistStructure(android.view.ViewAssistStructure);
-    method public void onProvideVirtualAssistStructure(android.view.ViewAssistStructure);
+    method public void onProvideStructure(android.view.ViewStructure);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
     method protected void onRestoreInstanceState(android.os.Parcelable);
     method public void onRtlPropertiesChanged(int);
     method protected android.os.Parcelable onSaveInstanceState();
@@ -38487,6 +38346,7 @@
     method public boolean performHapticFeedback(int);
     method public boolean performHapticFeedback(int, int);
     method public boolean performLongClick();
+    method public boolean performStylusButtonPress();
     method public void playSoundEffect(int);
     method public boolean post(java.lang.Runnable);
     method public boolean postDelayed(java.lang.Runnable, long);
@@ -38528,7 +38388,6 @@
     method public void setActivated(boolean);
     method public void setAlpha(float);
     method public void setAnimation(android.view.animation.Animation);
-    method public void setAssistBlocked(boolean);
     method public void setBackground(android.graphics.drawable.Drawable);
     method public void setBackgroundColor(int);
     method public deprecated void setBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -38590,6 +38449,7 @@
     method public void setOnKeyListener(android.view.View.OnKeyListener);
     method public void setOnLongClickListener(android.view.View.OnLongClickListener);
     method public void setOnScrollChangeListener(android.view.View.OnScrollChangeListener);
+    method public void setOnStylusButtonPressListener(android.view.View.OnStylusButtonPressListener);
     method public void setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener);
     method public void setOnTouchListener(android.view.View.OnTouchListener);
     method public void setOutlineProvider(android.view.ViewOutlineProvider);
@@ -38612,12 +38472,15 @@
     method public void setScrollBarSize(int);
     method public void setScrollBarStyle(int);
     method public void setScrollContainer(boolean);
+    method public void setScrollIndicators(int);
+    method public void setScrollIndicators(int, int);
     method public void setScrollX(int);
     method public void setScrollY(int);
     method public void setScrollbarFadingEnabled(boolean);
     method public void setSelected(boolean);
     method public void setSoundEffectsEnabled(boolean);
     method public void setStateListAnimator(android.animation.StateListAnimator);
+    method public void setStylusButtonPressable(boolean);
     method public void setSystemUiVisibility(int);
     method public void setTag(java.lang.Object);
     method public void setTag(int, java.lang.Object);
@@ -38736,6 +38599,12 @@
     field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
     field public static final int SCROLL_AXIS_NONE = 0; // 0x0
     field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
     field protected static final int[] SELECTED_STATE_SET;
     field protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET;
     field public static final int SOUND_EFFECTS_ENABLED = 134217728; // 0x8000000
@@ -38865,6 +38734,10 @@
     method public abstract void onScrollChange(android.view.View, int, int, int, int);
   }
 
+  public static abstract interface View.OnStylusButtonPressListener {
+    method public abstract boolean onStylusButtonPress(android.view.View);
+  }
+
   public static abstract interface View.OnSystemUiVisibilityChangeListener {
     method public abstract void onSystemUiVisibilityChange(int);
   }
@@ -38877,39 +38750,8 @@
     method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
   }
 
-  public abstract class ViewAssistStructure {
+  public abstract deprecated class ViewAssistStructure extends android.view.ViewStructure {
     ctor public ViewAssistStructure();
-    method public abstract void asyncCommit();
-    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
-    method public abstract void clearExtras();
-    method public abstract android.os.Bundle editExtras();
-    method public abstract int getChildCount();
-    method public abstract java.lang.CharSequence getHint();
-    method public abstract java.lang.CharSequence getText();
-    method public abstract int getTextSelectionEnd();
-    method public abstract int getTextSelectionStart();
-    method public abstract android.view.ViewAssistStructure newChild(int);
-    method public abstract void setAccessibilityFocused(boolean);
-    method public abstract void setActivated(boolean);
-    method public abstract void setAssistBlocked(boolean);
-    method public abstract void setCheckable(boolean);
-    method public abstract void setChecked(boolean);
-    method public abstract void setChildCount(int);
-    method public abstract void setClassName(java.lang.String);
-    method public abstract void setClickable(boolean);
-    method public abstract void setContentDescription(java.lang.CharSequence);
-    method public abstract void setDimens(int, int, int, int, int, int);
-    method public abstract void setEnabled(boolean);
-    method public abstract void setFocusable(boolean);
-    method public abstract void setFocused(boolean);
-    method public abstract void setHint(java.lang.CharSequence);
-    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
-    method public abstract void setLongClickable(boolean);
-    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 setTextPaint(android.text.TextPaint);
-    method public abstract void setVisibility(int);
   }
 
   public class ViewConfiguration {
@@ -39286,6 +39128,41 @@
     method public android.view.ViewPropertyAnimator zBy(float);
   }
 
+  public abstract class ViewStructure {
+    ctor public ViewStructure();
+    method public abstract void asyncCommit();
+    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
+    method public abstract int getChildCount();
+    method public abstract android.os.Bundle getExtras();
+    method public abstract java.lang.CharSequence getHint();
+    method public abstract java.lang.CharSequence getText();
+    method public abstract int getTextSelectionEnd();
+    method public abstract int getTextSelectionStart();
+    method public abstract boolean hasExtras();
+    method public abstract android.view.ViewAssistStructure newChild(int);
+    method public abstract void setAccessibilityFocused(boolean);
+    method public abstract void setActivated(boolean);
+    method public abstract void setCheckable(boolean);
+    method public abstract void setChecked(boolean);
+    method public abstract void setChildCount(int);
+    method public abstract void setClassName(java.lang.String);
+    method public abstract void setClickable(boolean);
+    method public abstract void setContentDescription(java.lang.CharSequence);
+    method public abstract void setDimens(int, int, int, int, int, int);
+    method public abstract void setEnabled(boolean);
+    method public abstract void setFocusable(boolean);
+    method public abstract void setFocused(boolean);
+    method public abstract void setHint(java.lang.CharSequence);
+    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
+    method public abstract void setLongClickable(boolean);
+    method public abstract void setSelected(boolean);
+    method public abstract void setStylusButtonPressable(boolean);
+    method public abstract void setText(java.lang.CharSequence);
+    method public abstract void setText(java.lang.CharSequence, int, int);
+    method public abstract void setTextPaint(android.text.TextPaint);
+    method public abstract void setVisibility(int);
+  }
+
   public final class ViewStub extends android.view.View {
     ctor public ViewStub(android.content.Context);
     ctor public ViewStub(android.content.Context, int);
@@ -39794,6 +39671,7 @@
     field public static final int TYPE_VIEW_LONG_CLICKED = 2; // 0x2
     field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
     field public static final int TYPE_VIEW_SELECTED = 4; // 0x4
+    field public static final int TYPE_VIEW_STYLUS_BUTTON_PRESSED = 8388608; // 0x800000
     field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10
     field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
     field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
@@ -39884,6 +39762,7 @@
     method public boolean isPassword();
     method public boolean isScrollable();
     method public boolean isSelected();
+    method public boolean isStylusButtonPressable();
     method public boolean isVisibleToUser();
     method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View);
     method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View, int);
@@ -39934,6 +39813,7 @@
     method public void setSelected(boolean);
     method public void setSource(android.view.View);
     method public void setSource(android.view.View, int);
+    method public void setStylusButtonPressable(boolean);
     method public void setText(java.lang.CharSequence);
     method public void setTextSelection(int, int);
     method public void setTraversalAfter(android.view.View);
@@ -40005,12 +39885,17 @@
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_BACKWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_DOWN;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_FORWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_LEFT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_RIGHT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_TO_POSITION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_UP;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SELECT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_SELECTION;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_TEXT;
     field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_ON_SCREEN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_STYLUS_BUTTON_PRESS;
   }
 
   public static final class AccessibilityNodeInfo.CollectionInfo {
@@ -41868,7 +41753,7 @@
     method public abstract boolean onKeyUp(int, android.view.KeyEvent);
     method public abstract void onMeasure(int, int);
     method public abstract void onOverScrolled(int, int, boolean, boolean);
-    method public abstract void onProvideVirtualAssistStructure(android.view.ViewAssistStructure);
+    method public abstract void onProvideVirtualAssistStructure(android.view.ViewStructure);
     method public abstract void onScrollChanged(int, int, int, int);
     method public abstract void onSizeChanged(int, int, int, int);
     method public abstract void onStartTemporaryDetach();
@@ -43076,6 +42961,7 @@
     method public void setSoftInputMode(int);
     method public void setVerticalOffset(int);
     method public void setWidth(int);
+    method public void setWindowLayoutType(int);
     method public void show();
     field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
     field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 5e77e15..0046a70 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -108,6 +108,21 @@
 
 }
 
+package android.util {
+
+  public deprecated class FloatMath {
+    method public static float ceil(float);
+    method public static float cos(float);
+    method public static float exp(float);
+    method public static float floor(float);
+    method public static float hypot(float, float);
+    method public static float pow(float, float);
+    method public static float sin(float);
+    method public static float sqrt(float);
+  }
+
+}
+
 package android.view {
 
   public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index 219d35b..808e124 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -142,8 +142,8 @@
                 "       am task resizeable <TASK_ID> [true|false]\n" +
                 "       am task resize <TASK_ID> <LEFT,TOP,RIGHT,BOTTOM>\n" +
                 "       am get-config\n" +
-                "       am set-idle [--user <USER_ID>] <PACKAGE> true|false\n" +
-                "       am get-idle [--user <USER_ID>] <PACKAGE>\n" +
+                "       am set-inactive [--user <USER_ID>] <PACKAGE> true|false\n" +
+                "       am get-inactive [--user <USER_ID>] <PACKAGE>\n" +
                 "\n" +
                 "am start: start an Activity.  Options are:\n" +
                 "    -D: enable debugging\n" +
@@ -284,9 +284,9 @@
                 "am get-config: retrieve the configuration and any recent configurations\n" +
                 "  of the device\n" +
                 "\n" +
-                "am set-idle: sets the idle state of an app\n" +
+                "am set-inactive: sets the inactive state of an app\n" +
                 "\n" +
-                "am get-idle: returns the idle state of an app\n" +
+                "am get-inactive: returns the inactive state of an app\n" +
                 "\n" +
                 "\n" +
                 "<INTENT> specifications include these flags and arguments:\n" +
@@ -395,10 +395,10 @@
             runTask();
         } else if (op.equals("get-config")) {
             runGetConfig();
-        } else if (op.equals("set-idle")) {
-            runSetIdle();
-        } else if (op.equals("get-idle")) {
-            runGetIdle();
+        } else if (op.equals("set-inactive")) {
+            runSetInactive();
+        } else if (op.equals("get-inactive")) {
+            runGetInactive();
         } else {
             showError("Error: unknown command '" + op + "'");
         }
@@ -2030,7 +2030,7 @@
         }
     }
 
-    private void runSetIdle() throws Exception {
+    private void runSetInactive() throws Exception {
         int userId = UserHandle.USER_OWNER;
 
         String opt;
@@ -2047,10 +2047,10 @@
 
         IUsageStatsManager usm = IUsageStatsManager.Stub.asInterface(ServiceManager.getService(
                 Context.USAGE_STATS_SERVICE));
-        usm.setAppIdle(packageName, Boolean.parseBoolean(value), userId);
+        usm.setAppInactive(packageName, Boolean.parseBoolean(value), userId);
     }
 
-    private void runGetIdle() throws Exception {
+    private void runGetInactive() throws Exception {
         int userId = UserHandle.USER_OWNER;
 
         String opt;
@@ -2066,7 +2066,7 @@
 
         IUsageStatsManager usm = IUsageStatsManager.Stub.asInterface(ServiceManager.getService(
                 Context.USAGE_STATS_SERVICE));
-        boolean isIdle = usm.isAppIdle(packageName, userId);
+        boolean isIdle = usm.isAppInactive(packageName, userId);
         System.out.println("Idle=" + isIdle);
     }
 
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index bb25ec6..21dc1e2 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -630,7 +630,10 @@
                     }
                     glDisable(GL_SCISSOR_TEST);
                 }
-                glDrawTexiOES(xc, yc, 0, animation.width, animation.height);
+                // specify the y center as ceiling((mHeight - animation.height) / 2)
+                // which is equivalent to mHeight - (yc + animation.height)
+                glDrawTexiOES(xc, mHeight - (yc + animation.height),
+                              0, animation.width, animation.height);
                 eglSwapBuffers(mDisplay, mSurface);
 
                 nsecs_t now = systemTime();
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index ffa36d6..fd40d99 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -16,6 +16,8 @@
 
 package android.accounts;
 
+import android.annotation.RequiresPermission;
+import android.annotation.Size;
 import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -49,6 +51,11 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
+import static android.Manifest.permission.AUTHENTICATE_ACCOUNTS;
+import static android.Manifest.permission.GET_ACCOUNTS;
+import static android.Manifest.permission.MANAGE_ACCOUNTS;
+import static android.Manifest.permission.USE_CREDENTIALS;
+
 /**
  * This class provides access to a centralized registry of the user's
  * online accounts.  The user enters credentials (username and password) once
@@ -319,6 +326,7 @@
      * @param account The account to query for a password
      * @return The account's password, null if none or if the account doesn't exist
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public String getPassword(final Account account) {
         if (account == null) throw new IllegalArgumentException("account is null");
         try {
@@ -344,6 +352,7 @@
      * @param account The account to query for user data
      * @return The user data, null if the account or key doesn't exist
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public String getUserData(final Account account, final String key) {
         if (account == null) throw new IllegalArgumentException("account is null");
         if (key == null) throw new IllegalArgumentException("key is null");
@@ -409,6 +418,7 @@
      * @return An array of {@link Account}, one for each account.  Empty
      *     (never null) if no accounts have been added.
      */
+    @RequiresPermission(GET_ACCOUNTS)
     public Account[] getAccounts() {
         try {
             return mService.getAccounts(null);
@@ -431,6 +441,7 @@
      * @return An array of {@link Account}, one for each account.  Empty
      *     (never null) if no accounts have been added.
      */
+    @RequiresPermission(GET_ACCOUNTS)
     public Account[] getAccountsAsUser(int userId) {
         try {
             return mService.getAccountsAsUser(null, userId);
@@ -490,6 +501,7 @@
      * @return An array of {@link Account}, one per matching account.  Empty
      *     (never null) if no accounts of the specified type have been added.
      */
+    @RequiresPermission(GET_ACCOUNTS)
     public Account[] getAccountsByType(String type) {
         return getAccountsByTypeAsUser(type, Process.myUserHandle());
     }
@@ -576,6 +588,7 @@
      * @return An {@link AccountManagerFuture} which resolves to a Boolean,
      * true if the account exists and has all of the specified features.
      */
+    @RequiresPermission(GET_ACCOUNTS)
     public AccountManagerFuture<Boolean> hasFeatures(final Account account,
             final String[] features,
             AccountManagerCallback<Boolean> callback, Handler handler) {
@@ -621,6 +634,7 @@
      *     {@link Account}, one per account of the specified type which
      *     matches the requested features.
      */
+    @RequiresPermission(GET_ACCOUNTS)
     public AccountManagerFuture<Account[]> getAccountsByTypeAndFeatures(
             final String type, final String[] features,
             AccountManagerCallback<Account[]> callback, Handler handler) {
@@ -659,6 +673,7 @@
      * @return True if the account was successfully added, false if the account
      *     already exists, the account is null, or another error occurs.
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public boolean addAccountExplicitly(Account account, String password, Bundle userdata) {
         if (account == null) throw new IllegalArgumentException("account is null");
         try {
@@ -684,6 +699,7 @@
      *
      * @param account The {@link Account} to be updated.
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public boolean notifyAccountAuthenticated(Account account) {
         if (account == null)
             throw new IllegalArgumentException("account is null");
@@ -715,9 +731,10 @@
      *     after the name change. If successful the account's name will be the
      *     specified new name.
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public AccountManagerFuture<Account> renameAccount(
             final Account account,
-            final String newName,
+            @Size(min = 1) final String newName,
             AccountManagerCallback<Account> callback,
             Handler handler) {
         if (account == null) throw new IllegalArgumentException("account is null.");
@@ -783,6 +800,7 @@
      *     {@link #removeAccount(Account, Activity, AccountManagerCallback, Handler)}
      *     instead
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     @Deprecated
     public AccountManagerFuture<Boolean> removeAccount(final Account account,
             AccountManagerCallback<Boolean> callback, Handler handler) {
@@ -837,6 +855,7 @@
      *      adding accounts (of this type) has been disabled by policy
      * </ul>
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     public AccountManagerFuture<Bundle> removeAccount(final Account account,
             final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler) {
         if (account == null) throw new IllegalArgumentException("account is null");
@@ -909,6 +928,7 @@
      *         account did not exist, the account is null, or another error
      *         occurs.
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public boolean removeAccountExplicitly(Account account) {
         if (account == null) throw new IllegalArgumentException("account is null");
         try {
@@ -935,6 +955,7 @@
      * @param accountType The account type of the auth token to invalidate, must not be null
      * @param authToken The auth token to invalidate, may be null
      */
+    @RequiresPermission(anyOf = {MANAGE_ACCOUNTS, USE_CREDENTIALS})
     public void invalidateAuthToken(final String accountType, final String authToken) {
         if (accountType == null) throw new IllegalArgumentException("accountType is null");
         try {
@@ -964,6 +985,7 @@
      * @return The cached auth token for this account and type, or null if
      *     no auth token is cached or the account does not exist.
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public String peekAuthToken(final Account account, final String authTokenType) {
         if (account == null) throw new IllegalArgumentException("account is null");
         if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null");
@@ -990,6 +1012,7 @@
      * @param account The account to set a password for
      * @param password The password to set, null to clear the password
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public void setPassword(final Account account, final String password) {
         if (account == null) throw new IllegalArgumentException("account is null");
         try {
@@ -1014,6 +1037,7 @@
      *
      * @param account The account whose password to clear
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     public void clearPassword(final Account account) {
         if (account == null) throw new IllegalArgumentException("account is null");
         try {
@@ -1039,6 +1063,7 @@
      * @param key The userdata key to set.  Must not be null
      * @param value The value to set, null to clear this userdata key
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public void setUserData(final Account account, final String key, final String value) {
         if (account == null) throw new IllegalArgumentException("account is null");
         if (key == null) throw new IllegalArgumentException("key is null");
@@ -1066,6 +1091,7 @@
      * @param authTokenType The type of the auth token, see {#getAuthToken}
      * @param authToken The auth token to add to the cache
      */
+    @RequiresPermission(AUTHENTICATE_ACCOUNTS)
     public void setAuthToken(Account account, final String authTokenType, final String authToken) {
         if (account == null) throw new IllegalArgumentException("account is null");
         if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null");
@@ -1100,6 +1126,7 @@
      * @throws java.io.IOException if the authenticator experienced an I/O problem
      *     creating a new auth token, usually because of network trouble
      */
+    @RequiresPermission(USE_CREDENTIALS)
     public String blockingGetAuthToken(Account account, String authTokenType,
             boolean notifyAuthFailure)
             throws OperationCanceledException, IOException, AuthenticatorException {
@@ -1174,6 +1201,7 @@
      * authenticator-dependent.  The caller should verify the validity of the
      * account before requesting an auth token.
      */
+    @RequiresPermission(USE_CREDENTIALS)
     public AccountManagerFuture<Bundle> getAuthToken(
             final Account account, final String authTokenType, final Bundle options,
             final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler) {
@@ -1264,6 +1292,7 @@
      * boolean, AccountManagerCallback, android.os.Handler)} instead
      */
     @Deprecated
+    @RequiresPermission(USE_CREDENTIALS)
     public AccountManagerFuture<Bundle> getAuthToken(
             final Account account, final String authTokenType,
             final boolean notifyAuthFailure,
@@ -1342,6 +1371,7 @@
      * authenticator-dependent.  The caller should verify the validity of the
      * account before requesting an auth token.
      */
+    @RequiresPermission(USE_CREDENTIALS)
     public AccountManagerFuture<Bundle> getAuthToken(
             final Account account, final String authTokenType, final Bundle options,
             final boolean notifyAuthFailure,
@@ -1411,6 +1441,7 @@
      *      creating a new account, usually because of network trouble
      * </ul>
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     public AccountManagerFuture<Bundle> addAccount(final String accountType,
             final String authTokenType, final String[] requiredFeatures,
             final Bundle addAccountOptions,
@@ -1598,6 +1629,7 @@
      *      verifying the password, usually because of network trouble
      * </ul>
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     public AccountManagerFuture<Bundle> confirmCredentials(final Account account,
             final Bundle options,
             final Activity activity,
@@ -1674,6 +1706,7 @@
      *      verifying the password, usually because of network trouble
      * </ul>
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     public AccountManagerFuture<Bundle> updateCredentials(final Account account,
             final String authTokenType,
             final Bundle options, final Activity activity,
@@ -1725,6 +1758,7 @@
      *      updating settings, usually because of network trouble
      * </ul>
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     public AccountManagerFuture<Bundle> editProperties(final String accountType,
             final Activity activity, final AccountManagerCallback<Bundle> callback,
             final Handler handler) {
@@ -2258,6 +2292,7 @@
      *      updating settings, usually because of network trouble
      * </ul>
      */
+    @RequiresPermission(MANAGE_ACCOUNTS)
     public AccountManagerFuture<Bundle> getAuthTokenByFeatures(
             final String accountType, final String authTokenType, final String[] features,
             final Activity activity, final Bundle addAccountOptions,
@@ -2382,6 +2417,7 @@
      * @throws IllegalArgumentException if listener is null
      * @throws IllegalStateException if listener was already added
      */
+    @RequiresPermission(GET_ACCOUNTS)
     public void addOnAccountsUpdatedListener(final OnAccountsUpdateListener listener,
             Handler handler, boolean updateImmediately) {
         if (listener == null) {
diff --git a/core/java/android/animation/AnimatorInflater.java b/core/java/android/animation/AnimatorInflater.java
index 427ecce..435d5ab 100644
--- a/core/java/android/animation/AnimatorInflater.java
+++ b/core/java/android/animation/AnimatorInflater.java
@@ -108,7 +108,7 @@
             float pathErrorScale) throws NotFoundException {
         final ConfigurationBoundResourceCache<Animator> animatorCache = resources
                 .getAnimatorCache();
-        Animator animator = animatorCache.get(id, theme);
+        Animator animator = animatorCache.getInstance(id, theme);
         if (animator != null) {
             if (DBG_ANIMATOR_INFLATER) {
                 Log.d(TAG, "loaded animator from cache, " + resources.getResourceName(id));
@@ -157,7 +157,7 @@
         final ConfigurationBoundResourceCache<StateListAnimator> cache = resources
                 .getStateListAnimatorCache();
         final Theme theme = context.getTheme();
-        StateListAnimator animator = cache.get(id, theme);
+        StateListAnimator animator = cache.getInstance(id, theme);
         if (animator != null) {
             return animator;
         }
diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java
index 5790682..cdd72be 100644
--- a/core/java/android/animation/LayoutTransition.java
+++ b/core/java/android/animation/LayoutTransition.java
@@ -28,6 +28,7 @@
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * This class enables automatic animations on layout changes in ViewGroup objects. To enable
@@ -757,7 +758,7 @@
         // reset the inter-animation delay, in case we use it later
         staggerDelay = 0;
 
-        final ViewTreeObserver observer = parent.getViewTreeObserver(); // used for later cleanup
+        final ViewTreeObserver observer = parent.getViewTreeObserver();
         if (!observer.isAlive()) {
             // If the observer's not in a good state, skip the transition
             return;
@@ -790,21 +791,9 @@
         // This is the cleanup step. When we get this rendering event, we know that all of
         // the appropriate animations have been set up and run. Now we can clear out the
         // layout listeners.
-        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
-            public boolean onPreDraw() {
-                parent.getViewTreeObserver().removeOnPreDrawListener(this);
-                int count = layoutChangeListenerMap.size();
-                if (count > 0) {
-                    Collection<View> views = layoutChangeListenerMap.keySet();
-                    for (View view : views) {
-                        View.OnLayoutChangeListener listener = layoutChangeListenerMap.get(view);
-                        view.removeOnLayoutChangeListener(listener);
-                    }
-                }
-                layoutChangeListenerMap.clear();
-                return true;
-            }
-        });
+        CleanupCallback callback = new CleanupCallback(layoutChangeListenerMap, parent);
+        observer.addOnPreDrawListener(callback);
+        parent.addOnAttachStateChangeListener(callback);
     }
 
     /**
@@ -1499,4 +1488,50 @@
                 View view, int transitionType);
     }
 
+    /**
+     * Utility class to clean up listeners after animations are setup. Cleanup happens
+     * when either the OnPreDrawListener method is called or when the parent is detached,
+     * whichever comes first.
+     */
+    private static final class CleanupCallback implements ViewTreeObserver.OnPreDrawListener,
+            View.OnAttachStateChangeListener {
+
+        final Map<View, View.OnLayoutChangeListener> layoutChangeListenerMap;
+        final ViewGroup parent;
+
+        CleanupCallback(Map<View, View.OnLayoutChangeListener> listenerMap, ViewGroup parent) {
+            this.layoutChangeListenerMap = listenerMap;
+            this.parent = parent;
+        }
+
+        private void cleanup() {
+            parent.getViewTreeObserver().removeOnPreDrawListener(this);
+            parent.removeOnAttachStateChangeListener(this);
+            int count = layoutChangeListenerMap.size();
+            if (count > 0) {
+                Collection<View> views = layoutChangeListenerMap.keySet();
+                for (View view : views) {
+                    View.OnLayoutChangeListener listener = layoutChangeListenerMap.get(view);
+                    view.removeOnLayoutChangeListener(listener);
+                }
+                layoutChangeListenerMap.clear();
+            }
+        }
+
+        @Override
+        public void onViewAttachedToWindow(View v) {
+        }
+
+        @Override
+        public void onViewDetachedFromWindow(View v) {
+            cleanup();
+        }
+
+        @Override
+        public boolean onPreDraw() {
+            cleanup();
+            return true;
+        }
+    };
+
 }
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index 94e3b66..4d34349 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -33,6 +33,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.Window;
 import android.widget.SpinnerAdapter;
 import java.lang.annotation.Retention;
@@ -1373,5 +1374,13 @@
          * version of the SDK an app can end up statically linking to the new MarginLayoutParams
          * overload, causing a crash when running on older platform versions with no other changes.
          */
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+
+            encoder.addProperty("gravity", gravity);
+        }
     }
 }
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 69cba78..49f5099 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -21,6 +21,7 @@
 import android.annotation.IdRes;
 import android.annotation.IntDef;
 import android.annotation.LayoutRes;
+import android.annotation.MainThread;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.StyleRes;
@@ -88,7 +89,7 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.MotionEvent;
-import android.view.PhoneWindow;
+import com.android.internal.policy.PhoneWindow;
 import android.view.SearchEvent;
 import android.view.View;
 import android.view.View.OnCreateContextMenuListener;
@@ -108,6 +109,7 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * An activity is a single, focused thing that the user can do.  Almost all
@@ -706,8 +708,6 @@
     /*package*/ ActivityThread mMainThread;
     Activity mParent;
     boolean mCalled;
-    boolean mCheckedForLoaderManager;
-    boolean mLoadersStarted;
     /*package*/ boolean mResumed;
     private boolean mStopped;
     boolean mFinished;
@@ -726,8 +726,8 @@
     static final class NonConfigurationInstances {
         Object activity;
         HashMap<String, Object> children;
-        ArrayList<Fragment> fragments;
-        ArrayMap<String, LoaderManagerImpl> loaders;
+        List<Fragment> fragments;
+        ArrayMap<String, LoaderManager> loaders;
         VoiceInteractor voiceInteractor;
     }
     /* package */ NonConfigurationInstances mLastNonConfigurationInstances;
@@ -747,26 +747,13 @@
     private CharSequence mTitle;
     private int mTitleColor = 0;
 
-    final FragmentManagerImpl mFragments = new FragmentManagerImpl();
-    final FragmentContainer mContainer = new FragmentContainer() {
-        @Override
-        @Nullable
-        public View findViewById(int id) {
-            return Activity.this.findViewById(id);
-        }
-        @Override
-        public boolean hasView() {
-            Window window = Activity.this.getWindow();
-            return (window != null && window.peekDecorView() != null);
-        }
-    };
+    // we must have a handler before the FragmentController is constructed
+    final Handler mHandler = new Handler();
+    final FragmentController mFragments = FragmentController.createController(new HostCallbacks());
 
     // Most recent call to requestVisibleBehind().
     boolean mVisibleBehind;
 
-    ArrayMap<String, LoaderManagerImpl> mAllLoaderManagers;
-    LoaderManagerImpl mLoaderManager;
-
     private static final class ManagedCursor {
         ManagedCursor(Cursor cursor) {
             mCursor = cursor;
@@ -802,7 +789,6 @@
     private final Object mInstanceTracker = StrictMode.trackActivity(this);
 
     private Thread mUiThread;
-    final Handler mHandler = new Handler();
 
     ActivityTransitionState mActivityTransitionState = new ActivityTransitionState();
     SharedElementCallback mEnterTransitionListener = SharedElementCallback.NULL_CALLBACK;
@@ -863,28 +849,7 @@
      * Return the LoaderManager for this activity, creating it if needed.
      */
     public LoaderManager getLoaderManager() {
-        if (mLoaderManager != null) {
-            return mLoaderManager;
-        }
-        mCheckedForLoaderManager = true;
-        mLoaderManager = getLoaderManager("(root)", mLoadersStarted, true);
-        return mLoaderManager;
-    }
-
-    LoaderManagerImpl getLoaderManager(String who, boolean started, boolean create) {
-        if (mAllLoaderManagers == null) {
-            mAllLoaderManagers = new ArrayMap<String, LoaderManagerImpl>();
-        }
-        LoaderManagerImpl lm = mAllLoaderManagers.get(who);
-        if (lm == null) {
-            if (create) {
-                lm = new LoaderManagerImpl(who, this, started);
-                mAllLoaderManagers.put(who, lm);
-            }
-        } else {
-            lm.updateActivity(this);
-        }
-        return lm;
+        return mFragments.getLoaderManager();
     }
 
     /**
@@ -927,11 +892,12 @@
      * @see #onRestoreInstanceState
      * @see #onPostCreate
      */
+    @MainThread
     @CallSuper
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState);
         if (mLastNonConfigurationInstances != null) {
-            mAllLoaderManagers = mLastNonConfigurationInstances.loaders;
+            mFragments.restoreLoaderNonConfig(mLastNonConfigurationInstances.loaders);
         }
         if (mActivityInfo.parentActivityName != null) {
             if (mActionBar == null) {
@@ -1172,15 +1138,7 @@
         if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStart " + this);
         mCalled = true;
 
-        if (!mLoadersStarted) {
-            mLoadersStarted = true;
-            if (mLoaderManager != null) {
-                mLoaderManager.doStart();
-            } else if (!mCheckedForLoaderManager) {
-                mLoaderManager = getLoaderManager("(root)", mLoadersStarted, false);
-            }
-            mCheckedForLoaderManager = true;
-        }
+        mFragments.doLoaderStart();
 
         getApplication().dispatchActivityStarted(this);
     }
@@ -1873,27 +1831,9 @@
     NonConfigurationInstances retainNonConfigurationInstances() {
         Object activity = onRetainNonConfigurationInstance();
         HashMap<String, Object> children = onRetainNonConfigurationChildInstances();
-        ArrayList<Fragment> fragments = mFragments.retainNonConfig();
-        boolean retainLoaders = false;
-        if (mAllLoaderManagers != null) {
-            // prune out any loader managers that were already stopped and so
-            // have nothing useful to retain.
-            final int N = mAllLoaderManagers.size();
-            LoaderManagerImpl loaders[] = new LoaderManagerImpl[N];
-            for (int i=N-1; i>=0; i--) {
-                loaders[i] = mAllLoaderManagers.valueAt(i);
-            }
-            for (int i=0; i<N; i++) {
-                LoaderManagerImpl lm = loaders[i];
-                if (lm.mRetaining) {
-                    retainLoaders = true;
-                } else {
-                    lm.doDestroy();
-                    mAllLoaderManagers.remove(lm.mWho);
-                }
-            }
-        }
-        if (activity == null && children == null && fragments == null && !retainLoaders
+        List<Fragment> fragments = mFragments.retainNonConfig();
+        ArrayMap<String, LoaderManager> loaders = mFragments.retainLoaderNonConfig();
+        if (activity == null && children == null && fragments == null && loaders == null
                 && mVoiceInteractor == null) {
             return null;
         }
@@ -1902,7 +1842,7 @@
         nci.activity = activity;
         nci.children = children;
         nci.fragments = fragments;
-        nci.loaders = mAllLoaderManagers;
+        nci.loaders = loaders;
         nci.voiceInteractor = mVoiceInteractor;
         return nci;
     }
@@ -1924,18 +1864,7 @@
      * with this activity.
      */
     public FragmentManager getFragmentManager() {
-        return mFragments;
-    }
-
-    void invalidateFragment(String who) {
-        //Log.v(TAG, "invalidateFragmentIndex: index=" + index);
-        if (mAllLoaderManagers != null) {
-            LoaderManagerImpl lm = mAllLoaderManagers.get(who);
-            if (lm != null && !lm.mRetaining) {
-                lm.doDestroy();
-                mAllLoaderManagers.remove(who);
-            }
-        }
+        return mFragments.getFragmentManager();
     }
 
     /**
@@ -2518,7 +2447,7 @@
             return;
         }
 
-        if (!mFragments.popBackStackImmediate()) {
+        if (!mFragments.getFragmentManager().popBackStackImmediate()) {
             finishAfterTransition();
         }
     }
@@ -3912,10 +3841,7 @@
                 mStartedActivity = true;
             }
 
-            final View decor = mWindow != null ? mWindow.peekDecorView() : null;
-            if (decor != null) {
-                decor.cancelPendingInputEvents();
-            }
+            cancelInputsAndStartExitTransition(options);
             // TODO Consider clearing/flushing other event sources and events for child windows.
         } else {
             if (options != null) {
@@ -3926,6 +3852,18 @@
                 mParent.startActivityFromChild(this, intent, requestCode);
             }
         }
+    }
+
+    /**
+     * Cancels pending inputs and if an Activity Transition is to be run, starts the transition.
+     *
+     * @param options The ActivityOptions bundle used to start an Activity.
+     */
+    private void cancelInputsAndStartExitTransition(Bundle options) {
+        final View decor = mWindow != null ? mWindow.peekDecorView() : null;
+        if (decor != null) {
+            decor.cancelPendingInputEvents();
+        }
         if (options != null && !isTopOfTask()) {
             mActivityTransitionState.startExitOutTransition(this, options);
         }
@@ -3943,9 +3881,6 @@
      */
     public void startActivityForResultAsUser(Intent intent, int requestCode,
             @Nullable Bundle options, UserHandle user) {
-        if (options != null) {
-            mActivityTransitionState.startExitOutTransition(this, options);
-        }
         if (mParent != null) {
             throw new RuntimeException("Can't be called from a child");
         }
@@ -3967,10 +3902,7 @@
             mStartedActivity = true;
         }
 
-        final View decor = mWindow != null ? mWindow.peekDecorView() : null;
-        if (decor != null) {
-            decor.cancelPendingInputEvents();
-        }
+        cancelInputsAndStartExitTransition(options);
     }
 
     /**
@@ -3996,6 +3928,7 @@
                 mToken, mEmbeddedID, -1, ar.getResultCode(),
                 ar.getResultData());
         }
+        cancelInputsAndStartExitTransition(options);
     }
 
     /**
@@ -4019,6 +3952,7 @@
                 mToken, mEmbeddedID, -1, ar.getResultCode(),
                 ar.getResultData());
         }
+        cancelInputsAndStartExitTransition(options);
     }
 
     /**
@@ -4451,6 +4385,7 @@
                 mToken, child.mEmbeddedID, requestCode,
                 ar.getResultCode(), ar.getResultData());
         }
+        cancelInputsAndStartExitTransition(options);
     }
 
     /**
@@ -4502,9 +4437,6 @@
     @Override
     public void startActivityForResult(
             String who, Intent intent, int requestCode, @Nullable Bundle options) {
-        if (options != null) {
-            mActivityTransitionState.startExitOutTransition(this, options);
-        }
         Instrumentation.ActivityResult ar =
             mInstrumentation.execStartActivity(
                 this, mMainThread.getApplicationThread(), mToken, who,
@@ -4514,6 +4446,7 @@
                 mToken, who, requestCode,
                 ar.getResultCode(), ar.getResultData());
         }
+        cancelInputsAndStartExitTransition(options);
     }
 
     /**
@@ -5518,21 +5451,13 @@
                 writer.print(mResumed); writer.print(" mStopped=");
                 writer.print(mStopped); writer.print(" mFinished=");
                 writer.println(mFinished);
-        writer.print(innerPrefix); writer.print("mLoadersStarted=");
-                writer.println(mLoadersStarted);
         writer.print(innerPrefix); writer.print("mChangingConfigurations=");
                 writer.println(mChangingConfigurations);
         writer.print(innerPrefix); writer.print("mCurrentConfig=");
                 writer.println(mCurrentConfig);
 
-        if (mLoaderManager != null) {
-            writer.print(prefix); writer.print("Loader Manager ");
-                    writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager)));
-                    writer.println(":");
-            mLoaderManager.dump(prefix + "  ", fd, writer, args);
-        }
-
-        mFragments.dump(prefix, fd, writer, args);
+        mFragments.dumpLoaders(innerPrefix, fd, writer, args);
+        mFragments.getFragmentManager().dump(innerPrefix, fd, writer, args);
 
         if (getWindow() != null &&
                 getWindow().peekDecorView() != null &&
@@ -6128,7 +6053,7 @@
             Configuration config, String referrer, IVoiceInteractor voiceInteractor) {
         attachBaseContext(context);
 
-        mFragments.attachActivity(this, mContainer, null);
+        mFragments.attachHost(null /*parent*/);
 
         mWindow = new PhoneWindow(this);
         mWindow.setCallback(this);
@@ -6211,18 +6136,7 @@
                 " did not call through to super.onStart()");
         }
         mFragments.dispatchStart();
-        if (mAllLoaderManagers != null) {
-            final int N = mAllLoaderManagers.size();
-            LoaderManagerImpl loaders[] = new LoaderManagerImpl[N];
-            for (int i=N-1; i>=0; i--) {
-                loaders[i] = mAllLoaderManagers.valueAt(i);
-            }
-            for (int i=0; i<N; i++) {
-                LoaderManagerImpl lm = loaders[i];
-                lm.finishRetain();
-                lm.doReportStart();
-            }
-        }
+        mFragments.reportLoaderStart();
         mActivityTransitionState.enterReady(this);
     }
 
@@ -6328,16 +6242,7 @@
 
     final void performStop() {
         mDoReportFullyDrawn = false;
-        if (mLoadersStarted) {
-            mLoadersStarted = false;
-            if (mLoaderManager != null) {
-                if (!mChangingConfigurations) {
-                    mLoaderManager.doStop();
-                } else {
-                    mLoaderManager.doRetain();
-                }
-            }
-        }
+        mFragments.doLoaderStop(mChangingConfigurations /*retain*/);
 
         if (!mStopped) {
             if (mWindow != null) {
@@ -6379,9 +6284,7 @@
         mWindow.destroy();
         mFragments.dispatchDestroy();
         onDestroy();
-        if (mLoaderManager != null) {
-            mLoaderManager.doDestroy();
-        }
+        mFragments.doLoaderDestroy();
         if (mVoiceInteractor != null) {
             mVoiceInteractor.detachActivity();
         }
@@ -6541,4 +6444,79 @@
         return intent != null
                 && PackageManager.ACTION_REQUEST_PERMISSIONS.equals(intent.getAction());
     }
+
+    class HostCallbacks extends FragmentHostCallback<Activity> {
+        public HostCallbacks() {
+            super(Activity.this /*activity*/);
+        }
+
+        @Override
+        public void onDump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+            Activity.this.dump(prefix, fd, writer, args);
+        }
+
+        @Override
+        public boolean onShouldSaveFragmentState(Fragment fragment) {
+            return !isFinishing();
+        }
+
+        @Override
+        public LayoutInflater onGetLayoutInflater() {
+            final LayoutInflater result = Activity.this.getLayoutInflater();
+            if (onUseFragmentManagerInflaterFactory()) {
+                return result.cloneInContext(Activity.this);
+            }
+            return result;
+        }
+
+        @Override
+        public boolean onUseFragmentManagerInflaterFactory() {
+            // Newer platform versions use the child fragment manager's LayoutInflaterFactory.
+            return getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP;
+        }
+
+        @Override
+        public Activity onGetHost() {
+            return Activity.this;
+        }
+
+        @Override
+        public void onInvalidateOptionsMenu() {
+            Activity.this.invalidateOptionsMenu();
+        }
+
+        @Override
+        public void onStartActivityFromFragment(Fragment fragment, Intent intent, int requestCode,
+                Bundle options) {
+            Activity.this.startActivityFromFragment(fragment, intent, requestCode, options);
+        }
+
+        @Override
+        public boolean onHasWindowAnimations() {
+            return getWindow() != null;
+        }
+
+        @Override
+        public int onGetWindowAnimations() {
+            final Window w = getWindow();
+            return (w == null) ? 0 : w.getAttributes().windowAnimations;
+        }
+
+        @Override
+        public void onAttachFragment(Fragment fragment) {
+            Activity.this.onAttachFragment(fragment);
+        }
+
+        @Nullable
+        @Override
+        public View onFindViewById(int id) {
+            return Activity.this.findViewById(id);
+        }
+
+        @Override
+        public boolean onHasView() {
+            final Window w = getWindow();
+            return (w != null && w.peekDecorView() != null);
+        }
+    }
 }
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 576a046..9bbb4be 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -16,8 +16,10 @@
 
 package android.app;
 
+import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.graphics.Canvas;
 import android.graphics.Matrix;
@@ -26,6 +28,7 @@
 import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
 
+import android.util.Log;
 import com.android.internal.app.ProcessStats;
 import com.android.internal.os.TransferPipe;
 import com.android.internal.util.FastPrintWriter;
@@ -2396,7 +2399,24 @@
         } catch (RemoteException e) {
         }
     }
-    
+
+    /**
+     * Kills the specified UID.
+     * @param uid The UID to kill.
+     * @param reason The reason for the kill.
+     *
+     * @hide
+     */
+    @SystemApi
+    @RequiresPermission(Manifest.permission.KILL_UID)
+    public void killUid(int uid, String reason) {
+        try {
+            ActivityManagerNative.getDefault().killUid(uid, reason);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Couldn't kill uid:" + uid, e);
+        }
+    }
+
     /**
      * Have the system perform a force stop of everything associated with
      * the given application package.  All processes that share its uid
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index bde8f39..40eb799 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -17,6 +17,7 @@
 package android.app;
 
 import android.annotation.NonNull;
+import android.content.ComponentName;
 
 /**
  * Activity manager local system service interface.
@@ -48,4 +49,10 @@
          */
         public abstract void release();
     }
+
+    /**
+     * Returns home activity for the specified user.
+     * @param userId ID of the user or {@link android.os.UserHandle#USER_ALL}
+     */
+    public abstract ComponentName getHomeActivityForUser(int userId);
 }
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 9bad9bb..f506d59 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -38,6 +38,7 @@
 import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDebug;
 import android.database.sqlite.SQLiteDebug.DbStats;
@@ -114,7 +115,6 @@
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
 import java.net.InetAddress;
-import java.security.Security;
 import java.text.DateFormat;
 import java.util.ArrayList;
 import java.util.List;
@@ -571,8 +571,6 @@
     private native void dumpGraphicsInfo(FileDescriptor fd);
 
     private class ApplicationThread extends ApplicationThreadNative {
-        private static final String ONE_COUNT_COLUMN = "%21s %8d";
-        private static final String TWO_COUNT_COLUMNS = "%21s %8d %21s %8d";
         private static final String DB_INFO_FORMAT = "  %8s %8s %14s %14s  %s";
 
         private int mLastProcessState = -1;
@@ -972,18 +970,18 @@
 
         @Override
         public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin,
-                boolean dumpFullInfo, boolean dumpDalvik, String[] args) {
+                boolean dumpFullInfo, boolean dumpDalvik, boolean dumpSummaryOnly, String[] args) {
             FileOutputStream fout = new FileOutputStream(fd);
             PrintWriter pw = new FastPrintWriter(fout);
             try {
-                dumpMemInfo(pw, mem, checkin, dumpFullInfo, dumpDalvik);
+                dumpMemInfo(pw, mem, checkin, dumpFullInfo, dumpDalvik, dumpSummaryOnly);
             } finally {
                 pw.flush();
             }
         }
 
         private void dumpMemInfo(PrintWriter pw, Debug.MemoryInfo memInfo, boolean checkin,
-                boolean dumpFullInfo, boolean dumpDalvik) {
+                boolean dumpFullInfo, boolean dumpDalvik, boolean dumpSummaryOnly) {
             long nativeMax = Debug.getNativeHeapSize() / 1024;
             long nativeAllocated = Debug.getNativeHeapAllocatedSize() / 1024;
             long nativeFree = Debug.getNativeHeapFreeSize() / 1024;
@@ -1007,7 +1005,8 @@
             long openSslSocketCount = Debug.countInstancesOfClass(OpenSSLSocketImpl.class);
             SQLiteDebug.PagerStats stats = SQLiteDebug.getDatabaseInfo();
 
-            dumpMemInfoTable(pw, memInfo, checkin, dumpFullInfo, dumpDalvik, Process.myPid(),
+            dumpMemInfoTable(pw, memInfo, checkin, dumpFullInfo, dumpDalvik, dumpSummaryOnly,
+                    Process.myPid(),
                     (mBoundApplication != null) ? mBoundApplication.processName : "unknown",
                     nativeMax, nativeAllocated, nativeFree,
                     dalvikMax, dalvikAllocated, dalvikFree);
@@ -1639,6 +1638,12 @@
         return sCurrentActivityThread;
     }
 
+    public static String currentOpPackageName() {
+        ActivityThread am = currentActivityThread();
+        return (am != null && am.getApplication() != null)
+                ? am.getApplication().getOpPackageName() : null;
+    }
+
     public static String currentPackageName() {
         ActivityThread am = currentActivityThread();
         return (am != null && am.mBoundApplication != null)
@@ -1929,6 +1934,9 @@
             = "%13s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s";
     private static final String HEAP_COLUMN
             = "%13s %8s %8s %8s %8s %8s %8s %8s";
+    private static final String ONE_COUNT_COLUMN = "%21s %8d";
+    private static final String TWO_COUNT_COLUMNS = "%21s %8d %21s %8d";
+    private static final String ONE_COUNT_COLUMN_HEADER = "%21s %8s";
 
     // Formatting for checkin service - update version if row format changes
     private static final int ACTIVITY_THREAD_CHECKIN_VERSION = 3;
@@ -1938,7 +1946,8 @@
     }
 
     public static void dumpMemInfoTable(PrintWriter pw, Debug.MemoryInfo memInfo, boolean checkin,
-            boolean dumpFullInfo, boolean dumpDalvik, int pid, String processName,
+            boolean dumpFullInfo, boolean dumpDalvik, boolean dumpSummaryOnly,
+            int pid, String processName,
             long nativeMax, long nativeAllocated, long nativeFree,
             long dalvikMax, long dalvikAllocated, long dalvikFree) {
 
@@ -2019,106 +2028,50 @@
             return;
         }
 
-        // otherwise, show human-readable format
-        if (dumpFullInfo) {
-            printRow(pw, HEAP_FULL_COLUMN, "", "Pss", "Pss", "Shared", "Private",
-                    "Shared", "Private", "Swapped", "Heap", "Heap", "Heap");
-            printRow(pw, HEAP_FULL_COLUMN, "", "Total", "Clean", "Dirty", "Dirty",
-                    "Clean", "Clean", "Dirty", "Size", "Alloc", "Free");
-            printRow(pw, HEAP_FULL_COLUMN, "", "------", "------", "------", "------",
-                    "------", "------", "------", "------", "------", "------");
-            printRow(pw, HEAP_FULL_COLUMN, "Native Heap", memInfo.nativePss,
-                    memInfo.nativeSwappablePss, memInfo.nativeSharedDirty,
-                    memInfo.nativePrivateDirty, memInfo.nativeSharedClean,
-                    memInfo.nativePrivateClean, memInfo.nativeSwappedOut,
-                    nativeMax, nativeAllocated, nativeFree);
-            printRow(pw, HEAP_FULL_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
-                    memInfo.dalvikSwappablePss, memInfo.dalvikSharedDirty,
-                    memInfo.dalvikPrivateDirty, memInfo.dalvikSharedClean,
-                    memInfo.dalvikPrivateClean, memInfo.dalvikSwappedOut,
-                    dalvikMax, dalvikAllocated, dalvikFree);
-        } else {
-            printRow(pw, HEAP_COLUMN, "", "Pss", "Private",
-                    "Private", "Swapped", "Heap", "Heap", "Heap");
-            printRow(pw, HEAP_COLUMN, "", "Total", "Dirty",
-                    "Clean", "Dirty", "Size", "Alloc", "Free");
-            printRow(pw, HEAP_COLUMN, "", "------", "------", "------",
-                    "------", "------", "------", "------", "------");
-            printRow(pw, HEAP_COLUMN, "Native Heap", memInfo.nativePss,
-                    memInfo.nativePrivateDirty,
-                    memInfo.nativePrivateClean, memInfo.nativeSwappedOut,
-                    nativeMax, nativeAllocated, nativeFree);
-            printRow(pw, HEAP_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
-                    memInfo.dalvikPrivateDirty,
-                    memInfo.dalvikPrivateClean, memInfo.dalvikSwappedOut,
-                    dalvikMax, dalvikAllocated, dalvikFree);
-        }
-
-        int otherPss = memInfo.otherPss;
-        int otherSwappablePss = memInfo.otherSwappablePss;
-        int otherSharedDirty = memInfo.otherSharedDirty;
-        int otherPrivateDirty = memInfo.otherPrivateDirty;
-        int otherSharedClean = memInfo.otherSharedClean;
-        int otherPrivateClean = memInfo.otherPrivateClean;
-        int otherSwappedOut = memInfo.otherSwappedOut;
-
-        for (int i=0; i<Debug.MemoryInfo.NUM_OTHER_STATS; i++) {
-            final int myPss = memInfo.getOtherPss(i);
-            final int mySwappablePss = memInfo.getOtherSwappablePss(i);
-            final int mySharedDirty = memInfo.getOtherSharedDirty(i);
-            final int myPrivateDirty = memInfo.getOtherPrivateDirty(i);
-            final int mySharedClean = memInfo.getOtherSharedClean(i);
-            final int myPrivateClean = memInfo.getOtherPrivateClean(i);
-            final int mySwappedOut = memInfo.getOtherSwappedOut(i);
-            if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
-                    || mySharedClean != 0 || myPrivateClean != 0 || mySwappedOut != 0) {
-                if (dumpFullInfo) {
-                    printRow(pw, HEAP_FULL_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
-                            myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
-                            mySharedClean, myPrivateClean, mySwappedOut, "", "", "");
-                } else {
-                    printRow(pw, HEAP_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
-                            myPss, myPrivateDirty,
-                            myPrivateClean, mySwappedOut, "", "", "");
-                }
-                otherPss -= myPss;
-                otherSwappablePss -= mySwappablePss;
-                otherSharedDirty -= mySharedDirty;
-                otherPrivateDirty -= myPrivateDirty;
-                otherSharedClean -= mySharedClean;
-                otherPrivateClean -= myPrivateClean;
-                otherSwappedOut -= mySwappedOut;
+        if (!dumpSummaryOnly) {
+            if (dumpFullInfo) {
+                printRow(pw, HEAP_FULL_COLUMN, "", "Pss", "Pss", "Shared", "Private",
+                        "Shared", "Private", "Swapped", "Heap", "Heap", "Heap");
+                printRow(pw, HEAP_FULL_COLUMN, "", "Total", "Clean", "Dirty", "Dirty",
+                        "Clean", "Clean", "Dirty", "Size", "Alloc", "Free");
+                printRow(pw, HEAP_FULL_COLUMN, "", "------", "------", "------", "------",
+                        "------", "------", "------", "------", "------", "------");
+                printRow(pw, HEAP_FULL_COLUMN, "Native Heap", memInfo.nativePss,
+                        memInfo.nativeSwappablePss, memInfo.nativeSharedDirty,
+                        memInfo.nativePrivateDirty, memInfo.nativeSharedClean,
+                        memInfo.nativePrivateClean, memInfo.nativeSwappedOut,
+                        nativeMax, nativeAllocated, nativeFree);
+                printRow(pw, HEAP_FULL_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
+                        memInfo.dalvikSwappablePss, memInfo.dalvikSharedDirty,
+                        memInfo.dalvikPrivateDirty, memInfo.dalvikSharedClean,
+                        memInfo.dalvikPrivateClean, memInfo.dalvikSwappedOut,
+                        dalvikMax, dalvikAllocated, dalvikFree);
+            } else {
+                printRow(pw, HEAP_COLUMN, "", "Pss", "Private",
+                        "Private", "Swapped", "Heap", "Heap", "Heap");
+                printRow(pw, HEAP_COLUMN, "", "Total", "Dirty",
+                        "Clean", "Dirty", "Size", "Alloc", "Free");
+                printRow(pw, HEAP_COLUMN, "", "------", "------", "------",
+                        "------", "------", "------", "------", "------");
+                printRow(pw, HEAP_COLUMN, "Native Heap", memInfo.nativePss,
+                        memInfo.nativePrivateDirty,
+                        memInfo.nativePrivateClean, memInfo.nativeSwappedOut,
+                        nativeMax, nativeAllocated, nativeFree);
+                printRow(pw, HEAP_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
+                        memInfo.dalvikPrivateDirty,
+                        memInfo.dalvikPrivateClean, memInfo.dalvikSwappedOut,
+                        dalvikMax, dalvikAllocated, dalvikFree);
             }
-        }
 
-        if (dumpFullInfo) {
-            printRow(pw, HEAP_FULL_COLUMN, "Unknown", otherPss, otherSwappablePss,
-                    otherSharedDirty, otherPrivateDirty, otherSharedClean, otherPrivateClean,
-                    otherSwappedOut, "", "", "");
-            printRow(pw, HEAP_FULL_COLUMN, "TOTAL", memInfo.getTotalPss(),
-                    memInfo.getTotalSwappablePss(),
-                    memInfo.getTotalSharedDirty(), memInfo.getTotalPrivateDirty(),
-                    memInfo.getTotalSharedClean(), memInfo.getTotalPrivateClean(),
-                    memInfo.getTotalSwappedOut(), nativeMax+dalvikMax,
-                    nativeAllocated+dalvikAllocated, nativeFree+dalvikFree);
-        } else {
-            printRow(pw, HEAP_COLUMN, "Unknown", otherPss,
-                    otherPrivateDirty, otherPrivateClean, otherSwappedOut,
-                    "", "", "");
-            printRow(pw, HEAP_COLUMN, "TOTAL", memInfo.getTotalPss(),
-                    memInfo.getTotalPrivateDirty(),
-                    memInfo.getTotalPrivateClean(),
-                    memInfo.getTotalSwappedOut(),
-                    nativeMax+dalvikMax,
-                    nativeAllocated+dalvikAllocated, nativeFree+dalvikFree);
-        }
+            int otherPss = memInfo.otherPss;
+            int otherSwappablePss = memInfo.otherSwappablePss;
+            int otherSharedDirty = memInfo.otherSharedDirty;
+            int otherPrivateDirty = memInfo.otherPrivateDirty;
+            int otherSharedClean = memInfo.otherSharedClean;
+            int otherPrivateClean = memInfo.otherPrivateClean;
+            int otherSwappedOut = memInfo.otherSwappedOut;
 
-        if (dumpDalvik) {
-            pw.println(" ");
-            pw.println(" Dalvik Details");
-
-            for (int i=Debug.MemoryInfo.NUM_OTHER_STATS;
-                 i<Debug.MemoryInfo.NUM_OTHER_STATS + Debug.MemoryInfo.NUM_DVK_STATS; i++) {
+            for (int i=0; i<Debug.MemoryInfo.NUM_OTHER_STATS; i++) {
                 final int myPss = memInfo.getOtherPss(i);
                 final int mySwappablePss = memInfo.getOtherSwappablePss(i);
                 final int mySharedDirty = memInfo.getOtherSharedDirty(i);
@@ -2127,7 +2080,7 @@
                 final int myPrivateClean = memInfo.getOtherPrivateClean(i);
                 final int mySwappedOut = memInfo.getOtherSwappedOut(i);
                 if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
-                        || mySharedClean != 0 || myPrivateClean != 0) {
+                        || mySharedClean != 0 || myPrivateClean != 0 || mySwappedOut != 0) {
                     if (dumpFullInfo) {
                         printRow(pw, HEAP_FULL_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
                                 myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
@@ -2137,9 +2090,89 @@
                                 myPss, myPrivateDirty,
                                 myPrivateClean, mySwappedOut, "", "", "");
                     }
+                    otherPss -= myPss;
+                    otherSwappablePss -= mySwappablePss;
+                    otherSharedDirty -= mySharedDirty;
+                    otherPrivateDirty -= myPrivateDirty;
+                    otherSharedClean -= mySharedClean;
+                    otherPrivateClean -= myPrivateClean;
+                    otherSwappedOut -= mySwappedOut;
+                }
+            }
+
+            if (dumpFullInfo) {
+                printRow(pw, HEAP_FULL_COLUMN, "Unknown", otherPss, otherSwappablePss,
+                        otherSharedDirty, otherPrivateDirty, otherSharedClean, otherPrivateClean,
+                        otherSwappedOut, "", "", "");
+                printRow(pw, HEAP_FULL_COLUMN, "TOTAL", memInfo.getTotalPss(),
+                        memInfo.getTotalSwappablePss(),
+                        memInfo.getTotalSharedDirty(), memInfo.getTotalPrivateDirty(),
+                        memInfo.getTotalSharedClean(), memInfo.getTotalPrivateClean(),
+                        memInfo.getTotalSwappedOut(), nativeMax+dalvikMax,
+                        nativeAllocated+dalvikAllocated, nativeFree+dalvikFree);
+            } else {
+                printRow(pw, HEAP_COLUMN, "Unknown", otherPss,
+                        otherPrivateDirty, otherPrivateClean, otherSwappedOut,
+                        "", "", "");
+                printRow(pw, HEAP_COLUMN, "TOTAL", memInfo.getTotalPss(),
+                        memInfo.getTotalPrivateDirty(),
+                        memInfo.getTotalPrivateClean(),
+                        memInfo.getTotalSwappedOut(),
+                        nativeMax+dalvikMax,
+                        nativeAllocated+dalvikAllocated, nativeFree+dalvikFree);
+            }
+
+            if (dumpDalvik) {
+                pw.println(" ");
+                pw.println(" Dalvik Details");
+
+                for (int i=Debug.MemoryInfo.NUM_OTHER_STATS;
+                     i<Debug.MemoryInfo.NUM_OTHER_STATS + Debug.MemoryInfo.NUM_DVK_STATS; i++) {
+                    final int myPss = memInfo.getOtherPss(i);
+                    final int mySwappablePss = memInfo.getOtherSwappablePss(i);
+                    final int mySharedDirty = memInfo.getOtherSharedDirty(i);
+                    final int myPrivateDirty = memInfo.getOtherPrivateDirty(i);
+                    final int mySharedClean = memInfo.getOtherSharedClean(i);
+                    final int myPrivateClean = memInfo.getOtherPrivateClean(i);
+                    final int mySwappedOut = memInfo.getOtherSwappedOut(i);
+                    if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
+                            || mySharedClean != 0 || myPrivateClean != 0) {
+                        if (dumpFullInfo) {
+                            printRow(pw, HEAP_FULL_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
+                                    myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
+                                    mySharedClean, myPrivateClean, mySwappedOut, "", "", "");
+                        } else {
+                            printRow(pw, HEAP_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
+                                    myPss, myPrivateDirty,
+                                    myPrivateClean, mySwappedOut, "", "", "");
+                        }
+                    }
                 }
             }
         }
+
+        pw.println(" ");
+        pw.println(" App Summary");
+        printRow(pw, ONE_COUNT_COLUMN_HEADER, "", "Pss(KB)");
+        printRow(pw, ONE_COUNT_COLUMN_HEADER, "", "------");
+        printRow(pw, ONE_COUNT_COLUMN,
+            "Java Heap:", memInfo.getSummaryJavaHeap());
+        printRow(pw, ONE_COUNT_COLUMN,
+            "Native Heap:", memInfo.getSummaryNativeHeap());
+        printRow(pw, ONE_COUNT_COLUMN,
+            "Code:", memInfo.getSummaryCode());
+        printRow(pw, ONE_COUNT_COLUMN,
+            "Stack:", memInfo.getSummaryStack());
+        printRow(pw, ONE_COUNT_COLUMN,
+            "Graphics:", memInfo.getSummaryGraphics());
+        printRow(pw, ONE_COUNT_COLUMN,
+            "Private Other:", memInfo.getSummaryPrivateOther());
+        printRow(pw, ONE_COUNT_COLUMN,
+            "System:", memInfo.getSummarySystem());
+        pw.println(" ");
+        printRow(pw, TWO_COUNT_COLUMNS,
+            "TOTAL:", memInfo.getSummaryTotalPss(),
+            "TOTAL SWAP (KB):", memInfo.getSummaryTotalSwap());
     }
 
     public void registerOnActivityPausedListener(Activity activity,
@@ -4181,9 +4214,14 @@
             if (!mConfiguration.isOtherSeqNewer(config) && compat == null) {
                 return;
             }
-            configDiff = mConfiguration.diff(config);
-            mConfiguration.updateFrom(config);
+
+            configDiff = mConfiguration.updateFrom(config);
             config = applyCompatConfiguration(mCurDefaultDisplayDpi);
+
+            final Theme systemTheme = getSystemContext().getTheme();
+            if ((systemTheme.getChangingConfigurations() & configDiff) != 0) {
+                systemTheme.rebase();
+            }
         }
 
         ArrayList<ComponentCallbacks2> callbacks = collectComponentCallbacks(false, config);
@@ -5338,7 +5376,7 @@
         // Set the reporter for event logging in libcore
         EventLogger.setReporter(new EventLoggingReporter());
 
-        Security.addProvider(new AndroidKeyStoreProvider());
+        AndroidKeyStoreProvider.install();
 
         // Make sure TrustedCertificateStore looks in the right place for CA certificates
         final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java
index 2939322..fa81412 100644
--- a/core/java/android/app/ActivityTransitionCoordinator.java
+++ b/core/java/android/app/ActivityTransitionCoordinator.java
@@ -31,6 +31,7 @@
 import android.view.ViewGroup;
 import android.view.ViewGroupOverlay;
 import android.view.ViewParent;
+import android.view.ViewRootImpl;
 import android.view.ViewTreeObserver;
 import android.view.Window;
 import android.widget.ImageView;
@@ -187,11 +188,6 @@
      */
     public static final int MSG_SHARED_ELEMENT_DESTINATION = 107;
 
-    /**
-     * Send the shared element positions.
-     */
-    public static final int MSG_SEND_SHARED_ELEMENT_DESTINATION = 108;
-
     private Window mWindow;
     final protected ArrayList<String> mAllSharedElementNames;
     final protected ArrayList<View> mSharedElements = new ArrayList<View>();
@@ -207,6 +203,8 @@
             new ArrayList<GhostViewListeners>();
     private ArrayMap<View, Float> mOriginalAlphas = new ArrayMap<View, Float>();
     private ArrayList<Matrix> mSharedElementParentMatrices;
+    private boolean mSharedElementTransitionComplete;
+    private boolean mViewsTransitionComplete;
 
     public ActivityTransitionCoordinator(Window window,
             ArrayList<String> allSharedElementNames,
@@ -219,6 +217,11 @@
     }
 
     protected void viewsReady(ArrayMap<String, View> sharedElements) {
+        final View decor = getDecor();
+        final ViewRootImpl viewRoot = decor == null ? null : decor.getViewRootImpl();
+        if (viewRoot != null) {
+            viewRoot.setPausedForTransition(true);
+        }
         sharedElements.retainAll(mAllSharedElementNames);
         if (mListener != null) {
             mListener.onMapSharedElements(mAllSharedElementNames, sharedElements);
@@ -476,9 +479,8 @@
             tempRect.set(0, 0, width, height);
             view.getMatrix().mapRect(tempRect);
 
-            ViewGroup parent = (ViewGroup) view.getParent();
-            left = leftInParent - tempRect.left + parent.getScrollX();
-            top = topInParent - tempRect.top + parent.getScrollY();
+            left = leftInParent - tempRect.left;
+            top = topInParent - tempRect.top;
             right = left + width;
             bottom = top + height;
         }
@@ -506,7 +508,7 @@
             ViewGroup parent = (ViewGroup) view.getParent();
             Matrix matrix = new Matrix();
             parent.transformMatrixToLocal(matrix);
-
+            matrix.postTranslate(parent.getScrollX(), parent.getScrollY());
             mSharedElementParentMatrices.add(matrix);
         }
     }
@@ -521,6 +523,7 @@
                 // Find the location in the view's parent
                 ViewGroup parent = (ViewGroup) viewParent;
                 parent.transformMatrixToLocal(matrix);
+                matrix.postTranslate(parent.getScrollX(), parent.getScrollY());
             }
         } else {
             // The indices of mSharedElementParentMatrices matches the
@@ -878,6 +881,32 @@
         }
     }
 
+    protected boolean isViewsTransitionComplete() {
+        return mViewsTransitionComplete;
+    }
+
+    protected void viewsTransitionComplete() {
+        mViewsTransitionComplete = true;
+        startInputWhenTransitionsComplete();
+    }
+
+    protected void sharedElementTransitionComplete() {
+        mSharedElementTransitionComplete = true;
+        startInputWhenTransitionsComplete();
+    }
+    private void startInputWhenTransitionsComplete() {
+        if (mViewsTransitionComplete && mSharedElementTransitionComplete) {
+            final View decor = getDecor();
+            if (decor != null) {
+                final ViewRootImpl viewRoot = decor.getViewRootImpl();
+                viewRoot.setPausedForTransition(false);
+            }
+            onTransitionsComplete();
+        }
+    }
+
+    protected void onTransitionsComplete() {}
+
     protected class ContinueTransitionListener extends Transition.TransitionListenerAdapter {
         @Override
         public void onTransitionStart(Transition transition) {
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index 9d1d312..b0fda9c 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -26,6 +26,10 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.WorkSource;
+import android.text.TextUtils;
+import libcore.util.ZoneInfoDB;
+
+import java.io.IOException;
 
 /**
  * This class provides access to the system alarm services.  These allow you
@@ -151,6 +155,7 @@
 
     private final IAlarmManager mService;
     private final boolean mAlwaysExact;
+    private final int mTargetSdkVersion;
 
 
     /**
@@ -159,8 +164,8 @@
     AlarmManager(IAlarmManager service, Context ctx) {
         mService = service;
 
-        final int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
-        mAlwaysExact = (sdkVersion < Build.VERSION_CODES.KITKAT);
+        mTargetSdkVersion = ctx.getApplicationInfo().targetSdkVersion;
+        mAlwaysExact = (mTargetSdkVersion < Build.VERSION_CODES.KITKAT);
     }
 
     private long legacyExactLength() {
@@ -585,12 +590,38 @@
     }
 
     /**
-     * Set the system default time zone.
-     * Requires the permission android.permission.SET_TIME_ZONE.
+     * Sets the system's persistent default time zone. This is the time zone for all apps, even
+     * after a reboot. Use {@link java.util.TimeZone#setDefault} if you just want to change the
+     * time zone within your app, and even then prefer to pass an explicit
+     * {@link java.util.TimeZone} to APIs that require it rather than changing the time zone for
+     * all threads.
      *
-     * @param timeZone in the format understood by {@link java.util.TimeZone}
+     * <p> On android M and above, it is an error to pass in a non-Olson timezone to this
+     * function. Note that this is a bad idea on all Android releases because POSIX and
+     * the {@code TimeZone} class have opposite interpretations of {@code '+'} and {@code '-'}
+     * in the same non-Olson ID.
+     *
+     * @param timeZone one of the Olson ids from the list returned by
+     *     {@link java.util.TimeZone#getAvailableIDs}
      */
     public void setTimeZone(String timeZone) {
+        if (TextUtils.isEmpty(timeZone)) {
+            return;
+        }
+
+        // Reject this timezone if it isn't an Olson zone we recognize.
+        if (mTargetSdkVersion >= Build.VERSION_CODES.MNC) {
+            boolean hasTimeZone = false;
+            try {
+                hasTimeZone = ZoneInfoDB.getInstance().hasTimeZone(timeZone);
+            } catch (IOException ignored) {
+            }
+
+            if (!hasTimeZone) {
+                throw new IllegalArgumentException("Timezone: " + timeZone + " is not an Olson ID");
+            }
+        }
+
         try {
             mService.setTimeZone(timeZone);
         } catch (RemoteException ex) {
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 1127436..7104185 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -217,8 +217,18 @@
     public static final int OP_READ_PHONE_STATE = 51;
     /** @hide Add voicemail messages to the voicemail content provider. */
     public static final int OP_ADD_VOICEMAIL = 52;
+    /** @hide Access APIs for SIP calling over VOIP or WiFi. */
+    public static final int OP_USE_SIP = 53;
+    /** @hide Intercept outgoing calls. */
+    public static final int OP_PROCESS_OUTGOING_CALLS = 54;
+    /** @hide User the fingerprint API. */
+    public static final int OP_USE_FINGERPRINT = 55;
+    /** @hide Access to body sensors such as heart rate, etc. */
+    public static final int OP_BODY_SENSORS = 56;
+    /** @hide Read previously received cell broadcast messages. */
+    public static final int OP_READ_CELL_BROADCASTS = 57;
     /** @hide */
-    public static final int _NUM_OP = 53;
+    public static final int _NUM_OP = 58;
 
     /** Access to coarse location information. */
     public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
@@ -274,9 +284,6 @@
     /** @hide Allows an application to send SMS messages. */
     public static final String OPSTR_SEND_SMS
             = "android:send_sms";
-    /** @hide Allows an application to add system alert windows. */
-    public static final String OPSTR_SYSTEM_ALERT_WINDOW
-            = "android:system_alert_window";
     /** @hide Required to be able to access the camera device. */
     public static final String OPSTR_CAMERA
             = "android:camera";
@@ -289,6 +296,18 @@
     /** @hide Required to access phone state related information. */
     public static final String OPSTR_ADD_VOICEMAIL
             = "android:add_voicemail";
+    /** @hide Access APIs for SIP calling over VOIP or WiFi */
+    public static final String OPSTR_USE_SIP
+            = "android:use_sip";
+    /** @hide Use the fingerprint API. */
+    public static final String OPSTR_USE_FINGERPRINT
+            = "android:use_fingerprint";
+    /** @hide Access to body sensors such as heart rate, etc. */
+    public static final String OPSTR_BODY_SENSORS
+            = "android:body_sensors";
+    /** @hide Read previously received cell broadcast messages. */
+    public static final String OPSTR_READ_CELL_BROADCASTS
+            = "android:read_cell_broadcasts";
 
     /**
      * This maps each operation to the operation that serves as the
@@ -351,7 +370,12 @@
             OP_ASSIST_STRUCTURE,
             OP_ASSIST_SCREENSHOT,
             OP_READ_PHONE_STATE,
-            OP_ADD_VOICEMAIL
+            OP_ADD_VOICEMAIL,
+            OP_USE_SIP,
+            OP_PROCESS_OUTGOING_CALLS,
+            OP_USE_FINGERPRINT,
+            OP_BODY_SENSORS,
+            OP_READ_CELL_BROADCASTS
     };
 
     /**
@@ -363,30 +387,30 @@
             OPSTR_FINE_LOCATION,
             null,
             null,
+            OPSTR_READ_CONTACTS,
+            OPSTR_WRITE_CONTACTS,
+            OPSTR_READ_CALL_LOG,
+            OPSTR_WRITE_CALL_LOG,
+            OPSTR_READ_CALENDAR,
+            OPSTR_WRITE_CALENDAR,
+            null,
+            null,
+            null,
+            OPSTR_CALL_PHONE,
+            OPSTR_READ_SMS,
+            null,
+            OPSTR_RECEIVE_SMS,
+            null,
+            OPSTR_RECEIVE_MMS,
+            OPSTR_RECEIVE_WAP_PUSH,
+            OPSTR_SEND_SMS,
             null,
             null,
             null,
             null,
             null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
+            OPSTR_CAMERA,
+            OPSTR_RECORD_AUDIO,
             null,
             null,
             null,
@@ -410,8 +434,13 @@
             null,
             null,
             null,
+            OPSTR_READ_PHONE_STATE,
+            OPSTR_ADD_VOICEMAIL,
+            OPSTR_USE_SIP,
             null,
-            null
+            OPSTR_USE_FINGERPRINT,
+            OPSTR_BODY_SENSORS,
+            OPSTR_READ_CELL_BROADCASTS
     };
 
     /**
@@ -471,7 +500,12 @@
             "ASSIST_STRUCTURE",
             "ASSIST_SCREENSHOT",
             "OP_READ_PHONE_STATE",
-            "ADD_VOICEMAIL"
+            "ADD_VOICEMAIL",
+            "USE_SIP",
+            "PROCESS_OUTGOING_CALLS",
+            "USE_FINGERPRINT",
+            "BODY_SENSORS",
+            "READ_CELL_BROADCASTS"
     };
 
     /**
@@ -531,7 +565,12 @@
             null, // no permission for receiving assist structure
             null, // no permission for receiving assist screenshot
             Manifest.permission.READ_PHONE_STATE,
-            Manifest.permission.ADD_VOICEMAIL
+            Manifest.permission.ADD_VOICEMAIL,
+            Manifest.permission.USE_SIP,
+            Manifest.permission.PROCESS_OUTGOING_CALLS,
+            Manifest.permission.USE_FINGERPRINT,
+            Manifest.permission.BODY_SENSORS,
+            Manifest.permission.READ_CELL_BROADCASTS
     };
 
     /**
@@ -567,7 +606,7 @@
             UserManager.DISALLOW_CREATE_WINDOWS, //SYSTEM_ALERT_WINDOW
             null, //ACCESS_NOTIFICATIONS
             null, //CAMERA
-            null, //RECORD_AUDIO
+            UserManager.DISALLOW_RECORD_AUDIO, //RECORD_AUDIO
             null, //PLAY_AUDIO
             null, //READ_CLIPBOARD
             null, //WRITE_CLIPBOARD
@@ -592,7 +631,12 @@
             null, // ASSIST_STRUCTURE
             null, // ASSIST_SCREENSHOT
             null, // READ_PHONE_STATE
-            null // ADD_VOICEMAIL
+            null, // ADD_VOICEMAIL
+            null, // USE_SIP
+            null, // PROCESS_OUTGOING_CALLS
+            null, // USE_FINGERPRINT
+            null, // BODY_SENSORS
+            null  // READ_CELL_BROADCASTS
     };
 
     /**
@@ -652,7 +696,12 @@
             false, //ASSIST_STRUCTURE
             false, //ASSIST_SCREENSHOT
             false, //READ_PHONE_STATE
-            false  //ADD_VOICEMAIL
+            false, //ADD_VOICEMAIL
+            false, // USE_SIP
+            false, // PROCESS_OUTGOING_CALLS
+            false, // USE_FINGERPRINT
+            false, // BODY_SENSORS
+            false  // READ_CELL_BROADCASTS
     };
 
     /**
@@ -711,6 +760,11 @@
             AppOpsManager.MODE_ALLOWED,
             AppOpsManager.MODE_ALLOWED,
             AppOpsManager.MODE_ALLOWED,
+            AppOpsManager.MODE_ALLOWED,
+            AppOpsManager.MODE_ALLOWED,
+            AppOpsManager.MODE_ALLOWED,
+            AppOpsManager.MODE_ALLOWED,
+            AppOpsManager.MODE_ALLOWED,
             AppOpsManager.MODE_ALLOWED
     };
 
@@ -774,37 +828,23 @@
             false,
             false,
             false,
+            false,
+            false,
+            false,
+            false,
+            false,
             false
     };
 
     /**
-     * This is a mapping from a permission name to public app op name.
+     * Mapping from an app op name to the app op code.
      */
-    private static final ArrayMap<String, String> sPermToOp = new ArrayMap<>();
-    static {
-        sPermToOp.put(Manifest.permission.ACCESS_COARSE_LOCATION, OPSTR_COARSE_LOCATION);
-        sPermToOp.put(Manifest.permission.ACCESS_FINE_LOCATION, OPSTR_FINE_LOCATION);
-        sPermToOp.put(Manifest.permission.PACKAGE_USAGE_STATS, OPSTR_GET_USAGE_STATS);
-        sPermToOp.put(Manifest.permission.READ_CONTACTS, OPSTR_READ_CONTACTS);
-        sPermToOp.put(Manifest.permission.WRITE_CONTACTS, OPSTR_WRITE_CONTACTS);
-        sPermToOp.put(Manifest.permission.READ_CALL_LOG, OPSTR_READ_CALL_LOG);
-        sPermToOp.put(Manifest.permission.WRITE_CALL_LOG, OPSTR_WRITE_CALL_LOG);
-        sPermToOp.put(Manifest.permission.READ_CALENDAR, OPSTR_READ_CALENDAR);
-        sPermToOp.put(Manifest.permission.WRITE_CALENDAR, OPSTR_WRITE_CALENDAR);
-        sPermToOp.put(Manifest.permission.CALL_PHONE, OPSTR_CALL_PHONE);
-        sPermToOp.put(Manifest.permission.READ_SMS, OPSTR_READ_SMS);
-        sPermToOp.put(Manifest.permission.RECEIVE_SMS, OPSTR_RECEIVE_SMS);
-        sPermToOp.put(Manifest.permission.RECEIVE_MMS, OPSTR_RECEIVE_MMS);
-        sPermToOp.put(Manifest.permission.RECEIVE_WAP_PUSH, OPSTR_RECEIVE_WAP_PUSH);
-        sPermToOp.put(Manifest.permission.SEND_SMS, OPSTR_SEND_SMS);
-        sPermToOp.put(Manifest.permission.SYSTEM_ALERT_WINDOW, OPSTR_SYSTEM_ALERT_WINDOW);
-        sPermToOp.put(Manifest.permission.CAMERA, OPSTR_CAMERA);
-        sPermToOp.put(Manifest.permission.RECORD_AUDIO, OPSTR_RECORD_AUDIO);
-        sPermToOp.put(Manifest.permission.READ_PHONE_STATE, OPSTR_READ_PHONE_STATE);
-        sPermToOp.put(Manifest.permission.ADD_VOICEMAIL, OPSTR_ADD_VOICEMAIL);
-    }
+    private static HashMap<String, Integer> sOpStrToOp = new HashMap<>();
 
-    private static HashMap<String, Integer> sOpStrToOp = new HashMap<String, Integer>();
+    /**
+     * Mapping from a permission to the corresponding app op.
+     */
+    private static HashMap<String, Integer> sPermToOp = new HashMap<>();
 
     static {
         if (sOpToSwitch.length != _NUM_OP) {
@@ -844,6 +884,11 @@
                 sOpStrToOp.put(sOpToString[i], i);
             }
         }
+        for (int i=0; i<_NUM_OP; i++) {
+            if (sOpPerms[i] != null) {
+                sPermToOp.put(sOpPerms[i], i);
+            }
+        }
     }
 
     /**
@@ -892,6 +937,15 @@
     }
 
     /**
+     * Retrieve the app op code for a permission, or null if there is not one.
+     * @hide
+     */
+    public static int permissionToOpCode(String permission) {
+        Integer boxedOpCode = sPermToOp.get(permission);
+        return boxedOpCode != null ? boxedOpCode : OP_NONE;
+    }
+
+    /**
      * Retrieve whether the op allows the system (and system ui) to
      * bypass the user restriction.
      * @hide
@@ -1155,7 +1209,11 @@
      */
     @SystemApi
     public static String permissionToOp(String permission) {
-        return sPermToOp.get(permission);
+        final Integer opCode = sPermToOp.get(permission);
+        if (opCode == null) {
+            return null;
+        }
+        return sOpToString[opCode];
     }
 
     /**
diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java
index 75e4bab..1174387 100644
--- a/core/java/android/app/Application.java
+++ b/core/java/android/app/Application.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 
+import android.annotation.CallSuper;
 import android.content.ComponentCallbacks;
 import android.content.ComponentCallbacks2;
 import android.content.Context;
@@ -89,6 +90,7 @@
      * service, or receiver in a process.
      * If you override this method, be sure to call super.onCreate().
      */
+    @CallSuper
     public void onCreate() {
     }
 
@@ -98,9 +100,11 @@
      * removed by simply killing them; no user code (including this callback)
      * is executed when doing so.
      */
+    @CallSuper
     public void onTerminate() {
     }
 
+    @CallSuper
     public void onConfigurationChanged(Configuration newConfig) {
         Object[] callbacks = collectComponentCallbacks();
         if (callbacks != null) {
@@ -110,6 +114,7 @@
         }
     }
 
+    @CallSuper
     public void onLowMemory() {
         Object[] callbacks = collectComponentCallbacks();
         if (callbacks != null) {
@@ -119,6 +124,7 @@
         }
     }
 
+    @CallSuper
     public void onTrimMemory(int level) {
         Object[] callbacks = collectComponentCallbacks();
         if (callbacks != null) {
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 90293a4..07eee12 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -1571,9 +1571,15 @@
         final VolumeInfo currentVol = getPrimaryStorageCurrentVolume();
         final List<VolumeInfo> vols = storage.getVolumes();
         final List<VolumeInfo> candidates = new ArrayList<>();
-        for (VolumeInfo vol : vols) {
-            if (Objects.equals(vol, currentVol) || isPrimaryStorageCandidateVolume(vol)) {
-                candidates.add(vol);
+        if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL,
+                storage.getPrimaryStorageUuid()) && currentVol != null) {
+            // TODO: support moving primary physical to emulated volume
+            candidates.add(currentVol);
+        } else {
+            for (VolumeInfo vol : vols) {
+                if (Objects.equals(vol, currentVol) || isPrimaryStorageCandidateVolume(vol)) {
+                    candidates.add(vol);
+                }
             }
         }
         return candidates;
@@ -1590,12 +1596,7 @@
             return false;
         }
 
-        // We can move to public volumes on legacy devices
-        if ((vol.getType() == VolumeInfo.TYPE_PUBLIC) && vol.getDisk().isDefaultPrimary()) {
-            return true;
-        }
-
-        // Otherwise we can move to any private volume
+        // We can move to any private volume
         return (vol.getType() == VolumeInfo.TYPE_PRIVATE);
     }
 
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index b6989ab..1461380 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -529,10 +529,12 @@
             boolean checkin = data.readInt() != 0;
             boolean dumpInfo = data.readInt() != 0;
             boolean dumpDalvik = data.readInt() != 0;
+            boolean dumpSummaryOnly = data.readInt() != 0;
             String[] args = data.readStringArray();
             if (fd != null) {
                 try {
-                    dumpMemInfo(fd.getFileDescriptor(), mi, checkin, dumpInfo, dumpDalvik, args);
+                    dumpMemInfo(fd.getFileDescriptor(), mi, checkin, dumpInfo,
+                            dumpDalvik, dumpSummaryOnly, args);
                 } finally {
                     try {
                         fd.close();
@@ -1248,7 +1250,7 @@
     }
 
     public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin,
-            boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException {
+            boolean dumpInfo, boolean dumpDalvik, boolean dumpSummaryOnly, String[] args) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IApplicationThread.descriptor);
@@ -1257,6 +1259,7 @@
         data.writeInt(checkin ? 1 : 0);
         data.writeInt(dumpInfo ? 1 : 0);
         data.writeInt(dumpDalvik ? 1 : 0);
+        data.writeInt(dumpSummaryOnly ? 1 : 0);
         data.writeStringArray(args);
         mRemote.transact(DUMP_MEM_INFO_TRANSACTION, data, reply, 0);
         reply.readException();
diff --git a/core/java/android/app/AssistAction.java b/core/java/android/app/AssistAction.java
deleted file mode 100644
index eb33542..0000000
--- a/core/java/android/app/AssistAction.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.app;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-
-import com.android.internal.util.Preconditions;
-
-/**
- * Helper class for building a {@link Bundle} representing an action being performed by the user,
- * to be included in the Bundle generated by {@link Activity#onProvideAssistData}.
- *
- * @see Activity#onProvideAssistData
- */
-public final class AssistAction {
-
-    /**
-     * Key name for the Bundle containing the schema.org representation of
-     * an action performed, and should be stored in the Bundle generated by
-     * {@link Activity#onProvideAssistData}.
-     */
-    public static final String ASSIST_ACTION_KEY = "android:assist_action";
-
-    /** Bundle key to specify the schema.org ID of the content. */
-    public static final String KEY_ID = "@id";
-
-    /** Bundle key to specify the schema.org type of the content. */
-    public static final String KEY_TYPE = "@type";
-
-    /** Bundle key to specify the name of the content. */
-    public static final String KEY_NAME = "name";
-
-    /** Bundle key to specify the description of the content. */
-    public static final String KEY_DESCRIPTION = "description";
-
-    /** Bundle key to specify the URL of the content. */
-    public static final String KEY_URL = "url";
-
-    /** Bundle key to specify the object of an action. */
-    public static final String KEY_ACTION_OBJECT = "object";
-
-    /** Bundle key to specify the action's status. */
-    public static final String KEY_ACTION_STATUS = "actionStatus";
-
-    /** The act of editing by adding an object to a collection. */
-    public static final String TYPE_ADD_ACTION = "AddAction";
-
-    /** The act of bookmarking an object. */
-    public static final String TYPE_BOOKMARK_ACTION = "BookmarkAction";
-
-    /** The act of liking an object. */
-    public static final String TYPE_LIKE_ACTION = "LikeAction";
-
-    /** The act of consuming audio content. */
-    public static final String TYPE_LISTEN_ACTION = "ListenAction";
-
-    /** The act of consuming static visual content. */
-    public static final String TYPE_VIEW_ACTION = "ViewAction";
-
-    /** The act of expressing a desire about the object. */
-    public static final String TYPE_WANT_ACTION = "WantAction";
-
-    /** The act of watching an object. */
-    public static final String TYPE_WATCH_ACTION = "WatchAction";
-
-    /** The status of an active action. */
-    public static final String STATUS_TYPE_ACTIVE = "ActiveActionStatus";
-
-    /** The status of a completed action. */
-    public static final String STATUS_TYPE_COMPLETED = "CompletedActionStatus";
-
-    private AssistAction() {
-    }
-
-    /**
-     * Update the Bundle passed into {@link Activity#onProvideAssistData} with the action Bundle,
-     * built with {@link ActionBuilder}.
-     *
-     * @param assistDataBundle The Bundle provided to {@link Activity#onProvideAssistData}.
-     * @param actionBundle The Bundle representing an schema.org action.
-     */
-    public static void updateAssistData(Bundle assistDataBundle, Bundle actionBundle) {
-        Preconditions.checkNotNull(assistDataBundle);
-        Preconditions.checkNotNull(actionBundle);
-
-        Preconditions.checkNotNull(actionBundle.getString(KEY_TYPE),
-                "The '@type' property is required in the provided actionBundle");
-        assistDataBundle.putParcelable(ASSIST_ACTION_KEY, actionBundle);
-    }
-
-    /**
-     * Builds a {@link Bundle} representing a schema.org entity.
-     */
-    public static final class ThingBuilder {
-        private final Bundle mBundle;
-
-        public ThingBuilder() {
-            mBundle = new Bundle();
-        }
-
-        /**
-         * Sets the name of the content.
-         *
-         * @param name The name of the content.
-         */
-        public ThingBuilder setName(@Nullable String name) {
-            set(KEY_NAME, name);
-            return this;
-        }
-
-        /**
-         * Sets the app URI of the content.
-         *
-         * @param uri The app URI of the content.
-         */
-        public ThingBuilder setUrl(@Nullable Uri uri) {
-            if (uri != null) {
-                set(KEY_URL, uri.toString());
-            }
-            return this;
-        }
-
-        /**
-         * Sets the ID of the content.
-         *
-         * @param id Set the ID of the content.
-         */
-        public ThingBuilder setId(@Nullable String id) {
-            set(KEY_ID, id);
-            return this;
-        }
-
-        /**
-        * Sets the schema.org type of the content.
-        *
-        * @param type The schema.org type.
-        */
-        public ThingBuilder setType(@Nullable String type) {
-            set(KEY_TYPE, type);
-            return this;
-        }
-
-        /**
-         * Sets the optional description of the content.
-         *
-         * @param description The description of the content.
-         */
-        public ThingBuilder setDescription(@Nullable String description) {
-            set(KEY_DESCRIPTION, description);
-            return this;
-        }
-
-        /**
-         * Sets a property of the content.
-         *
-         * @param key The schema.org property. Must not be null.
-         * @param value The value of the schema.org property.
-         *              If null, the value will be ignored.
-         */
-        public ThingBuilder set(@NonNull String key, @Nullable String value) {
-            if (value != null) {
-                mBundle.putString(key, value);
-            }
-            return this;
-        }
-
-        /**
-         * Sets a property of the content.
-         *
-         * @param key The schema.org property. Must not be null.
-         * @param value The value of the schema.org property represented as a bundle.
-         *              If null, the value will be ignored.
-         */
-        public ThingBuilder set(@NonNull String key, @Nullable Bundle value) {
-            if (value != null) {
-                mBundle.putParcelable(key, value);
-            }
-            return this;
-        }
-
-        /**
-         * Build the {@link Bundle} object representing the schema.org entity.
-         */
-        public Bundle build() {
-            return mBundle;
-        }
-    }
-
-    /**
-     * Builds a {@link Bundle} representing a schema.org action.
-     */
-    public static final class ActionBuilder {
-        private final Bundle mBundle;
-
-        public ActionBuilder() {
-            mBundle = new Bundle();
-        }
-
-        /**
-         * Sets the schema.org type of the action.
-         *
-         * @param type The schema.org type.
-         */
-        public ActionBuilder setType(@Nullable String type) {
-            set(KEY_TYPE, type);
-            return this;
-        }
-
-        /**
-         * Sets the schema.org object of the action.
-         *
-         * @param object The schema.org object of the action.
-         */
-        public ActionBuilder setObject(@Nullable Bundle object) {
-            set(KEY_ACTION_OBJECT, object);
-            return this;
-        }
-
-        /**
-         * Sets a property of the action.
-         *
-         * @param key The schema.org property. Must not be null.
-         * @param value The value of the schema.org property.
-         *              If null, the value will be ignored.
-         */
-        public ActionBuilder set(@NonNull String key, @Nullable String value) {
-            if (value != null) {
-                mBundle.putString(key, value);
-            }
-            return this;
-        }
-
-        /**
-         * Sets a property of the action.
-         *
-         * @param key The schema.org property. Must not be null.
-         * @param value The value of the schema.org property represented as a bundle.
-         *              If null, the value will be ignored.
-         */
-        public ActionBuilder set(@NonNull String key, @Nullable Bundle value) {
-            if (value != null) {
-                mBundle.putParcelable(key, value);
-            }
-            return this;
-        }
-
-        /**
-         * Build the {@link Bundle} object representing the schema.org action.
-         */
-        public Bundle build() {
-            if (TextUtils.isEmpty(mBundle.getString(KEY_TYPE, null))) {
-                // Defaults to the base action type http://schema.org/Action.
-                setType("Action");
-            }
-
-            return mBundle;
-        }
-    }
-}
diff --git a/core/java/android/app/AssistStructure.java b/core/java/android/app/AssistStructure.java
index 9946d79..a06bc31 100644
--- a/core/java/android/app/AssistStructure.java
+++ b/core/java/android/app/AssistStructure.java
@@ -35,6 +35,7 @@
 import android.view.View;
 import android.view.ViewAssistStructure;
 import android.view.ViewRootImpl;
+import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 
 import java.util.ArrayList;
@@ -140,7 +141,14 @@
             mTitle = root.getTitle();
             mRoot = new ViewNode();
             ViewNodeBuilder builder = new ViewNodeBuilder(assist, mRoot, false);
-            view.dispatchProvideAssistStructure(builder);
+            if ((root.getWindowFlags()&WindowManager.LayoutParams.FLAG_SECURE) != 0) {
+                // This is a secure window, so it doesn't want a screenshot, and that
+                // means we should also not copy out its view hierarchy.
+                view.onProvideStructure(builder);
+                builder.setAssistBlocked(true);
+                return;
+            }
+            view.dispatchProvideStructure(builder);
         }
 
         WindowNode(Parcel in, PooledStringReader preader) {
@@ -224,6 +232,7 @@
         static final int FLAGS_CHECKED = 0x00000200;
         static final int FLAGS_CLICKABLE = 0x00004000;
         static final int FLAGS_LONG_CLICKABLE = 0x00200000;
+        static final int FLAGS_STYLUS_BUTTON_PRESSABLE = 0x00400000;
 
         int mFlags;
 
@@ -401,6 +410,10 @@
             return (mFlags&ViewNode.FLAGS_LONG_CLICKABLE) != 0;
         }
 
+        public boolean isStylusButtonPressable() {
+            return (mFlags&ViewNode.FLAGS_STYLUS_BUTTON_PRESSABLE) != 0;
+        }
+
         public String getClassName() {
             return mClassName;
         }
@@ -513,6 +526,12 @@
         }
 
         @Override
+        public void setStylusButtonPressable(boolean state) {
+            mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_STYLUS_BUTTON_PRESSABLE)
+                    | (state ? ViewNode.FLAGS_STYLUS_BUTTON_PRESSABLE : 0);
+        }
+
+        @Override
         public void setFocusable(boolean state) {
             mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_FOCUSABLE)
                     | (state ? ViewNode.FLAGS_FOCUSABLE : 0);
@@ -641,7 +660,7 @@
         }
 
         @Override
-        public Bundle editExtras() {
+        public Bundle getExtras() {
             if (mNode.mExtras != null) {
                 return mNode.mExtras;
             }
@@ -650,8 +669,8 @@
         }
 
         @Override
-        public void clearExtras() {
-            mNode.mExtras = null;
+        public boolean hasExtras() {
+            return mNode.mExtras != null;
         }
 
         @Override
diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java
index 8fb048b..49644a7 100644
--- a/core/java/android/app/BackStackRecord.java
+++ b/core/java/android/app/BackStackRecord.java
@@ -416,14 +416,14 @@
 
     public CharSequence getBreadCrumbTitle() {
         if (mBreadCrumbTitleRes != 0) {
-            return mManager.mActivity.getText(mBreadCrumbTitleRes);
+            return mManager.mHost.getContext().getText(mBreadCrumbTitleRes);
         }
         return mBreadCrumbTitleText;
     }
 
     public CharSequence getBreadCrumbShortTitle() {
         if (mBreadCrumbShortTitleRes != 0) {
-            return mManager.mActivity.getText(mBreadCrumbShortTitleRes);
+            return mManager.mHost.getContext().getText(mBreadCrumbShortTitleRes);
         }
         return mBreadCrumbShortTitleText;
     }
@@ -868,7 +868,7 @@
      */
     private void calculateFragments(SparseArray<Fragment> firstOutFragments,
             SparseArray<Fragment> lastInFragments) {
-        if (!mManager.mContainer.hasView()) {
+        if (!mManager.mContainer.onHasView()) {
             return; // nothing to see, so no transitions
         }
         Op op = mHead;
@@ -926,7 +926,7 @@
      */
     public void calculateBackFragments(SparseArray<Fragment> firstOutFragments,
             SparseArray<Fragment> lastInFragments) {
-        if (!mManager.mContainer.hasView()) {
+        if (!mManager.mContainer.onHasView()) {
             return; // nothing to see, so no transitions
         }
         Op op = mHead;
@@ -1002,7 +1002,7 @@
         // Adding a non-existent target view makes sure that the transitions don't target
         // any views by default. They'll only target the views we tell add. If we don't
         // add any, then no views will be targeted.
-        state.nonExistentView = new View(mManager.mActivity);
+        state.nonExistentView = new View(mManager.mHost.getContext());
 
         // Go over all leaving fragments.
         for (int i = 0; i < firstOutFragments.size(); i++) {
@@ -1275,7 +1275,7 @@
      */
     private void configureTransitions(int containerId, TransitionState state, boolean isBack,
             SparseArray<Fragment> firstOutFragments, SparseArray<Fragment> lastInFragments) {
-        ViewGroup sceneRoot = (ViewGroup) mManager.mContainer.findViewById(containerId);
+        ViewGroup sceneRoot = (ViewGroup) mManager.mContainer.onFindViewById(containerId);
         if (sceneRoot != null) {
             Fragment inFragment = lastInFragments.get(containerId);
             Fragment outFragment = firstOutFragments.get(containerId);
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 81a78f6..cb20cb8 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -237,8 +237,11 @@
     }
 
     @Override
-    public void setTheme(int resid) {
-        mThemeResource = resid;
+    public void setTheme(int resId) {
+        if (mThemeResource != resId) {
+            mThemeResource = resId;
+            initializeTheme();
+        }
     }
 
     @Override
@@ -248,15 +251,24 @@
 
     @Override
     public Resources.Theme getTheme() {
-        if (mTheme == null) {
-            mThemeResource = Resources.selectDefaultTheme(mThemeResource,
-                    getOuterContext().getApplicationInfo().targetSdkVersion);
-            mTheme = mResources.newTheme();
-            mTheme.applyStyle(mThemeResource, true);
+        if (mTheme != null) {
+            return mTheme;
         }
+
+        mThemeResource = Resources.selectDefaultTheme(mThemeResource,
+                getOuterContext().getApplicationInfo().targetSdkVersion);
+        initializeTheme();
+
         return mTheme;
     }
 
+    private void initializeTheme() {
+        if (mTheme == null) {
+            mTheme = mResources.newTheme();
+        }
+        mTheme.applyStyle(mThemeResource, true);
+    }
+
     @Override
     public ClassLoader getClassLoader() {
         return mPackageInfo != null ?
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java
index d049104..f6e0e1e 100644
--- a/core/java/android/app/Dialog.java
+++ b/core/java/android/app/Dialog.java
@@ -48,7 +48,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.MotionEvent;
-import android.view.PhoneWindow;
+import com.android.internal.policy.PhoneWindow;
 import android.view.SearchEvent;
 import android.view.View;
 import android.view.View.OnCreateContextMenuListener;
diff --git a/core/java/android/app/DialogFragment.java b/core/java/android/app/DialogFragment.java
index bde5a61..2fb8cc2 100644
--- a/core/java/android/app/DialogFragment.java
+++ b/core/java/android/app/DialogFragment.java
@@ -410,7 +410,7 @@
             return (LayoutInflater)mDialog.getContext().getSystemService(
                     Context.LAYOUT_INFLATER_SERVICE);
         }
-        return (LayoutInflater)mActivity.getSystemService(
+        return (LayoutInflater) mHost.getContext().getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
     }
     
diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java
index e84a8da..4db4be0 100644
--- a/core/java/android/app/EnterTransitionCoordinator.java
+++ b/core/java/android/app/EnterTransitionCoordinator.java
@@ -55,8 +55,6 @@
     private boolean mWasOpaque;
     private boolean mAreViewsReady;
     private boolean mIsViewsTransitionStarted;
-    private boolean mIsViewsTransitionComplete;
-    private boolean mIsSharedElementTransitionComplete;
     private Transition mEnterViewsTransition;
 
     public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver,
@@ -456,7 +454,7 @@
                 }
             }
             if (viewsTransition == null) {
-                viewTransitionComplete();
+                viewsTransitionComplete();
             } else {
                 viewsTransition.forceVisibility(View.INVISIBLE, true);
                 final ArrayList<View> transitioningViews = mTransitioningViews;
@@ -474,7 +472,7 @@
                     public void onTransitionEnd(Transition transition) {
                         mEnterViewsTransition = null;
                         transition.removeListener(this);
-                        viewTransitionComplete();
+                        viewsTransitionComplete();
                         super.onTransitionEnd(transition);
                     }
                 });
@@ -497,18 +495,9 @@
         return transition;
     }
 
-    private void viewTransitionComplete() {
-        mIsViewsTransitionComplete = true;
-        if (mIsSharedElementTransitionComplete) {
-            moveSharedElementsFromOverlay();
-        }
-    }
-
-    private void sharedElementTransitionComplete() {
-        mIsSharedElementTransitionComplete = true;
-        if (mIsViewsTransitionComplete) {
-            moveSharedElementsFromOverlay();
-        }
+    @Override
+    protected void onTransitionsComplete() {
+        moveSharedElementsFromOverlay();
     }
 
     private void sharedElementTransitionStarted() {
diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java
index 169952ad..9ddebb0 100644
--- a/core/java/android/app/ExitTransitionCoordinator.java
+++ b/core/java/android/app/ExitTransitionCoordinator.java
@@ -46,8 +46,6 @@
     private static final String TAG = "ExitTransitionCoordinator";
     private static final long MAX_WAIT_MS = 1000;
 
-    private boolean mExitComplete;
-
     private Bundle mSharedElementBundle;
 
     private boolean mExitNotified;
@@ -165,7 +163,7 @@
             @Override
             public void onTransitionEnd(Transition transition) {
                 transition.removeListener(this);
-                if (mExitComplete) {
+                if (isViewsTransitionComplete()) {
                     delayCancel();
                 }
             }
@@ -239,7 +237,7 @@
                 getWindow().setBackgroundDrawable(new ColorDrawable(Color.BLACK));
             }
             ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, this,
-                    mAllSharedElementNames, resultCode, data);
+                    mSharedElementNames, resultCode, data);
             mActivity.convertToTranslucent(new Activity.TranslucentConversionListener() {
                 @Override
                 public void onTranslucentConversionComplete(boolean drawComplete) {
@@ -310,14 +308,14 @@
             viewsTransition = configureTransition(getViewsTransition(), true);
         }
         if (viewsTransition == null) {
-            exitTransitionComplete();
+            viewsTransitionComplete();
         } else {
             final ArrayList<View> transitioningViews = mTransitioningViews;
             viewsTransition.addListener(new ContinueTransitionListener() {
                 @Override
                 public void onTransitionEnd(Transition transition) {
                     transition.removeListener(this);
-                    exitTransitionComplete();
+                    viewsTransitionComplete();
                     if (mIsHidden && transitioningViews != null) {
                         showViews(transitioningViews, true);
                     }
@@ -373,19 +371,15 @@
         }
     }
 
-    private void exitTransitionComplete() {
-        mExitComplete = true;
-        notifyComplete();
-    }
-
     protected boolean isReadyToNotify() {
         return mSharedElementBundle != null && mResultReceiver != null && mIsBackgroundReady;
     }
 
-    private void sharedElementTransitionComplete() {
+    @Override
+    protected void sharedElementTransitionComplete() {
         mSharedElementBundle = mExitSharedElementBundle == null
                 ? captureSharedElementState() : captureExitSharedElementsState();
-        notifyComplete();
+        super.sharedElementTransitionComplete();
     }
 
     private Bundle captureExitSharedElementsState() {
@@ -405,6 +399,11 @@
         return bundle;
     }
 
+    @Override
+    protected void onTransitionsComplete() {
+        notifyComplete();
+    }
+
     protected void notifyComplete() {
         if (isReadyToNotify()) {
             if (!mSharedElementNotified) {
@@ -433,7 +432,7 @@
     }
 
     private void notifyExitComplete() {
-        if (!mExitNotified && mExitComplete) {
+        if (!mExitNotified && isViewsTransitionComplete()) {
             mExitNotified = true;
             mResultReceiver.send(MSG_EXIT_TRANSITION_COMPLETE, null);
             mResultReceiver = null; // done talking
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 4fdae7f..40c5c64 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -26,7 +26,6 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -94,19 +93,20 @@
         mSavedFragmentState = in.readBundle();
     }
 
-    public Fragment instantiate(Activity activity, Fragment parent) {
+    public Fragment instantiate(FragmentHostCallback host, Fragment parent) {
         if (mInstance != null) {
             return mInstance;
         }
 
+        final Context context = host.getContext();
         if (mArguments != null) {
-            mArguments.setClassLoader(activity.getClassLoader());
+            mArguments.setClassLoader(context.getClassLoader());
         }
 
-        mInstance = Fragment.instantiate(activity, mClassName, mArguments);
+        mInstance = Fragment.instantiate(context, mClassName, mArguments);
 
         if (mSavedFragmentState != null) {
-            mSavedFragmentState.setClassLoader(activity.getClassLoader());
+            mSavedFragmentState.setClassLoader(context.getClassLoader());
             mInstance.mSavedFragmentState = mSavedFragmentState;
         }
         mInstance.setIndex(mIndex, parent);
@@ -117,7 +117,7 @@
         mInstance.mTag = mTag;
         mInstance.mRetainInstance = mRetainInstance;
         mInstance.mDetached = mDetached;
-        mInstance.mFragmentManager = activity.mFragments;
+        mInstance.mFragmentManager = host.mFragmentManager;
         if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG,
                 "Instantiated fragment " + mInstance);
 
@@ -425,7 +425,7 @@
     FragmentManagerImpl mFragmentManager;
 
     // Activity this fragment is attached to.
-    Activity mActivity;
+    FragmentHostCallback mHost;
 
     // Private fragment manager for child fragments inside of this one.
     FragmentManagerImpl mChildFragmentManager;
@@ -775,20 +775,36 @@
     }
 
     /**
+     * Return the {@link Context} this fragment is currently associated with.
+     */
+    public Context getContext() {
+        return mHost == null ? null : mHost.getContext();
+    }
+
+    /**
      * Return the Activity this fragment is currently associated with.
      */
     final public Activity getActivity() {
-        return mActivity;
+        return mHost == null ? null : mHost.getActivity();
+    }
+
+    /**
+     * Return the host object of this fragment. May return {@code null} if the fragment
+     * isn't currently being hosted.
+     */
+    @Nullable
+    final public Object getHost() {
+        return mHost == null ? null : mHost.onGetHost();
     }
 
     /**
      * Return <code>getActivity().getResources()</code>.
      */
     final public Resources getResources() {
-        if (mActivity == null) {
+        if (mHost == null) {
             throw new IllegalStateException("Fragment " + this + " not attached to Activity");
         }
-        return mActivity.getResources();
+        return mHost.getContext().getResources();
     }
 
     /**
@@ -870,7 +886,7 @@
      * Return true if the fragment is currently added to its activity.
      */
     final public boolean isAdded() {
-        return mActivity != null && mAdded;
+        return mHost != null && mAdded;
     }
 
     /**
@@ -1037,11 +1053,11 @@
         if (mLoaderManager != null) {
             return mLoaderManager;
         }
-        if (mActivity == null) {
+        if (mHost == null) {
             throw new IllegalStateException("Fragment " + this + " not attached to Activity");
         }
         mCheckedForLoaderManager = true;
-        mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, true);
+        mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, true);
         return mLoaderManager;
     }
 
@@ -1065,15 +1081,15 @@
      * Context.startActivity(Intent, Bundle)} for more details.
      */
     public void startActivity(Intent intent, Bundle options) {
-        if (mActivity == null) {
+        if (mHost == null) {
             throw new IllegalStateException("Fragment " + this + " not attached to Activity");
         }
         if (options != null) {
-            mActivity.startActivityFromFragment(this, intent, -1, options);
+            mHost.onStartActivityFromFragment(this, intent, -1, options);
         } else {
             // Note we want to go through this call for compatibility with
             // applications that may have overridden the method.
-            mActivity.startActivityFromFragment(this, intent, -1);
+            mHost.onStartActivityFromFragment(this, intent, -1, null /*options*/);
         }
     }
 
@@ -1090,10 +1106,10 @@
      * containing Activity.
      */
     public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
-        if (mActivity == null) {
+        if (mHost == null) {
             throw new IllegalStateException("Fragment " + this + " not attached to Activity");
         }
-        mActivity.startActivityFromFragment(this, intent, requestCode, options);
+        mHost.onStartActivityFromFragment(this, intent, requestCode, options);
     }
 
     /**
@@ -1181,11 +1197,12 @@
      * @see android.content.Context#checkSelfPermission(String)
      */
     public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
-        if (mActivity == null) {
+        if (mHost == null) {
             throw new IllegalStateException("Fragment " + this + " not attached to Activity");
         }
-        Intent intent = mActivity.getPackageManager().buildRequestPermissionsIntent(permissions);
-        mActivity.startActivityFromFragment(this, intent, requestCode, null);
+        Intent intent =
+                mHost.getContext().getPackageManager().buildRequestPermissionsIntent(permissions);
+        mHost.onStartActivityFromFragment(this, intent, requestCode, null);
     }
 
     /**
@@ -1211,19 +1228,16 @@
      * inflation.  Maybe this should become a public API. Note sure.
      */
     public LayoutInflater getLayoutInflater(Bundle savedInstanceState) {
-        // Newer platform versions use the child fragment manager's LayoutInflaterFactory.
-        if (mActivity.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
-            LayoutInflater result = mActivity.getLayoutInflater().cloneInContext(mActivity);
+        final LayoutInflater result = mHost.onGetLayoutInflater();
+        if (mHost.onUseFragmentManagerInflaterFactory()) {
             getChildFragmentManager(); // Init if needed; use raw implementation below.
             result.setPrivateFactory(mChildFragmentManager.getLayoutInflaterFactory());
-            return result;
-        } else {
-            return mActivity.getLayoutInflater();
         }
+        return result;
     }
 
     /**
-     * @deprecated Use {@link #onInflate(Activity, AttributeSet, Bundle)} instead.
+     * @deprecated Use {@link #onInflate(Context, AttributeSet, Bundle)} instead.
      */
     @Deprecated
     public void onInflate(AttributeSet attrs, Bundle savedInstanceState) {
@@ -1266,29 +1280,29 @@
      * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentArguments.java
      *      create}
      *
-     * @param activity The Activity that is inflating this fragment.
+     * @param context The Context that is inflating this fragment.
      * @param attrs The attributes at the tag where the fragment is
      * being created.
      * @param savedInstanceState If the fragment is being re-created from
      * a previous saved state, this is the state.
      */
-    public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
+    public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) {
         onInflate(attrs, savedInstanceState);
         mCalled = true;
 
-        TypedArray a = activity.obtainStyledAttributes(attrs,
+        TypedArray a = context.obtainStyledAttributes(attrs,
                 com.android.internal.R.styleable.Fragment);
-        mEnterTransition = loadTransition(activity, a, mEnterTransition, null,
+        mEnterTransition = loadTransition(context, a, mEnterTransition, null,
                 com.android.internal.R.styleable.Fragment_fragmentEnterTransition);
-        mReturnTransition = loadTransition(activity, a, mReturnTransition, USE_DEFAULT_TRANSITION,
+        mReturnTransition = loadTransition(context, a, mReturnTransition, USE_DEFAULT_TRANSITION,
                 com.android.internal.R.styleable.Fragment_fragmentReturnTransition);
-        mExitTransition = loadTransition(activity, a, mExitTransition, null,
+        mExitTransition = loadTransition(context, a, mExitTransition, null,
                 com.android.internal.R.styleable.Fragment_fragmentExitTransition);
-        mReenterTransition = loadTransition(activity, a, mReenterTransition, USE_DEFAULT_TRANSITION,
+        mReenterTransition = loadTransition(context, a, mReenterTransition, USE_DEFAULT_TRANSITION,
                 com.android.internal.R.styleable.Fragment_fragmentReenterTransition);
-        mSharedElementEnterTransition = loadTransition(activity, a, mSharedElementEnterTransition,
+        mSharedElementEnterTransition = loadTransition(context, a, mSharedElementEnterTransition,
                 null, com.android.internal.R.styleable.Fragment_fragmentSharedElementEnterTransition);
-        mSharedElementReturnTransition = loadTransition(activity, a, mSharedElementReturnTransition,
+        mSharedElementReturnTransition = loadTransition(context, a, mSharedElementReturnTransition,
                 USE_DEFAULT_TRANSITION,
                 com.android.internal.R.styleable.Fragment_fragmentSharedElementReturnTransition);
         if (mAllowEnterTransitionOverlap == null) {
@@ -1300,12 +1314,39 @@
                     com.android.internal.R.styleable.Fragment_fragmentAllowReturnTransitionOverlap, true);
         }
         a.recycle();
+
+        final Activity hostActivity = mHost == null ? null : mHost.getActivity();
+        if (hostActivity != null) {
+            mCalled = false;
+            onInflate(hostActivity, attrs, savedInstanceState);
+        }
     }
 
     /**
-     * Called when a fragment is first attached to its activity.
+     * @deprecated Use {@link #onInflate(Context, AttributeSet, Bundle)} instead.
+     */
+    @Deprecated
+    public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
+        mCalled = true;
+    }
+
+    /**
+     * Called when a fragment is first attached to its context.
      * {@link #onCreate(Bundle)} will be called after this.
      */
+    public void onAttach(Context context) {
+        mCalled = true;
+        final Activity hostActivity = mHost == null ? null : mHost.getActivity();
+        if (hostActivity != null) {
+            mCalled = false;
+            onAttach(hostActivity);
+        }
+    }
+
+    /**
+     * @deprecated Use {@link #onAttach(Context)} instead.
+     */
+    @Deprecated
     public void onAttach(Activity activity) {
         mCalled = true;
     }
@@ -1428,7 +1469,7 @@
             mLoadersStarted = true;
             if (!mCheckedForLoaderManager) {
                 mCheckedForLoaderManager = true;
-                mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, false);
+                mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
             }
             if (mLoaderManager != null) {
                 mLoaderManager.doStart();
@@ -1521,7 +1562,7 @@
         //        + " mLoaderManager=" + mLoaderManager);
         if (!mCheckedForLoaderManager) {
             mCheckedForLoaderManager = true;
-            mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, false);
+            mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
         }
         if (mLoaderManager != null) {
             mLoaderManager.doDestroy();
@@ -1546,7 +1587,7 @@
         mBackStackNesting = 0;
         mFragmentManager = null;
         mChildFragmentManager = null;
-        mActivity = null;
+        mHost = null;
         mFragmentId = 0;
         mContainerId = 0;
         mTag = null;
@@ -2034,9 +2075,9 @@
             writer.print(prefix); writer.print("mFragmentManager=");
             writer.println(mFragmentManager);
         }
-        if (mActivity != null) {
-            writer.print(prefix); writer.print("mActivity=");
-            writer.println(mActivity);
+        if (mHost != null) {
+            writer.print(prefix); writer.print("mHost=");
+            writer.println(mHost);
         }
         if (mParentFragment != null) {
             writer.print(prefix); writer.print("mParentFragment=");
@@ -2094,10 +2135,10 @@
 
     void instantiateChildFragmentManager() {
         mChildFragmentManager = new FragmentManagerImpl();
-        mChildFragmentManager.attachActivity(mActivity, new FragmentContainer() {
+        mChildFragmentManager.attachController(mHost, new FragmentContainer() {
             @Override
             @Nullable
-            public View findViewById(int id) {
+            public View onFindViewById(int id) {
                 if (mView == null) {
                     throw new IllegalStateException("Fragment does not have a view");
                 }
@@ -2105,7 +2146,7 @@
             }
 
             @Override
-            public boolean hasView() {
+            public boolean onHasView() {
                 return (mView != null);
             }
         }, this);
@@ -2319,13 +2360,13 @@
             mLoadersStarted = false;
             if (!mCheckedForLoaderManager) {
                 mCheckedForLoaderManager = true;
-                mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, false);
+                mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
             }
             if (mLoaderManager != null) {
-                if (mActivity == null || !mActivity.mChangingConfigurations) {
-                    mLoaderManager.doStop();
-                } else {
+                if (mRetaining) {
                     mLoaderManager.doRetain();
+                } else {
+                    mLoaderManager.doStop();
                 }
             }
         }
diff --git a/core/java/android/app/FragmentContainer.java b/core/java/android/app/FragmentContainer.java
new file mode 100644
index 0000000..b2e0300
--- /dev/null
+++ b/core/java/android/app/FragmentContainer.java
@@ -0,0 +1,38 @@
+/*
+ * 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.app;
+
+import android.annotation.IdRes;
+import android.annotation.Nullable;
+import android.view.View;
+
+/**
+ * Callbacks to a {@link Fragment}'s container.
+ */
+public abstract class FragmentContainer {
+    /**
+     * Return the view with the given resource ID. May return {@code null} if the
+     * view is not a child of this container.
+     */
+    @Nullable
+    public abstract View onFindViewById(@IdRes int id);
+
+    /**
+     * Return {@code true} if the container holds any view.
+     */
+    public abstract boolean onHasView();
+}
diff --git a/core/java/android/app/FragmentController.java b/core/java/android/app/FragmentController.java
new file mode 100644
index 0000000..28dadfa
--- /dev/null
+++ b/core/java/android/app/FragmentController.java
@@ -0,0 +1,384 @@
+/*
+ * 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.app;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.util.ArrayMap;
+import android.util.AttributeSet;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.List;
+
+/**
+ * Provides integration points with a {@link FragmentManager} for a fragment host.
+ * <p>
+ * It is the responsibility of the host to take care of the Fragment's lifecycle.
+ * The methods provided by {@link FragmentController} are for that purpose.
+ */
+public class FragmentController {
+    private final FragmentHostCallback<?> mHost;
+
+    /**
+     * Returns a {@link FragmentController}.
+     */
+    public static final FragmentController createController(FragmentHostCallback<?> callbacks) {
+        return new FragmentController(callbacks);
+    }
+
+    private FragmentController(FragmentHostCallback<?> callbacks) {
+        mHost = callbacks;
+    }
+
+    /**
+     * Returns a {@link FragmentManager} for this controller.
+     */
+    public FragmentManager getFragmentManager() {
+        return mHost.getFragmentManagerImpl();
+    }
+
+    /**
+     * Returns a {@link LoaderManager}.
+     */
+    public LoaderManager getLoaderManager() {
+        return mHost.getLoaderManagerImpl();
+    }
+
+    /**
+     * Returns a fragment with the given identifier.
+     */
+    @Nullable
+    public Fragment findFragmentByWho(String who) {
+        return mHost.mFragmentManager.findFragmentByWho(who);
+    }
+
+    /**
+     * Attaches the host to the FragmentManager for this controller. The host must be
+     * attached before the FragmentManager can be used to manage Fragments.
+     * */
+    public void attachHost(Fragment parent) {
+        mHost.mFragmentManager.attachController(
+                mHost, mHost /*container*/, parent);
+    }
+
+    /**
+     * Instantiates a Fragment's view.
+     *
+     * @param parent The parent that the created view will be placed
+     * in; <em>note that this may be null</em>.
+     * @param name Tag name to be inflated.
+     * @param context The context the view is being created in.
+     * @param attrs Inflation attributes as specified in XML file.
+     *
+     * @return view the newly created view
+     */
+    public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
+        return mHost.mFragmentManager.onCreateView(parent, name, context, attrs);
+    }
+
+    /**
+     * Marks the fragment state as unsaved. This allows for "state loss" detection.
+     */
+    public void noteStateNotSaved() {
+        mHost.mFragmentManager.noteStateNotSaved();
+    }
+
+    /**
+     * Saves the state for all Fragments.
+     */
+    public Parcelable saveAllState() {
+        return mHost.mFragmentManager.saveAllState();
+    }
+
+    /**
+     * Restores the saved state for all Fragments. The given Fragment list are Fragment
+     * instances retained across configuration changes.
+     *
+     * @see #retainNonConfig()
+     */
+    public void restoreAllState(Parcelable state, List<Fragment> nonConfigList) {
+        mHost.mFragmentManager.restoreAllState(state, nonConfigList);
+    }
+
+    /**
+     * Returns a list of Fragments that have opted to retain their instance across
+     * configuration changes.
+     */
+    public List<Fragment> retainNonConfig() {
+        return mHost.mFragmentManager.retainNonConfig();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the create state.
+     * <p>Call when Fragments should be created.
+     *
+     * @see Fragment#onCreate(Bundle)
+     */
+    public void dispatchCreate() {
+        mHost.mFragmentManager.dispatchCreate();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the activity created state.
+     * <p>Call when Fragments should be informed their host has been created.
+     *
+     * @see Fragment#onActivityCreated(Bundle)
+     */
+    public void dispatchActivityCreated() {
+        mHost.mFragmentManager.dispatchActivityCreated();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the start state.
+     * <p>Call when Fragments should be started.
+     *
+     * @see Fragment#onStart()
+     */
+    public void dispatchStart() {
+        mHost.mFragmentManager.dispatchStart();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the resume state.
+     * <p>Call when Fragments should be resumed.
+     *
+     * @see Fragment#onResume()
+     */
+    public void dispatchResume() {
+        mHost.mFragmentManager.dispatchResume();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the pause state.
+     * <p>Call when Fragments should be paused.
+     *
+     * @see Fragment#onPause()
+     */
+    public void dispatchPause() {
+        mHost.mFragmentManager.dispatchPause();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the stop state.
+     * <p>Call when Fragments should be stopped.
+     *
+     * @see Fragment#onStop()
+     */
+    public void dispatchStop() {
+        mHost.mFragmentManager.dispatchStop();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the destroy view state.
+     * <p>Call when the Fragment's views should be destroyed.
+     *
+     * @see Fragment#onDestroyView()
+     */
+    public void dispatchDestroyView() {
+        mHost.mFragmentManager.dispatchDestroyView();
+    }
+
+    /**
+     * Moves all Fragments managed by the controller's FragmentManager
+     * into the destroy state.
+     * <p>Call when Fragments should be destroyed.
+     *
+     * @see Fragment#onDestroy()
+     */
+    public void dispatchDestroy() {
+        mHost.mFragmentManager.dispatchDestroy();
+    }
+
+    /**
+     * Lets all Fragments managed by the controller's FragmentManager
+     * know a configuration change occurred.
+     * <p>Call when there is a configuration change.
+     *
+     * @see Fragment#onConfigurationChanged(Configuration)
+     */
+    public void dispatchConfigurationChanged(Configuration newConfig) {
+        mHost.mFragmentManager.dispatchConfigurationChanged(newConfig);
+    }
+
+    /**
+     * Lets all Fragments managed by the controller's FragmentManager
+     * know the device is in a low memory condition.
+     * <p>Call when the device is low on memory and Fragment's should trim
+     * their memory usage.
+     *
+     * @see Fragment#onLowMemory()
+     */
+    public void dispatchLowMemory() {
+        mHost.mFragmentManager.dispatchLowMemory();
+    }
+
+    /**
+     * Lets all Fragments managed by the controller's FragmentManager
+     * know they should trim their memory usage.
+     * <p>Call when the Fragment can release allocated memory [such as if
+     * the Fragment is in the background].
+     *
+     * @see Fragment#onTrimMemory(int)
+     */
+    public void dispatchTrimMemory(int level) {
+        mHost.mFragmentManager.dispatchTrimMemory(level);
+    }
+
+    /**
+     * Lets all Fragments managed by the controller's FragmentManager
+     * know they should create an options menu.
+     * <p>Call when the Fragment should create an options menu.
+     *
+     * @return {@code true} if the options menu contains items to display
+     * @see Fragment#onCreateOptionsMenu(Menu, MenuInflater)
+     */
+    public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        return mHost.mFragmentManager.dispatchCreateOptionsMenu(menu, inflater);
+    }
+
+    /**
+     * Lets all Fragments managed by the controller's FragmentManager
+     * know they should prepare their options menu for display.
+     * <p>Call immediately before displaying the Fragment's options menu.
+     *
+     * @return {@code true} if the options menu contains items to display
+     * @see Fragment#onPrepareOptionsMenu(Menu)
+     */
+    public boolean dispatchPrepareOptionsMenu(Menu menu) {
+        return mHost.mFragmentManager.dispatchPrepareOptionsMenu(menu);
+    }
+
+    /**
+     * Sends an option item selection event to the Fragments managed by the
+     * controller's FragmentManager. Once the event has been consumed,
+     * no additional handling will be performed.
+     * <p>Call immediately after an options menu item has been selected
+     *
+     * @return {@code true} if the options menu selection event was consumed
+     * @see Fragment#onOptionsItemSelected(MenuItem)
+     */
+    public boolean dispatchOptionsItemSelected(MenuItem item) {
+        return mHost.mFragmentManager.dispatchOptionsItemSelected(item);
+    }
+
+    /**
+     * Sends a context item selection event to the Fragments managed by the
+     * controller's FragmentManager. Once the event has been consumed,
+     * no additional handling will be performed.
+     * <p>Call immediately after an options menu item has been selected
+     *
+     * @return {@code true} if the context menu selection event was consumed
+     * @see Fragment#onContextItemSelected(MenuItem)
+     */
+    public boolean dispatchContextItemSelected(MenuItem item) {
+        return mHost.mFragmentManager.dispatchContextItemSelected(item);
+    }
+
+    /**
+     * Lets all Fragments managed by the controller's FragmentManager
+     * know their options menu has closed.
+     * <p>Call immediately after closing the Fragment's options menu.
+     *
+     * @see Fragment#onOptionsMenuClosed(Menu)
+     */
+    public void dispatchOptionsMenuClosed(Menu menu) {
+        mHost.mFragmentManager.dispatchOptionsMenuClosed(menu);
+    }
+
+    /**
+     * Execute any pending actions for the Fragments managed by the
+     * controller's FragmentManager.
+     * <p>Call when queued actions can be performed [eg when the
+     * Fragment moves into a start or resume state].
+     * @return {@code true} if queued actions were performed
+     */
+    public boolean execPendingActions() {
+        return mHost.mFragmentManager.execPendingActions();
+    }
+
+    /**
+     * Starts the loaders.
+     */
+    public void doLoaderStart() {
+        mHost.doLoaderStart();
+    }
+
+    /**
+     * Stops the loaders, optionally retaining their state. This is useful for keeping the
+     * loader state across configuration changes.
+     *
+     * @param retain When {@code true}, the loaders aren't stopped, but, their instances
+     * are retained in a started state
+     */
+    public void doLoaderStop(boolean retain) {
+        mHost.doLoaderStop(retain);
+    }
+
+    /**
+     * Destroys the loaders and, if their state is not being retained, removes them.
+     */
+    public void doLoaderDestroy() {
+        mHost.doLoaderDestroy();
+    }
+
+    /**
+     * Lets the loaders know the host is ready to receive notifications.
+     */
+    public void reportLoaderStart() {
+        mHost.reportLoaderStart();
+    }
+
+    /**
+     * Returns a list of LoaderManagers that have opted to retain their instance across
+     * configuration changes.
+     */
+    public ArrayMap<String, LoaderManager> retainLoaderNonConfig() {
+        return mHost.retainLoaderNonConfig();
+    }
+
+    /**
+     * Restores the saved state for all LoaderManagers. The given LoaderManager list are
+     * LoaderManager instances retained across configuration changes.
+     *
+     * @see #retainLoaderNonConfig()
+     */
+    public void restoreLoaderNonConfig(ArrayMap<String, LoaderManager> loaderManagers) {
+        mHost.restoreLoaderNonConfig(loaderManagers);
+    }
+
+    /**
+     * Dumps the current state of the loaders.
+     */
+    public void dumpLoaders(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+        mHost.dumpLoaders(prefix, fd, writer, args);
+    }
+}
diff --git a/core/java/android/app/FragmentHostCallback.java b/core/java/android/app/FragmentHostCallback.java
new file mode 100644
index 0000000..3e753f0
--- /dev/null
+++ b/core/java/android/app/FragmentHostCallback.java
@@ -0,0 +1,314 @@
+/*
+ * 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.app;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.ArrayMap;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+/**
+ * Integration points with the Fragment host.
+ * <p>
+ * Fragments may be hosted by any object; such as an {@link Activity}. In order to
+ * host fragments, implement {@link FragmentHostCallback}, overriding the methods
+ * applicable to the host.
+ */
+public abstract class FragmentHostCallback<E> extends FragmentContainer {
+    private final Activity mActivity;
+    final Context mContext;
+    private final Handler mHandler;
+    final int mWindowAnimations;
+    final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();
+    private ArrayMap<String, LoaderManager> mAllLoaderManagers;
+    private LoaderManagerImpl mLoaderManager;
+    private boolean mCheckedForLoaderManager;
+    private boolean mLoadersStarted;
+
+    public FragmentHostCallback(Context context, Handler handler, int windowAnimations) {
+        this(null /*activity*/, context, handler, windowAnimations);
+    }
+
+    FragmentHostCallback(Activity activity) {
+        this(activity, activity /*context*/, activity.mHandler, 0 /*windowAnimations*/);
+    }
+
+    FragmentHostCallback(Activity activity, Context context, Handler handler,
+            int windowAnimations) {
+        mActivity = activity;
+        mContext = context;
+        mHandler = handler;
+        mWindowAnimations = windowAnimations;
+    }
+
+    /**
+     * Print internal state into the given stream.
+     *
+     * @param prefix Desired prefix to prepend at each line of output.
+     * @param fd The raw file descriptor that the dump is being sent to.
+     * @param writer The PrintWriter to which you should dump your state. This will be closed
+     *                  for you after you return.
+     * @param args additional arguments to the dump request.
+     */
+    public void onDump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+    }
+
+    /**
+     * Return {@code true} if the fragment's state needs to be saved.
+     */
+    public boolean onShouldSaveFragmentState(Fragment fragment) {
+        return true;
+    }
+
+    /**
+     * Return a {@link LayoutInflater}.
+     * See {@link Activity#getLayoutInflater()}.
+     */
+    public LayoutInflater onGetLayoutInflater() {
+        return (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+    }
+
+    /**
+     * Return {@code true} if the FragmentManager's LayoutInflaterFactory should be used.
+     */
+    public boolean onUseFragmentManagerInflaterFactory() {
+        return false;
+    }
+
+    /**
+     * Return the object that's currently hosting the fragment. If a {@link Fragment}
+     * is hosted by a {@link Activity}, the object returned here should be the same
+     * object returned from {@link Fragment#getActivity()}.
+     */
+    @Nullable
+    public abstract E onGetHost();
+
+    /**
+     * Invalidates the activity's options menu.
+     * See {@link Activity#invalidateOptionsMenu()}
+     */
+    public void onInvalidateOptionsMenu() {
+    }
+
+    /**
+     * Starts a new {@link Activity} from the given fragment.
+     * See {@link Activity#startActivityForResult(Intent, int)}.
+     */
+    public void onStartActivityFromFragment(Fragment fragment, Intent intent, int requestCode,
+            Bundle options) {
+        if (requestCode != -1) {
+            throw new IllegalStateException(
+                    "Starting activity with a requestCode requires a FragmentActivity host");
+        }
+        mContext.startActivity(intent);
+    }
+
+    /**
+     * Return {@code true} if there are window animations.
+     */
+    public boolean onHasWindowAnimations() {
+        return true;
+    }
+
+    /**
+     * Return the window animations.
+     */
+    public int onGetWindowAnimations() {
+        return mWindowAnimations;
+    }
+
+    /**
+     * Called when a {@link Fragment} is being attached to this host, immediately
+     * after the call to its {@link Fragment#onAttach(Context)} method and before
+     * {@link Fragment#onCreate(Bundle)}.
+     */
+    public void onAttachFragment(Fragment fragment) {
+    }
+
+    @Nullable
+    @Override
+    public View onFindViewById(int id) {
+        return null;
+    }
+
+    @Override
+    public boolean onHasView() {
+        return true;
+    }
+
+    Activity getActivity() {
+        return mActivity;
+    }
+
+    Context getContext() {
+        return mContext;
+    }
+
+    Handler getHandler() {
+        return mHandler;
+    }
+
+    FragmentManagerImpl getFragmentManagerImpl() {
+        return mFragmentManager;
+    }
+
+    LoaderManagerImpl getLoaderManagerImpl() {
+        if (mLoaderManager != null) {
+            return mLoaderManager;
+        }
+        mCheckedForLoaderManager = true;
+        mLoaderManager = getLoaderManager("(root)", mLoadersStarted, true /*create*/);
+        return mLoaderManager;
+    }
+
+    void inactivateFragment(String who) {
+        //Log.v(TAG, "invalidateSupportFragment: who=" + who);
+        if (mAllLoaderManagers != null) {
+            LoaderManagerImpl lm = (LoaderManagerImpl) mAllLoaderManagers.get(who);
+            if (lm != null && !lm.mRetaining) {
+                lm.doDestroy();
+                mAllLoaderManagers.remove(who);
+            }
+        }
+    }
+
+    void doLoaderStart() {
+        if (mLoadersStarted) {
+            return;
+        }
+        mLoadersStarted = true;
+
+        if (mLoaderManager != null) {
+            mLoaderManager.doStart();
+        } else if (!mCheckedForLoaderManager) {
+            mLoaderManager = getLoaderManager("(root)", mLoadersStarted, false);
+        }
+        mCheckedForLoaderManager = true;
+    }
+
+    void doLoaderStop(boolean retain) {
+        if (mLoaderManager == null) {
+            return;
+        }
+
+        if (!mLoadersStarted) {
+            return;
+        }
+        mLoadersStarted = false;
+
+        if (retain) {
+            mLoaderManager.doRetain();
+        } else {
+            mLoaderManager.doStop();
+        }
+    }
+
+    void doLoaderRetain() {
+        if (mLoaderManager == null) {
+            return;
+        }
+        mLoaderManager.doRetain();
+    }
+
+    void doLoaderDestroy() {
+        if (mLoaderManager == null) {
+            return;
+        }
+        mLoaderManager.doDestroy();
+    }
+
+    void reportLoaderStart() {
+        if (mAllLoaderManagers != null) {
+            final int N = mAllLoaderManagers.size();
+            LoaderManagerImpl loaders[] = new LoaderManagerImpl[N];
+            for (int i=N-1; i>=0; i--) {
+                loaders[i] = (LoaderManagerImpl) mAllLoaderManagers.valueAt(i);
+            }
+            for (int i=0; i<N; i++) {
+                LoaderManagerImpl lm = loaders[i];
+                lm.finishRetain();
+                lm.doReportStart();
+            }
+        }
+    }
+
+    LoaderManagerImpl getLoaderManager(String who, boolean started, boolean create) {
+        if (mAllLoaderManagers == null) {
+            mAllLoaderManagers = new ArrayMap<String, LoaderManager>();
+        }
+        LoaderManagerImpl lm = (LoaderManagerImpl) mAllLoaderManagers.get(who);
+        if (lm == null) {
+            if (create) {
+                lm = new LoaderManagerImpl(who, this, started);
+                mAllLoaderManagers.put(who, lm);
+            }
+        } else {
+            lm.updateHostController(this);
+        }
+        return lm;
+    }
+
+    ArrayMap<String, LoaderManager> retainLoaderNonConfig() {
+        boolean retainLoaders = false;
+        if (mAllLoaderManagers != null) {
+            // prune out any loader managers that were already stopped and so
+            // have nothing useful to retain.
+            final int N = mAllLoaderManagers.size();
+            LoaderManagerImpl loaders[] = new LoaderManagerImpl[N];
+            for (int i=N-1; i>=0; i--) {
+                loaders[i] = (LoaderManagerImpl) mAllLoaderManagers.valueAt(i);
+            }
+            for (int i=0; i<N; i++) {
+                LoaderManagerImpl lm = loaders[i];
+                if (lm.mRetaining) {
+                    retainLoaders = true;
+                } else {
+                    lm.doDestroy();
+                    mAllLoaderManagers.remove(lm.mWho);
+                }
+            }
+        }
+
+        if (retainLoaders) {
+            return mAllLoaderManagers;
+        }
+        return null;
+    }
+
+    void restoreLoaderNonConfig(ArrayMap<String, LoaderManager> loaderManagers) {
+        mAllLoaderManagers = loaderManagers;
+    }
+
+    void dumpLoaders(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+        writer.print(prefix); writer.print("mLoadersStarted=");
+        writer.println(mLoadersStarted);
+        if (mLoaderManager != null) {
+            writer.print(prefix); writer.print("Loader Manager ");
+            writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager)));
+            writer.println(":");
+            mLoaderManager.dump(prefix + "  ", fd, writer, args);
+        }
+    }
+}
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 975b20d..6b5239d 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -19,9 +19,7 @@
 import android.animation.Animator;
 import android.animation.AnimatorInflater;
 import android.animation.AnimatorListenerAdapter;
-import android.annotation.Nullable;
 import android.content.Context;
-import android.annotation.IdRes;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.os.Bundle;
@@ -48,6 +46,7 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * Interface for interacting with {@link Fragment} objects inside of an
@@ -393,15 +392,6 @@
 }
 
 /**
- * Callbacks from FragmentManagerImpl to its container.
- */
-interface FragmentContainer {
-    @Nullable
-    public View findViewById(@IdRes int id);
-    public boolean hasView();
-}
-
-/**
  * Container for fragments associated with an activity.
  */
 final class FragmentManagerImpl extends FragmentManager implements LayoutInflater.Factory2 {
@@ -430,7 +420,8 @@
     ArrayList<OnBackStackChangedListener> mBackStackChangeListeners;
 
     int mCurState = Fragment.INITIALIZING;
-    Activity mActivity;
+    FragmentHostCallback<?> mHost;
+    FragmentController mController;
     FragmentContainer mContainer;
     Fragment mParent;
     
@@ -455,10 +446,10 @@
         Log.e(TAG, ex.getMessage());
         LogWriter logw = new LogWriter(Log.ERROR, TAG);
         PrintWriter pw = new FastPrintWriter(logw, false, 1024);
-        if (mActivity != null) {
+        if (mHost != null) {
             Log.e(TAG, "Activity state:");
             try {
-                mActivity.dump("  ", null, pw, new String[] { });
+                mHost.onDump("  ", null, pw, new String[] { });
             } catch (Exception e) {
                 pw.flush();
                 Log.e(TAG, "Failed dumping state", e);
@@ -490,7 +481,7 @@
     public void popBackStack() {
         enqueueAction(new Runnable() {
             @Override public void run() {
-                popBackStackState(mActivity.mHandler, null, -1, 0);
+                popBackStackState(mHost.getHandler(), null, -1, 0);
             }
         }, false);
     }
@@ -499,14 +490,14 @@
     public boolean popBackStackImmediate() {
         checkStateLoss();
         executePendingTransactions();
-        return popBackStackState(mActivity.mHandler, null, -1, 0);
+        return popBackStackState(mHost.getHandler(), null, -1, 0);
     }
 
     @Override
     public void popBackStack(final String name, final int flags) {
         enqueueAction(new Runnable() {
             @Override public void run() {
-                popBackStackState(mActivity.mHandler, name, -1, flags);
+                popBackStackState(mHost.getHandler(), name, -1, flags);
             }
         }, false);
     }
@@ -515,7 +506,7 @@
     public boolean popBackStackImmediate(String name, int flags) {
         checkStateLoss();
         executePendingTransactions();
-        return popBackStackState(mActivity.mHandler, name, -1, flags);
+        return popBackStackState(mHost.getHandler(), name, -1, flags);
     }
 
     @Override
@@ -525,7 +516,7 @@
         }
         enqueueAction(new Runnable() {
             @Override public void run() {
-                popBackStackState(mActivity.mHandler, null, id, flags);
+                popBackStackState(mHost.getHandler(), null, id, flags);
             }
         }, false);
     }
@@ -537,7 +528,7 @@
         if (id < 0) {
             throw new IllegalArgumentException("Bad id: " + id);
         }
-        return popBackStackState(mActivity.mHandler, null, id, flags);
+        return popBackStackState(mHost.getHandler(), null, id, flags);
     }
 
     @Override
@@ -619,7 +610,7 @@
         if (mParent != null) {
             DebugUtils.buildShortClassTag(mParent, sb);
         } else {
-            DebugUtils.buildShortClassTag(mActivity, sb);
+            DebugUtils.buildShortClassTag(mHost, sb);
         }
         sb.append("}}");
         return sb.toString();
@@ -716,7 +707,7 @@
         }
 
         writer.print(prefix); writer.println("FragmentManager misc state:");
-        writer.print(prefix); writer.print("  mActivity="); writer.println(mActivity);
+        writer.print(prefix); writer.print("  mHost="); writer.println(mHost);
         writer.print(prefix); writer.print("  mContainer="); writer.println(mContainer);
         if (mParent != null) {
             writer.print(prefix); writer.print("  mParent="); writer.println(mParent);
@@ -747,7 +738,7 @@
         }
         
         if (fragment.mNextAnim != 0) {
-            Animator anim = AnimatorInflater.loadAnimator(mActivity, fragment.mNextAnim);
+            Animator anim = AnimatorInflater.loadAnimator(mHost.getContext(), fragment.mNextAnim);
             if (anim != null) {
                 return anim;
             }
@@ -762,14 +753,14 @@
             return null;
         }
         
-        if (transitionStyle == 0 && mActivity.getWindow() != null) {
-            transitionStyle = mActivity.getWindow().getAttributes().windowAnimations;
+        if (transitionStyle == 0 && mHost.onHasWindowAnimations()) {
+            transitionStyle = mHost.onGetWindowAnimations();
         }
         if (transitionStyle == 0) {
             return null;
         }
         
-        TypedArray attrs = mActivity.obtainStyledAttributes(transitionStyle,
+        TypedArray attrs = mHost.getContext().obtainStyledAttributes(transitionStyle,
                 com.android.internal.R.styleable.FragmentAnimation);
         int anim = attrs.getResourceId(styleIndex, 0);
         attrs.recycle();
@@ -778,7 +769,7 @@
             return null;
         }
         
-        return AnimatorInflater.loadAnimator(mActivity, anim);
+        return AnimatorInflater.loadAnimator(mHost.getContext(), anim);
     }
     
     public void performPendingDeferredStart(Fragment f) {
@@ -848,18 +839,18 @@
                             }
                         }
                     }
-                    f.mActivity = mActivity;
+                    f.mHost = mHost;
                     f.mParentFragment = mParent;
                     f.mFragmentManager = mParent != null
-                            ? mParent.mChildFragmentManager : mActivity.mFragments;
+                            ? mParent.mChildFragmentManager : mHost.getFragmentManagerImpl();
                     f.mCalled = false;
-                    f.onAttach(mActivity);
+                    f.onAttach(mHost.getContext());
                     if (!f.mCalled) {
                         throw new SuperNotCalledException("Fragment " + f
                                 + " did not call through to super.onAttach()");
                     }
                     if (f.mParentFragment == null) {
-                        mActivity.onAttachFragment(f);
+                        mHost.onAttachFragment(f);
                     }
 
                     if (!f.mRetaining) {
@@ -884,7 +875,7 @@
                         if (!f.mFromLayout) {
                             ViewGroup container = null;
                             if (f.mContainerId != 0) {
-                                container = (ViewGroup)mContainer.findViewById(f.mContainerId);
+                                container = (ViewGroup)mContainer.onFindViewById(f.mContainerId);
                                 if (container == null && !f.mRestored) {
                                     throwException(new IllegalArgumentException(
                                             "No view found for id 0x"
@@ -954,7 +945,7 @@
                         if (f.mView != null) {
                             // Need to save the current view state if not
                             // done already.
-                            if (!mActivity.isFinishing() && f.mSavedViewState == null) {
+                            if (!mHost.onShouldSaveFragmentState(f) && f.mSavedViewState == null) {
                                 saveFragmentViewState(f);
                             }
                         }
@@ -1030,7 +1021,7 @@
                                 if (!f.mRetaining) {
                                     makeInactive(f);
                                 } else {
-                                    f.mActivity = null;
+                                    f.mHost = null;
                                     f.mParentFragment = null;
                                     f.mFragmentManager = null;
                                     f.mChildFragmentManager = null;
@@ -1053,7 +1044,7 @@
     }
     
     void moveToState(int newState, int transit, int transitStyle, boolean always) {
-        if (mActivity == null && newState != Fragment.INITIALIZING) {
+        if (mHost == null && newState != Fragment.INITIALIZING) {
             throw new IllegalStateException("No activity");
         }
 
@@ -1078,8 +1069,8 @@
                 startPendingDeferredFragments();
             }
 
-            if (mNeedMenuInvalidate && mActivity != null && mCurState == Fragment.RESUMED) {
-                mActivity.invalidateOptionsMenu();
+            if (mNeedMenuInvalidate && mHost != null && mCurState == Fragment.RESUMED) {
+                mHost.onInvalidateOptionsMenu();
                 mNeedMenuInvalidate = false;
             }
         }
@@ -1126,7 +1117,7 @@
             mAvailIndices = new ArrayList<Integer>();
         }
         mAvailIndices.add(f.mIndex);
-        mActivity.invalidateFragment(f.mWho);
+        mHost.inactivateFragment(f.mWho);
         f.initState();
     }
     
@@ -1349,7 +1340,7 @@
             checkStateLoss();
         }
         synchronized (this) {
-            if (mDestroyed || mActivity == null) {
+            if (mDestroyed || mHost == null) {
                 throw new IllegalStateException("Activity has been destroyed");
             }
             if (mPendingActions == null) {
@@ -1357,8 +1348,8 @@
             }
             mPendingActions.add(action);
             if (mPendingActions.size() == 1) {
-                mActivity.mHandler.removeCallbacks(mExecCommit);
-                mActivity.mHandler.post(mExecCommit);
+                mHost.getHandler().removeCallbacks(mExecCommit);
+                mHost.getHandler().post(mExecCommit);
             }
         }
     }
@@ -1427,7 +1418,7 @@
             throw new IllegalStateException("Recursive entry to executePendingTransactions");
         }
         
-        if (Looper.myLooper() != mActivity.mHandler.getLooper()) {
+        if (Looper.myLooper() != mHost.getHandler().getLooper()) {
             throw new IllegalStateException("Must be called from main thread of process");
         }
 
@@ -1447,7 +1438,7 @@
                 }
                 mPendingActions.toArray(mTmpActions);
                 mPendingActions.clear();
-                mActivity.mHandler.removeCallbacks(mExecCommit);
+                mHost.getHandler().removeCallbacks(mExecCommit);
             }
             
             mExecutingActions = true;
@@ -1737,7 +1728,7 @@
         return fms;
     }
     
-    void restoreAllState(Parcelable state, ArrayList<Fragment> nonConfig) {
+    void restoreAllState(Parcelable state, List<Fragment> nonConfig) {
         // If there is no saved state at all, then there can not be
         // any nonConfig fragments either, so that is that.
         if (state == null) return;
@@ -1758,7 +1749,7 @@
                 f.mAdded = false;
                 f.mTarget = null;
                 if (fs.mSavedFragmentState != null) {
-                    fs.mSavedFragmentState.setClassLoader(mActivity.getClassLoader());
+                    fs.mSavedFragmentState.setClassLoader(mHost.getContext().getClassLoader());
                     f.mSavedViewState = fs.mSavedFragmentState.getSparseParcelableArray(
                             FragmentManagerImpl.VIEW_STATE_TAG);
                     f.mSavedFragmentState = fs.mSavedFragmentState;
@@ -1775,7 +1766,7 @@
         for (int i=0; i<fms.mActive.length; i++) {
             FragmentState fs = fms.mActive[i];
             if (fs != null) {
-                Fragment f = fs.instantiate(mActivity, mParent);
+                Fragment f = fs.instantiate(mHost, mParent);
                 if (DEBUG) Log.v(TAG, "restoreAllState: active #" + i + ": " + f);
                 mActive.add(f);
                 // Now that the fragment is instantiated (or came from being
@@ -1851,9 +1842,10 @@
         }
     }
     
-    public void attachActivity(Activity activity, FragmentContainer container, Fragment parent) {
-        if (mActivity != null) throw new IllegalStateException("Already attached");
-        mActivity = activity;
+    public void attachController(FragmentHostCallback<?> host, FragmentContainer container,
+            Fragment parent) {
+        if (mHost != null) throw new IllegalStateException("Already attached");
+        mHost = host;
         mContainer = container;
         mParent = parent;
     }
@@ -1898,7 +1890,7 @@
         mDestroyed = true;
         execPendingActions();
         moveToState(Fragment.INITIALIZING, false);
-        mActivity = null;
+        mHost = null;
         mContainer = null;
         mParent = null;
     }
@@ -2024,8 +2016,8 @@
 
     @Override
     public void invalidateOptionsMenu() {
-        if (mActivity != null && mCurState == Fragment.RESUMED) {
-            mActivity.invalidateOptionsMenu();
+        if (mHost != null && mCurState == Fragment.RESUMED) {
+            mHost.onInvalidateOptionsMenu();
         } else {
             mNeedMenuInvalidate = true;
         }
@@ -2115,7 +2107,7 @@
             fragment.mTag = tag;
             fragment.mInLayout = true;
             fragment.mFragmentManager = this;
-            fragment.onInflate(mActivity, attrs, fragment.mSavedFragmentState);
+            fragment.onInflate(mHost.getContext(), attrs, fragment.mSavedFragmentState);
             addFragment(fragment, true);
         } else if (fragment.mInLayout) {
             // A fragment already exists and it is not one we restored from
@@ -2132,7 +2124,7 @@
             // from last saved state), then give it the attributes to
             // initialize itself.
             if (!fragment.mRetaining) {
-                fragment.onInflate(mActivity, attrs, fragment.mSavedFragmentState);
+                fragment.onInflate(mHost.getContext(), attrs, fragment.mSavedFragmentState);
             }
         }
 
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 3fb82f6..185578f 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -131,7 +131,7 @@
     void updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info) throws RemoteException;
     void scheduleTrimMemory(int level) throws RemoteException;
     void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo,
-            boolean dumpDalvik, String[] args) throws RemoteException;
+            boolean dumpDalvik, boolean dumpSummaryOnly, String[] args) throws RemoteException;
     void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException;
     void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException;
     void unstableProviderDied(IBinder provider) throws RemoteException;
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index ac8d5d8..63ff005 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -75,7 +75,7 @@
     void requestInterruptionFilterFromListener(in INotificationListener token, int interruptionFilter);
     int getInterruptionFilterFromListener(in INotificationListener token);
     void setOnNotificationPostedTrimFromListener(in INotificationListener token, int trim);
-    NotificationManager.Policy.Token getPolicyTokenFromListener(in INotificationListener listener);
+    void setInterruptionFilter(String pkg, int interruptionFilter);
 
     ComponentName getEffectsSuppressor();
     boolean matchesCallFilter(in Bundle extras);
@@ -87,10 +87,13 @@
     oneway void setZenMode(int mode, in Uri conditionId, String reason);
     oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions);
     oneway void requestZenModeConditions(in IConditionListener callback, int relevance);
-    oneway void requestNotificationPolicyToken(String pkg, in INotificationManagerCallback callback);
-    boolean isNotificationPolicyTokenValid(String pkg, in NotificationManager.Policy.Token token);
-    NotificationManager.Policy getNotificationPolicy(in NotificationManager.Policy.Token token);
-    void setNotificationPolicy(in NotificationManager.Policy.Token token, in NotificationManager.Policy policy);
+    oneway void requestNotificationPolicyAccess(String pkg, in INotificationManagerCallback callback);
+    boolean isNotificationPolicyAccessGranted(String pkg);
+    NotificationManager.Policy getNotificationPolicy(String pkg);
+    void setNotificationPolicy(String pkg, in NotificationManager.Policy policy);
+    String[] getPackagesRequestingNotificationPolicyAccess();
+    boolean isNotificationPolicyAccessGrantedForPackage(String pkg);
+    void setNotificationPolicyAccessGranted(String pkg, boolean granted);
 
     byte[] getBackupPayload(int user);
     void applyRestore(in byte[] payload, int user);
diff --git a/core/java/android/app/INotificationManagerCallback.aidl b/core/java/android/app/INotificationManagerCallback.aidl
index b9414ca..9929745 100644
--- a/core/java/android/app/INotificationManagerCallback.aidl
+++ b/core/java/android/app/INotificationManagerCallback.aidl
@@ -20,5 +20,5 @@
 
 /** @hide */
 oneway interface INotificationManagerCallback {
-    void onPolicyToken(in NotificationManager.Policy.Token token);
+    void onPolicyRequestResult(boolean granted);
 }
diff --git a/core/java/android/app/IntentService.java b/core/java/android/app/IntentService.java
index 96767ae..3cda973 100644
--- a/core/java/android/app/IntentService.java
+++ b/core/java/android/app/IntentService.java
@@ -16,6 +16,7 @@
 
 package android.app;
 
+import android.annotation.WorkerThread;
 import android.content.Intent;
 import android.os.Handler;
 import android.os.HandlerThread;
@@ -158,5 +159,6 @@
      * @param intent The value passed to {@link
      *               android.content.Context#startService(Intent)}.
      */
+    @WorkerThread
     protected abstract void onHandleIntent(Intent intent);
 }
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index b13b24a..f0e35c9 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -214,12 +214,12 @@
 
     final String mWho;
 
-    Activity mActivity;
     boolean mStarted;
     boolean mRetaining;
     boolean mRetainingStarted;
     
     boolean mCreatingLoader;
+    private FragmentHostCallback mHost;
 
     final class LoaderInfo implements Loader.OnLoadCompleteListener<Object>,
             Loader.OnLoadCanceledListener<Object> {
@@ -356,15 +356,15 @@
             if (mCallbacks != null && mLoader != null && mHaveData && needReset) {
                 if (DEBUG) Log.v(TAG, "  Reseting: " + this);
                 String lastBecause = null;
-                if (mActivity != null) {
-                    lastBecause = mActivity.mFragments.mNoTransactionsBecause;
-                    mActivity.mFragments.mNoTransactionsBecause = "onLoaderReset";
+                if (mHost != null) {
+                    lastBecause = mHost.mFragmentManager.mNoTransactionsBecause;
+                    mHost.mFragmentManager.mNoTransactionsBecause = "onLoaderReset";
                 }
                 try {
                     mCallbacks.onLoaderReset(mLoader);
                 } finally {
-                    if (mActivity != null) {
-                        mActivity.mFragments.mNoTransactionsBecause = lastBecause;
+                    if (mHost != null) {
+                        mHost.mFragmentManager.mNoTransactionsBecause = lastBecause;
                     }
                 }
             }
@@ -465,25 +465,25 @@
                 mInactiveLoaders.remove(mId);
             }
 
-            if (mActivity != null && !hasRunningLoaders()) {
-                mActivity.mFragments.startPendingDeferredFragments();
+            if (mHost != null && !hasRunningLoaders()) {
+                mHost.mFragmentManager.startPendingDeferredFragments();
             }
         }
 
         void callOnLoadFinished(Loader<Object> loader, Object data) {
             if (mCallbacks != null) {
                 String lastBecause = null;
-                if (mActivity != null) {
-                    lastBecause = mActivity.mFragments.mNoTransactionsBecause;
-                    mActivity.mFragments.mNoTransactionsBecause = "onLoadFinished";
+                if (mHost != null) {
+                    lastBecause = mHost.mFragmentManager.mNoTransactionsBecause;
+                    mHost.mFragmentManager.mNoTransactionsBecause = "onLoadFinished";
                 }
                 try {
                     if (DEBUG) Log.v(TAG, "  onLoadFinished in " + loader + ": "
                             + loader.dataToString(data));
                     mCallbacks.onLoadFinished(loader, data);
                 } finally {
-                    if (mActivity != null) {
-                        mActivity.mFragments.mNoTransactionsBecause = lastBecause;
+                    if (mHost != null) {
+                        mHost.mFragmentManager.mNoTransactionsBecause = lastBecause;
                     }
                 }
                 mDeliveredData = true;
@@ -530,14 +530,14 @@
         }
     }
     
-    LoaderManagerImpl(String who, Activity activity, boolean started) {
+    LoaderManagerImpl(String who, FragmentHostCallback host, boolean started) {
         mWho = who;
-        mActivity = activity;
+        mHost = host;
         mStarted = started;
     }
     
-    void updateActivity(Activity activity) {
-        mActivity = activity;
+    void updateHostController(FragmentHostCallback host) {
+        mHost = host;
     }
     
     private LoaderInfo createLoader(int id, Bundle args,
@@ -730,8 +730,8 @@
             mInactiveLoaders.removeAt(idx);
             info.destroy();
         }
-        if (mActivity != null && !hasRunningLoaders()) {
-            mActivity.mFragments.startPendingDeferredFragments();
+        if (mHost != null && !hasRunningLoaders()) {
+            mHost.mFragmentManager.startPendingDeferredFragments();
         }
     }
 
@@ -849,7 +849,7 @@
         sb.append("LoaderManager{");
         sb.append(Integer.toHexString(System.identityHashCode(this)));
         sb.append(" in ");
-        DebugUtils.buildShortClassTag(mActivity, sb);
+        DebugUtils.buildShortClassTag(mHost, sb);
         sb.append("}}");
         return sb.toString();
     }
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 2cf23af..49b2549 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -2095,6 +2095,7 @@
 
                 try {
                     Constructor<? extends Style> constructor = styleClass.getConstructor();
+                    constructor.setAccessible(true);
                     style = constructor.newInstance();
                     style.restoreFromExtras(extras);
                 } catch (Throwable t) {
@@ -5493,477 +5494,6 @@
     }
 
     /**
-     * <p>
-     * Helper class to add content info extensions to notifications. To create a notification with
-     * content info extensions:
-     * <ol>
-     * <li>Create an {@link Notification.Builder}, setting any desired properties.
-     * <li>Create a {@link ContentInfoExtender}.
-     * <li>Set content info specific properties using the {@code add} and {@code set} methods of
-     * {@link ContentInfoExtender}.
-     * <li>Call {@link Notification.Builder#extend(Notification.Extender)} to apply the extensions
-     * to a notification.
-     * </ol>
-     *
-     * <pre class="prettyprint">Notification notification = new Notification.Builder(context) * ... * .extend(new ContentInfoExtender() * .set*(...)) * .build(); * </pre>
-     * <p>
-     * Content info extensions can be accessed on an existing notification by using the
-     * {@code ContentInfoExtender(Notification)} constructor, and then using the {@code get} methods
-     * to access values.
-     */
-    public static final class ContentInfoExtender implements Extender {
-        private static final String TAG = "ContentInfoExtender";
-
-        // Key for the Content info extensions bundle in the main Notification extras bundle
-        private static final String EXTRA_CONTENT_INFO_EXTENDER = "android.CONTENT_INFO_EXTENSIONS";
-
-        // Keys within EXTRA_CONTENT_INFO_EXTENDER for individual content info options.
-
-        private static final String KEY_CONTENT_TYPE = "android.contentType";
-
-        private static final String KEY_CONTENT_GENRES = "android.contentGenre";
-
-        private static final String KEY_CONTENT_PRICING_TYPE = "android.contentPricing.type";
-
-        private static final String KEY_CONTENT_PRICING_VALUE = "android.contentPricing.value";
-
-        private static final String KEY_CONTENT_STATUS = "android.contentStatus";
-
-        private static final String KEY_CONTENT_MATURITY_RATING = "android.contentMaturity";
-
-        private static final String KEY_CONTENT_RUN_LENGTH = "android.contentLength";
-
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a video clip.
-         */
-        public static final String CONTENT_TYPE_VIDEO = "android.contentType.video";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a movie.
-         */
-        public static final String CONTENT_TYPE_MOVIE = "android.contentType.movie";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a trailer.
-         */
-        public static final String CONTENT_TYPE_TRAILER = "android.contentType.trailer";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is serial. It can refer to an entire show, a single season or
-         * series, or a single episode.
-         */
-        public static final String CONTENT_TYPE_SERIAL = "android.contentType.serial";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a song or album.
-         */
-        public static final String CONTENT_TYPE_MUSIC = "android.contentType.music";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a radio station.
-         */
-        public static final String CONTENT_TYPE_RADIO = "android.contentType.radio";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a podcast.
-         */
-        public static final String CONTENT_TYPE_PODCAST = "android.contentType.podcast";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a news item.
-         */
-        public static final String CONTENT_TYPE_NEWS = "android.contentType.news";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is sports.
-         */
-        public static final String CONTENT_TYPE_SPORTS = "android.contentType.sports";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is an application.
-         */
-        public static final String CONTENT_TYPE_APP = "android.contentType.app";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a game.
-         */
-        public static final String CONTENT_TYPE_GAME = "android.contentType.game";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a book.
-         */
-        public static final String CONTENT_TYPE_BOOK = "android.contentType.book";
-        
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a comic book.
-         */
-        public static final String CONTENT_TYPE_COMIC = "android.contentType.comic";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a magazine.
-         */
-        public static final String CONTENT_TYPE_MAGAZINE = "android.contentType.magazine";
-
-        /**
-         * Value to be used with {@link #setContentTypes} to indicate that the content referred by
-         * the notification item is a website.
-         */
-        public static final String CONTENT_TYPE_WEBSITE = "android.contentType.website";
-
-
-        /**
-         * Value to be used with {@link #setPricingInformation} to indicate that the content
-         * referred by the notification item is free to consume.
-         */
-        public static final String CONTENT_PRICING_FREE = "android.contentPrice.free";
-
-        /**
-         * Value to be used with {@link #setPricingInformation} to indicate that the content
-         * referred by the notification item is available as a rental, and the price value provided
-         * is the rental price for the item.
-         */
-        public static final String CONTENT_PRICING_RENTAL = "android.contentPrice.rental";
-
-        /**
-         * Value to be used with {@link #setPricingInformation} to indicate that the content
-         * referred by the notification item is available for purchase, and the price value provided
-         * is the purchase price for the item.
-         */
-        public static final String CONTENT_PRICING_PURCHASE = "android.contentPrice.purchase";
-
-        /**
-         * Value to be used with {@link #setPricingInformation} to indicate that the content
-         * referred by the notification item is available currently as a pre-order, and the price
-         * value provided is the purchase price for the item.
-         */
-        public static final String CONTENT_PRICING_PREORDER = "android.contentPrice.preorder";
-
-        /**
-         * Value to be used with {@link #setPricingInformation} to indicate that the content
-         * referred by the notification item is available as part of a subscription based service,
-         * and the price value provided is the subscription price for the service.
-         */
-        public static final String CONTENT_PRICING_SUBSCRIPTION =
-                "android.contentPrice.subscription";
-
-        /**
-         * Value to be used with {@link #setStatus} to indicate that the content referred by the
-         * notification is available and ready to be consumed immediately.
-         */
-        public static final int CONTENT_STATUS_READY = 0;
-
-        /**
-         * Value to be used with {@link #setStatus} to indicate that the content referred by the
-         * notification is pending, waiting on either a download or purchase operation to complete
-         * before it can be consumed.
-         */
-        public static final int CONTENT_STATUS_PENDING = 1;
-
-        /**
-         * Value to be used with {@link #setStatus} to indicate that the content referred by the
-         * notification is available, but needs to be first purchased, rented, subscribed or
-         * downloaded before it can be consumed.
-         */
-        public static final int CONTENT_STATUS_AVAILABLE = 2;
-
-        /**
-         * Value to be used with {@link #setStatus} to indicate that the content referred by the
-         * notification is not available. This could be content not available in a certain region or
-         * incompatible with the device in use.
-         */
-        public static final int CONTENT_STATUS_UNAVAILABLE = 3;
-
-        /**
-         * Value to be used with {@link #setMaturityRating} to indicate that the content referred by
-         * the notification is suitable for all audiences.
-         */
-        public static final String CONTENT_MATURITY_ALL = "android.contentMaturity.all";
-
-        /**
-         * Value to be used with {@link #setMaturityRating} to indicate that the content
-         * referred by the notification is suitable for audiences of low maturity and above.
-         */
-        public static final String CONTENT_MATURITY_LOW = "android.contentMaturity.low";
-
-        /**
-         * Value to be used with {@link #setMaturityRating} to indicate that the content
-         * referred by the notification is suitable for audiences of medium maturity and above.
-         */
-        public static final String CONTENT_MATURITY_MEDIUM = "android.contentMaturity.medium";
-
-        /**
-         * Value to be used with {@link #setMaturityRating} to indicate that the content
-         * referred by the notification is suitable for audiences of high maturity and above.
-         */
-        public static final String CONTENT_MATURITY_HIGH = "android.contentMaturity.high";
-
-        private String[] mTypes;
-        private String[] mGenres;
-        private String mPricingType;
-        private String mPricingValue;
-        private int mContentStatus = -1;
-        private String mMaturityRating;
-        private long mRunLength = -1;
-
-        /**
-         * Create a {@link ContentInfoExtender} with default options.
-         */
-        public ContentInfoExtender() {
-        }
-
-        /**
-         * Create a {@link ContentInfoExtender} from the ContentInfoExtender options of an existing
-         * Notification.
-         *
-         * @param notif The notification from which to copy options.
-         */
-        public ContentInfoExtender(Notification notif) {
-            Bundle contentBundle = notif.extras == null ?
-                    null : notif.extras.getBundle(EXTRA_CONTENT_INFO_EXTENDER);
-            if (contentBundle != null) {
-                mTypes = contentBundle.getStringArray(KEY_CONTENT_TYPE);
-                mGenres = contentBundle.getStringArray(KEY_CONTENT_GENRES);
-                mPricingType = contentBundle.getString(KEY_CONTENT_PRICING_TYPE);
-                mPricingValue = contentBundle.getString(KEY_CONTENT_PRICING_VALUE);
-                mContentStatus = contentBundle.getInt(KEY_CONTENT_STATUS, -1);
-                mMaturityRating = contentBundle.getString(KEY_CONTENT_MATURITY_RATING);
-                mRunLength = contentBundle.getLong(KEY_CONTENT_RUN_LENGTH, -1);
-            }
-        }
-
-        /**
-         * Apply content extensions to a notification that is being built. This is typically called
-         * by the {@link Notification.Builder#extend(Notification.Extender)} method of
-         * {@link Notification.Builder}.
-         */
-        @Override
-        public Notification.Builder extend(Notification.Builder builder) {
-            Bundle contentBundle = new Bundle();
-
-            if (mTypes != null) {
-                contentBundle.putStringArray(KEY_CONTENT_TYPE, mTypes);
-            }
-            if (mGenres != null) {
-                contentBundle.putStringArray(KEY_CONTENT_GENRES, mGenres);
-            }
-            if (mPricingType != null) {
-                contentBundle.putString(KEY_CONTENT_PRICING_TYPE, mPricingType);
-            }
-            if (mPricingValue != null) {
-                contentBundle.putString(KEY_CONTENT_PRICING_VALUE, mPricingValue);
-            }
-            if (mContentStatus != -1) {
-                contentBundle.putInt(KEY_CONTENT_STATUS, mContentStatus);
-            }
-            if (mMaturityRating != null) {
-                contentBundle.putString(KEY_CONTENT_MATURITY_RATING, mMaturityRating);
-            }
-            if (mRunLength > 0) {
-                contentBundle.putLong(KEY_CONTENT_RUN_LENGTH, mRunLength);
-            }
-
-            builder.getExtras().putBundle(EXTRA_CONTENT_INFO_EXTENDER, contentBundle);
-            return builder;
-        }
-
-        /**
-         * Sets the content types associated with the notification content. The first tag entry will
-         * be considered the primary type for the content and will be used for ranking purposes.
-         * Other secondary type tags may be provided, if applicable, and may be used for filtering
-         * purposes.
-         *
-         * @param types Array of predefined type tags (see the <code>CONTENT_TYPE_*</code>
-         *            constants) that describe the content referred to by a notification.
-         */
-        public ContentInfoExtender setContentTypes(String[] types) {
-            mTypes = types;
-            return this;
-        }
-
-        /**
-         * Returns an array containing the content types that describe the content associated with
-         * the notification. The first tag entry is considered the primary type for the content, and
-         * is used for content ranking purposes.
-         *
-         * @return An array of predefined type tags (see the <code>CONTENT_TYPE_*</code> constants)
-         *         that describe the content associated with the notification.
-         * @see ContentInfoExtender#setContentTypes
-         */
-        public String[] getContentTypes() {
-            return mTypes;
-        }
-
-        /**
-         * Returns the primary content type tag for the content associated with the notification.
-         *
-         * @return A predefined type tag (see the <code>CONTENT_TYPE_*</code> constants) indicating
-         *         the primary type for the content associated with the notification.
-         * @see ContentInfoExtender#setContentTypes
-         */
-        public String getPrimaryContentType() {
-            if (mTypes == null || mTypes.length == 0) {
-                return null;
-            }
-            return mTypes[0];
-        }
-
-        /**
-         * Sets the content genres associated with the notification content. These genres may be
-         * used for content ranking. Genres are open ended String tags.
-         * <p>
-         * Some examples: "comedy", "action", "dance", "electronica", "racing", etc.
-         *
-         * @param genres Array of genre string tags that describe the content referred to by a
-         *            notification.
-         */
-        public ContentInfoExtender setGenres(String[] genres) {
-            mGenres = genres;
-            return this;
-        }
-
-        /**
-         * Returns an array containing the content genres that describe the content associated with
-         * the notification.
-         *
-         * @return An array of genre tags that describe the content associated with the
-         *         notification.
-         * @see ContentInfoExtender#setGenres
-         */
-        public String[] getGenres() {
-            return mGenres;
-        }
-
-        /**
-         * Sets the pricing and availability information for the content associated with the
-         * notification. The provided information will indicate the access model for the content
-         * (free, rental, purchase or subscription) and the price value (if not free).
-         *
-         * @param priceType Pricing type for this content. Must be one of the predefined pricing
-         *            type tags (see the <code>CONTENT_PRICING_*</code> constants).
-         * @param priceValue A string containing a representation of the content price in the
-         *            current locale and currency.
-         * @return This object for method chaining.
-         */
-        public ContentInfoExtender setPricingInformation(String priceType, String priceValue) {
-            mPricingType = priceType;
-            mPricingValue = priceValue;
-            return this;
-        }
-
-        /**
-         * Gets the pricing type for the content associated with the notification.
-         *
-         * @return A predefined tag indicating the pricing type for the content (see the <code>
-         *         CONTENT_PRICING_*</code> constants).
-         * @see ContentInfoExtender#setPricingInformation
-         */
-        public String getPricingType() {
-            return mPricingType;
-        }
-
-        /**
-         * Gets the price value (when applicable) for the content associated with a notification.
-         * The value will be provided as a String containing the price in the appropriate currency
-         * for the current locale.
-         *
-         * @return A string containing a representation of the content price in the current locale
-         *         and currency.
-         * @see ContentInfoExtender#setPricingInformation
-         */
-        public String getPricingValue() {
-            if (mPricingType == null || CONTENT_PRICING_FREE.equals(mPricingType)) {
-                return null;
-            }
-            return mPricingValue;
-        }
-
-        /**
-         * Sets the availability status for the content associated with the notification. This
-         * status indicates whether the referred content is ready to be consumed on the device, or
-         * if the user must first purchase, rent, subscribe to, or download the content.
-         *
-         * @param contentStatus The status value for this content. Must be one of the predefined
-         *            content status values (see the <code>CONTENT_STATUS_*</code> constants).
-         */
-        public ContentInfoExtender setStatus(int contentStatus) {
-            mContentStatus = contentStatus;
-            return this;
-        }
-
-        /**
-         * Returns status value for the content associated with the notification. This status
-         * indicates whether the referred content is ready to be consumed on the device, or if the
-         * user must first purchase, rent, subscribe to, or download the content.
-         *
-         * @return The status value for this content, or -1 is a valid status has not been specified
-         *         (see the <code>CONTENT_STATUS_*</code> for the defined valid status values).
-         * @see ContentInfoExtender#setStatus
-         */
-        public int getStatus() {
-            return mContentStatus;
-        }
-
-        /**
-         * Sets the maturity level rating for the content associated with the notification.
-         *
-         * @param maturityRating A tag indicating the maturity level rating for the content. This
-         *            tag must be one of the predefined maturity rating tags (see the <code>
-         *            CONTENT_MATURITY_*</code> constants).
-         */
-        public ContentInfoExtender setMaturityRating(String maturityRating) {
-            mMaturityRating = maturityRating;
-            return this;
-        }
-
-        /**
-         * Returns the maturity level rating for the content associated with the notification.
-         *
-         * @return returns a predefined tag indicating the maturity level rating for the content
-         *         (see the <code> CONTENT_MATURITY_*</code> constants).
-         * @see ContentInfoExtender#setMaturityRating
-         */
-        public String getMaturityRating() {
-            return mMaturityRating;
-        }
-
-        /**
-         * Sets the running time (when applicable) for the content associated with the notification.
-         *
-         * @param length The runing time, in seconds, of the content associated with the
-         *            notification.
-         */
-        public ContentInfoExtender setRunningTime(long length) {
-            mRunLength = length;
-            return this;
-        }
-
-        /**
-         * Returns the running time for the content associated with the notification.
-         *
-         * @return The running time, in seconds, of the content associated with the notification.
-         * @see ContentInfoExtender#setRunningTime
-         */
-        public long getRunningTime() {
-            return mRunLength;
-        }
-    }
-
-    /**
      * Get an array of Notification objects from a parcelable array bundle field.
      * Update the bundle to have a typed array so fetches in the future don't need
      * to do an array copy.
diff --git a/core/java/android/app/NotificationManager.aidl b/core/java/android/app/NotificationManager.aidl
index 8380b8d..a5d5671 100644
--- a/core/java/android/app/NotificationManager.aidl
+++ b/core/java/android/app/NotificationManager.aidl
@@ -17,4 +17,3 @@
 package android.app;
 
 parcelable NotificationManager.Policy;
-parcelable NotificationManager.Policy.Token;
\ No newline at end of file
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 0a59026..e4bbe27 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -20,7 +20,6 @@
 import android.annotation.Nullable;
 import android.annotation.SdkConstant;
 import android.app.Notification.Builder;
-import android.app.NotificationManager.Policy.Token;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ParceledListSlice;
@@ -38,6 +37,7 @@
 import android.service.notification.IConditionListener;
 import android.service.notification.StatusBarNotification;
 import android.service.notification.ZenModeConfig;
+import android.util.ArraySet;
 import android.util.Log;
 
 import java.util.Objects;
@@ -107,6 +107,43 @@
     public static final String ACTION_NOTIFICATION_POLICY_CHANGED
             = "android.app.action.NOTIFICATION_POLICY_CHANGED";
 
+    /**
+     * Intent that is broadcast when the state of getCurrentInterruptionFilter() changes.
+     * This broadcast is only sent to registered receivers.
+     */
+    @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_INTERRUPTION_FILTER_CHANGED
+            = "android.app.action.INTERRUPTION_FILTER_CHANGED";
+
+    /**
+     * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
+     *     Normal interruption filter.
+     */
+    public static final int INTERRUPTION_FILTER_ALL = 1;
+
+    /**
+     * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
+     *     Priority interruption filter.
+     */
+    public static final int INTERRUPTION_FILTER_PRIORITY = 2;
+
+    /**
+     * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
+     *     No interruptions filter.
+     */
+    public static final int INTERRUPTION_FILTER_NONE = 3;
+
+    /**
+     * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
+     *     Alarms only interruption filter.
+     */
+    public static final int INTERRUPTION_FILTER_ALARMS = 4;
+
+    /** {@link #getCurrentInterruptionFilter() Interruption filter} constant - returned when
+     * the value is unavailable for any reason.
+     */
+    public static final int INTERRUPTION_FILTER_UNKNOWN = 0;
+
     private static INotificationManager sService;
 
     /** @hide */
@@ -357,29 +394,29 @@
     }
 
     /**
-     * Requests a notification policy token for the calling package.
+     * Requests the ability to read/modify notification policy for the calling package.
      *
-     * @param callback required, used to receive the granted token or the deny signal.
+     * @param callback required, used to receive the granted or the denied signal.
      * @param handler The handler used when receiving the result.
      *                If null, the current thread is used.
      */
-    public void requestNotificationPolicyToken(@NonNull final Policy.Token.RequestCallback callback,
+    public void requestPolicyAccess(@NonNull final NotificationPolicyAccessRequestCallback callback,
             @Nullable Handler handler) {
         checkRequired("callback", callback);
         final Handler h = handler != null ? handler : new Handler();
         INotificationManager service = getService();
         try {
-            service.requestNotificationPolicyToken(mContext.getOpPackageName(),
+            service.requestNotificationPolicyAccess(mContext.getOpPackageName(),
                     new INotificationManagerCallback.Stub() {
                 @Override
-                public void onPolicyToken(final Token token) throws RemoteException {
+                public void onPolicyRequestResult(final boolean granted) throws RemoteException {
                     h.post(new Runnable() {
                         @Override
                         public void run() {
-                            if (token != null) {
-                                callback.onTokenGranted(token);
+                            if (granted) {
+                                callback.onAccessGranted();
                             } else {
-                                callback.onTokenDenied();
+                                callback.onAccessDenied();
                             }
                         }
                     });
@@ -389,16 +426,38 @@
         }
     }
 
+    /** Callback for receiving the result of a policy access request. */
+    public static abstract class NotificationPolicyAccessRequestCallback {
+        /**
+         * Received if the request was granted for this package.
+         */
+        public abstract void onAccessGranted();
+
+        /**
+         * Received if the request was denied for this package.
+         */
+        public abstract void onAccessDenied();
+    }
+
     /**
-     * Checks a given notification policy token.
+     * Checks the ability to read/modify notification policy for the calling package.
      *
-     * Returns true if the token is still valid for managing policy.
+     * Returns true if the calling package can read/modify notification policy.
      */
-    public boolean isNotificationPolicyTokenValid(@NonNull Policy.Token token) {
-        if (token == null) return false;
+    public boolean isNotificationPolicyAccessGranted() {
         INotificationManager service = getService();
         try {
-            return service.isNotificationPolicyTokenValid(mContext.getOpPackageName(), token);
+            return service.isNotificationPolicyAccessGranted(mContext.getOpPackageName());
+        } catch (RemoteException e) {
+        }
+        return false;
+    }
+
+    /** @hide */
+    public boolean isNotificationPolicyAccessGrantedForPackage(String pkg) {
+        INotificationManager service = getService();
+        try {
+            return service.isNotificationPolicyAccessGrantedForPackage(pkg);
         } catch (RemoteException e) {
         }
         return false;
@@ -407,13 +466,13 @@
     /**
      * Gets the current notification policy.
      *
-     * @param token A valid notification policy token is required to access the current policy.
+     * <p>
+     * Only available if policy access is granted.
      */
-    public Policy getNotificationPolicy(@NonNull Policy.Token token) {
-        checkRequired("token", token);
+    public Policy getNotificationPolicy() {
         INotificationManager service = getService();
         try {
-            return service.getNotificationPolicy(token);
+            return service.getNotificationPolicy(mContext.getOpPackageName());
         } catch (RemoteException e) {
         }
         return null;
@@ -422,19 +481,46 @@
     /**
      * Sets the current notification policy.
      *
-     * @param token  A valid notification policy token is required to modify the current policy.
+     * <p>
+     * Only available if policy access is granted.
+     *
      * @param policy The new desired policy.
      */
-    public void setNotificationPolicy(@NonNull Policy.Token token, @NonNull Policy policy) {
-        checkRequired("token", token);
+    public void setNotificationPolicy(@NonNull Policy policy) {
         checkRequired("policy", policy);
         INotificationManager service = getService();
         try {
-            service.setNotificationPolicy(token, policy);
+            service.setNotificationPolicy(mContext.getOpPackageName(), policy);
         } catch (RemoteException e) {
         }
     }
 
+    /** @hide */
+    public void setNotificationPolicyAccessGranted(String pkg, boolean granted) {
+        INotificationManager service = getService();
+        try {
+            service.setNotificationPolicyAccessGranted(pkg, granted);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /** @hide */
+    public ArraySet<String> getPackagesRequestingNotificationPolicyAccess() {
+        INotificationManager service = getService();
+        try {
+            final String[] pkgs = service.getPackagesRequestingNotificationPolicyAccess();
+            if (pkgs != null && pkgs.length > 0) {
+                final ArraySet<String> rt = new ArraySet<>(pkgs.length);
+                for (int i = 0; i < pkgs.length; i++) {
+                    rt.add(pkgs[i]);
+                }
+                return rt;
+            }
+        } catch (RemoteException e) {
+        }
+        return new ArraySet<String>();
+    }
+
     private Context mContext;
 
     private static void checkRequired(String name, Object value) {
@@ -477,24 +563,30 @@
         /** Notification categories to prioritize. Bitmask of PRIORITY_CATEGORY_* constants. */
         public final int priorityCategories;
 
-        /** Notification senders to prioritize. One of:
+        /** Notification senders to prioritize for calls. One of:
          * PRIORITY_SENDERS_ANY, PRIORITY_SENDERS_CONTACTS, PRIORITY_SENDERS_STARRED */
-        public final int prioritySenders;
+        public final int priorityCallSenders;
 
-        public Policy(int priorityCategories, int prioritySenders) {
+        /** Notification senders to prioritize for messages. One of:
+         * PRIORITY_SENDERS_ANY, PRIORITY_SENDERS_CONTACTS, PRIORITY_SENDERS_STARRED */
+        public final int priorityMessageSenders;
+
+        public Policy(int priorityCategories, int priorityCallSenders, int priorityMessageSenders) {
             this.priorityCategories = priorityCategories;
-            this.prioritySenders = prioritySenders;
+            this.priorityCallSenders = priorityCallSenders;
+            this.priorityMessageSenders = priorityMessageSenders;
         }
 
         /** @hide */
         public Policy(Parcel source) {
-            this(source.readInt(), source.readInt());
+            this(source.readInt(), source.readInt(), source.readInt());
         }
 
         @Override
         public void writeToParcel(Parcel dest, int flags) {
             dest.writeInt(priorityCategories);
-            dest.writeInt(prioritySenders);
+            dest.writeInt(priorityCallSenders);
+            dest.writeInt(priorityMessageSenders);
         }
 
         @Override
@@ -504,7 +596,7 @@
 
         @Override
         public int hashCode() {
-            return Objects.hash(priorityCategories, prioritySenders);
+            return Objects.hash(priorityCategories, priorityCallSenders, priorityMessageSenders);
         }
 
         @Override
@@ -513,14 +605,16 @@
             if (o == this) return true;
             final Policy other = (Policy) o;
             return other.priorityCategories == priorityCategories
-                    && other.prioritySenders == prioritySenders;
+                    && other.priorityCallSenders == priorityCallSenders
+                    && other.priorityMessageSenders == priorityMessageSenders;
         }
 
         @Override
         public String toString() {
             return "NotificationManager.Policy["
                     + "priorityCategories=" + priorityCategoriesToString(priorityCategories)
-                    + ",prioritySenders=" + prioritySendersToString(prioritySenders)
+                    + ",priorityCallSenders=" + prioritySendersToString(priorityCallSenders)
+                    + ",priorityMessageSenders=" + prioritySendersToString(priorityMessageSenders)
                     + "]";
         }
 
@@ -574,75 +668,6 @@
             }
         };
 
-        /**
-         * Represents a client-specific token required to manage notification policy.
-         */
-        public static class Token implements Parcelable {
-            private final IBinder mBinder;
-
-            /** @hide */
-            public Token(IBinder binder) {
-                if (binder == null) throw new IllegalArgumentException("Binder required for token");
-                mBinder = binder;
-            }
-
-            @Override
-            public int describeContents() {
-                return 0;
-            }
-
-            @Override
-            public int hashCode() {
-                return Objects.hash(mBinder);
-            }
-
-            @Override
-            public boolean equals(Object o) {
-                if (!(o instanceof Token)) return false;
-                if (o == this) return true;
-                final Token other = (Token) o;
-                return Objects.equals(other.mBinder, mBinder);
-            }
-
-            @Override
-            public String toString() {
-                return String.format("NotificationManager.Token[0x%08x]",
-                        System.identityHashCode(mBinder));
-            }
-
-            @Override
-            public void writeToParcel(Parcel dest, int flags) {
-                dest.writeStrongBinder(mBinder);
-            }
-
-            public static final Parcelable.Creator<Token> CREATOR
-                    = new Parcelable.Creator<Token>() {
-                @Override
-                public Token createFromParcel(Parcel in) {
-                    return new Token(in.readStrongBinder());
-                }
-
-                @Override
-                public Token[] newArray(int size) {
-                    return new Token[size];
-                }
-            };
-
-            /** Callback for receiving the result of a token request. */
-            public static abstract class RequestCallback {
-                /**
-                 * Received if the request was granted for this package.
-                 *
-                 * @param token can be used to manage notification policy.
-                 */
-                public abstract void onTokenGranted(Policy.Token token);
-
-                /**
-                 * Received if the request was denied for this package.
-                 */
-                public abstract void onTokenDenied();
-            }
-        }
     }
 
     /**
@@ -671,4 +696,69 @@
         }
         return new StatusBarNotification[0];
     }
+
+    /**
+     * Gets the current notification interruption filter.
+     *
+     * <p>
+     * The interruption filter defines which notifications are allowed to interrupt the user
+     * (e.g. via sound &amp; vibration) and is applied globally.
+     * @return One of the INTERRUPTION_FILTER_ constants, or INTERRUPTION_FILTER_UNKNOWN when
+     * unavailable.
+     *
+     * <p>
+     * Only available if policy access is granted.
+     */
+    public final int getCurrentInterruptionFilter() {
+        final INotificationManager service = getService();
+        try {
+            return zenModeToInterruptionFilter(service.getZenMode());
+        } catch (RemoteException e) {
+            Log.e(TAG, "Unable to talk to notification manager. Woe!", e);
+        }
+        return INTERRUPTION_FILTER_UNKNOWN;
+    }
+
+    /**
+     * Sets the current notification interruption filter.
+     *
+     * <p>
+     * The interruption filter defines which notifications are allowed to interrupt the user
+     * (e.g. via sound &amp; vibration) and is applied globally.
+     * @return One of the INTERRUPTION_FILTER_ constants, or INTERRUPTION_FILTER_UNKNOWN when
+     * unavailable.
+     *
+     * <p>
+     * Only available if policy access is granted.
+     */
+    public final void setInterruptionFilter(int interruptionFilter) {
+        final INotificationManager service = getService();
+        try {
+            service.setInterruptionFilter(mContext.getOpPackageName(), interruptionFilter);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Unable to talk to notification manager. Woe!", e);
+        }
+    }
+
+    /** @hide */
+    public static int zenModeToInterruptionFilter(int zen) {
+        switch (zen) {
+            case Global.ZEN_MODE_OFF: return INTERRUPTION_FILTER_ALL;
+            case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: return INTERRUPTION_FILTER_PRIORITY;
+            case Global.ZEN_MODE_ALARMS: return INTERRUPTION_FILTER_ALARMS;
+            case Global.ZEN_MODE_NO_INTERRUPTIONS: return INTERRUPTION_FILTER_NONE;
+            default: return INTERRUPTION_FILTER_UNKNOWN;
+        }
+    }
+
+    /** @hide */
+    public static int zenModeFromInterruptionFilter(int interruptionFilter, int defValue) {
+        switch (interruptionFilter) {
+            case INTERRUPTION_FILTER_ALL: return Global.ZEN_MODE_OFF;
+            case INTERRUPTION_FILTER_PRIORITY: return Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+            case INTERRUPTION_FILTER_ALARMS: return Global.ZEN_MODE_ALARMS;
+            case INTERRUPTION_FILTER_NONE:  return Global.ZEN_MODE_NO_INTERRUPTIONS;
+            default: return defValue;
+        }
+    }
 }
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index b1a5d21..fa11221 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -165,8 +165,6 @@
         setContentView(com.android.internal.R.layout.search_bar);
 
         // get the view elements for local access
-        SearchBar searchBar = (SearchBar) findViewById(com.android.internal.R.id.search_bar);
-        searchBar.setSearchDialog(this);
         mSearchView = (SearchView) findViewById(com.android.internal.R.id.search_view);
         mSearchView.setIconified(false);
         mSearchView.setOnCloseListener(mOnCloseListener);
@@ -618,8 +616,6 @@
      */
     public static class SearchBar extends LinearLayout {
 
-        private SearchDialog mSearchDialog;
-
         public SearchBar(Context context, AttributeSet attrs) {
             super(context, attrs);
         }
@@ -628,18 +624,6 @@
             super(context);
         }
 
-        public void setSearchDialog(SearchDialog searchDialog) {
-            mSearchDialog = searchDialog;
-        }
-
-        /**
-         * Don't allow action modes in a SearchBar, it looks silly.
-         */
-        @Override
-        public ActionMode startActionModeForChild(View child, ActionMode.Callback callback) {
-            return null;
-        }
-
         @Override
         public ActionMode startActionModeForChild(
                 View child, ActionMode.Callback callback, int type) {
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 46da025..0d00908 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -55,7 +55,6 @@
 import android.location.ICountryDetector;
 import android.location.ILocationManager;
 import android.location.LocationManager;
-import android.media.AudioDevicesManager;
 import android.media.AudioManager;
 import android.media.MediaRouter;
 import android.media.midi.IMidiManager;
@@ -91,7 +90,6 @@
 import android.os.IUserManager;
 import android.os.PowerManager;
 import android.os.Process;
-import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemVibrator;
 import android.os.UserHandle;
@@ -111,7 +109,7 @@
 import android.util.Log;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
-import android.view.PhoneLayoutInflater;
+import com.android.internal.policy.PhoneLayoutInflater;
 import android.view.WindowManager;
 import android.view.WindowManagerImpl;
 import android.view.accessibility.AccessibilityManager;
@@ -702,13 +700,6 @@
             public RadioManager createService(ContextImpl ctx) {
                 return new RadioManager(ctx);
             }});
-
-        registerService(Context.AUDIO_DEVICES_SERVICE, AudioDevicesManager.class,
-                new CachedServiceFetcher<AudioDevicesManager>() {
-            @Override
-            public AudioDevicesManager createService(ContextImpl ctx) {
-                return new AudioDevicesManager(ctx);
-            }});
     }
 
     /**
@@ -727,7 +718,7 @@
     }
 
     /**
-     * Gets the name of the system-level service that is represented by the specified class. 
+     * Gets the name of the system-level service that is represented by the specified class.
      */
     public static String getSystemServiceName(Class<?> serviceClass) {
         return SYSTEM_SERVICE_NAMES.get(serviceClass);
diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java
index aea413d..470804d 100644
--- a/core/java/android/app/admin/DeviceAdminReceiver.java
+++ b/core/java/android/app/admin/DeviceAdminReceiver.java
@@ -231,7 +231,7 @@
      * device owner app.
      *
      * <p>The broadcast will be limited to the {@link DeviceAdminReceiver} component specified in
-     * the (@link DevicePolicyManager#EXTRA_PROVISIONING_DEVICE_INITIALIZER_COMPONENT_NAME) field
+     * the {@link DevicePolicyManager#EXTRA_PROVISIONING_DEVICE_INITIALIZER_COMPONENT_NAME} field
      * of the original intent or NFC bump that started the provisioning process. You will generally
      * handle this in {@link DeviceAdminReceiver#onReadyForUserInitialization}.
      *
@@ -450,9 +450,9 @@
      *
      * <p>It is not assumed that the device initializer is finished when it returns from
      * this call, as it may do additional setup asynchronously. The device initializer must call
-     * {DevicePolicyManager#setUserEnabled(ComponentName admin)} when it has finished any additional
-     * setup (such as adding an account by using the {@link AccountManager}) in order for the user
-     * to be functional.
+     * {@link DevicePolicyManager#setUserEnabled(ComponentName admin)} when it has finished any
+     * additional setup (such as adding an account by using the {@link AccountManager}) in order for
+     * the user to be functional.
      *
      * @param context The running context as per {@link #onReceive}.
      * @param intent The received intent as per {@link #onReceive}.
diff --git a/core/java/android/app/admin/DeviceInitializerStatus.java b/core/java/android/app/admin/DeviceInitializerStatus.java
index b58711c..7de518b 100644
--- a/core/java/android/app/admin/DeviceInitializerStatus.java
+++ b/core/java/android/app/admin/DeviceInitializerStatus.java
@@ -37,8 +37,8 @@
  * <li>{@link #STATUS_ERROR_SET_DEVICE_POLICY}
  * <li>{@link #STATUS_ERROR_DELETE_APPS}
  * <li>{@link #STATUS_ERROR_DOUBLE_BUMP}
- * <li>{@link #STATUS_STATE_CONNECT_BLUETOOTH_PROXY}
- * <li>{@link #STATUS_STATE_DISCONNECT_BLUETOOTH_PROXY}
+ * <li>{@link #STATUS_STATE_CONNECTING_BLUETOOTH_PROXY}
+ * <li>{@link #STATUS_STATE_DISCONNECTING_BLUETOOTH_PROXY}
  * <li>{@link #STATUS_STATE_DEVICE_PROVISIONED}
  * </ul>
  */
@@ -84,13 +84,13 @@
      * Device provisioning status code that indicates that a device is connecting to establish
      * a Bluetooth network proxy.
      */
-    public static final int STATUS_STATE_CONNECT_BLUETOOTH_PROXY = FLAG_STATUS_HIGH_PRIORITY | 8;
+    public static final int STATUS_STATE_CONNECTING_BLUETOOTH_PROXY = FLAG_STATUS_HIGH_PRIORITY | 8;
 
     /**
      * Device provisioning status code that indicates that a connected Bluetooth network proxy
      * is being shut down.
      */
-    public static final int STATUS_STATE_DISCONNECT_BLUETOOTH_PROXY = FLAG_STATUS_HIGH_PRIORITY | 9;
+    public static final int STATUS_STATE_DISCONNECTING_BLUETOOTH_PROXY = FLAG_STATUS_HIGH_PRIORITY | 9;
 
     /**
      * Device provisioning status code that indicates that a device has been successfully
@@ -141,37 +141,5 @@
      */
     public static final int STATUS_ERROR_DOUBLE_BUMP = FLAG_STATUS_ERROR | 30;
 
-    /**
-     * Determine if the specified status code represents an error status.
-     * @param statusCode status code to check
-     * @return {@code true} if the status code is an error status code
-     */
-    public static boolean isErrorStatus(int statusCode) {
-        return isFlagSet(statusCode, FLAG_STATUS_ERROR);
-    }
-
-    /**
-     * Determine if the specified status code is a custom status. Custom status codes are defined
-     * and sent by device initialization agents.
-     * @param statusCode status code to check
-     * @return {@code true} if the status code is a custom status code
-     */
-    public static boolean isCustomStatus(int statusCode) {
-        return isFlagSet(statusCode, FLAG_STATUS_CUSTOM);
-    }
-
-    /**
-     * Determine if the specified status code is a high priority status code.
-     * @param statusCode status code to check
-     * @return {@code true} if the status code is a high priority status code
-     */
-    public static boolean isHighPriority(int statusCode) {
-        return isFlagSet(statusCode, FLAG_STATUS_HIGH_PRIORITY);
-    }
-
-    private static boolean isFlagSet(int statusCode, int flag) {
-        return (statusCode & flag) != 0;
-    }
-
     private DeviceInitializerStatus() {}
 }
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index cf9813f..ae07206 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -412,7 +412,7 @@
         = "android.app.action.MANAGED_PROFILE_PROVISIONED";
 
     /**
-     * A boolean extra indicating whether device encryption is required as part of Device Owner
+     * A boolean extra indicating whether device encryption can be skipped as part of Device Owner
      * provisioning.
      *
      * <p>Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC_V2} that starts device owner
@@ -702,7 +702,7 @@
      * reported to the remote setup device over Bluetooth.
      *
      * <p>Broadcasts with this action must supply a
-     * {@linkplain DeviceInitializerStatus#isCustomStatus(int) custom} status code in the
+     * {@linkplain DeviceInitializerStatus#FLAG_STATUS_CUSTOM custom} status code in the
      * {@link EXTRA_DEVICE_INITIALIZER_STATUS_CODE} extra.
      *
      * <p>Broadcasts may optionally contain a description in the
@@ -718,7 +718,7 @@
      * sent as part of a broadcast with an action of {@code ACTION_SEND_DEVICE_INITIALIZER_STATUS}.
      *
      * <p>The status code sent with this extra must be a custom status code as defined by
-     * {@link DeviceInitializerStatus#isCustomStatus(int)}.
+     * {@link DeviceInitializerStatus#FLAG_STATUS_CUSTOM}.
      * @hide
      */
     @SystemApi
@@ -1653,9 +1653,9 @@
     }
 
     /**
-     * Queries whether {@link #DO_NOT_ASK_CREDENTIALS_ON_BOOT} flag is set.
+     * Queries whether {@link #RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT} flag is set.
      *
-     * @return true if DO_NOT_ASK_CREDENTIALS_ON_BOOT flag is set.
+     * @return true if RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT flag is set.
      * @hide
      */
     public boolean getDoNotAskCredentialsOnBoot() {
@@ -1753,7 +1753,7 @@
      * is ignored. Once the flag is set, it cannot be reverted back without resetting the
      * device to factory defaults.
      */
-    public static final int DO_NOT_ASK_CREDENTIALS_ON_BOOT = 0x0002;
+    public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 0x0002;
 
     /**
      * Force a new device unlock password (the password needed to access the
@@ -1779,7 +1779,7 @@
      *
      * @param password The new password for the user. Null or empty clears the password.
      * @param flags May be 0 or combination of {@link #RESET_PASSWORD_REQUIRE_ENTRY} and
-     *              {@link #DO_NOT_ASK_CREDENTIALS_ON_BOOT}.
+     *              {@link #RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT}.
      * @return Returns true if the password was applied, or false if it is
      * not acceptable for the current constraints.
      */
@@ -2926,7 +2926,7 @@
      *         the user has already been set up.
      */
     @SystemApi
-    public boolean setActiveProfileOwner(ComponentName admin, String ownerName)
+    public boolean setActiveProfileOwner(ComponentName admin, @Deprecated String ownerName)
             throws IllegalArgumentException {
         if (mService != null) {
             try {
@@ -2992,8 +2992,8 @@
      * @throws IllegalArgumentException if admin is null, the package isn't installed, or the
      * preconditions mentioned are not met.
      */
-    public boolean setProfileOwner(ComponentName admin, String ownerName, int userHandle)
-            throws IllegalArgumentException {
+    public boolean setProfileOwner(ComponentName admin, @Deprecated String ownerName,
+            int userHandle) throws IllegalArgumentException {
         if (admin == null) {
             throw new NullPointerException("admin cannot be null");
         }
@@ -4229,7 +4229,7 @@
      * Called by device initializer to send a provisioning status update to the remote setup device.
      *
      * @param statusCode a custom status code value as defined by
-     *    {@link DeviceInitializerStatus#isCustomStatus(int)}.
+     *    {@link DeviceInitializerStatus#FLAG_STATUS_CUSTOM}.
      * @param description custom description of the status code sent
      */
     public void sendDeviceInitializerStatus(int statusCode, String description) {
@@ -4294,14 +4294,14 @@
      * being disabled.
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
-     * @param enabled New state of the keyguard.
+     * @param disabled {@code true} disables the keyguard, {@code false} reenables it.
      *
      * @return {@code false} if attempting to disable the keyguard while a lock password was in
-     * place. {@code true} otherwise."
+     * place. {@code true} otherwise.
      */
-    public boolean setKeyguardEnabledState(ComponentName admin, boolean enabled) {
+    public boolean setKeyguardDisabled(ComponentName admin, boolean disabled) {
         try {
-            return mService.setKeyguardEnabledState(admin, enabled);
+            return mService.setKeyguardDisabled(admin, disabled);
         } catch (RemoteException re) {
             Log.w(TAG, "Failed talking with device policy service", re);
             return false;
@@ -4309,18 +4309,22 @@
     }
 
     /**
-     * Called by device owner to set the enabled state of the status bar. Disabling the status
-     * bar blocks notifications, quick settings and other screen overlays that allow escaping from
+     * Called by device owner to disable the status bar. Disabling the status bar blocks
+     * notifications, quick settings and other screen overlays that allow escaping from
      * a single use device.
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
-     * @param enabled New state of the status bar.
+     * @param disabled {@code true} disables the status bar, {@code false} reenables it.
+     *
+     * @return {@code false} if attempting to disable the status bar failed.
+     * {@code true} otherwise.
      */
-    public void setStatusBarEnabledState(ComponentName admin, boolean enabled) {
+    public boolean setStatusBarDisabled(ComponentName admin, boolean disabled) {
         try {
-            mService.setStatusBarEnabledState(admin, enabled);
+            return mService.setStatusBarDisabled(admin, disabled);
         } catch (RemoteException re) {
             Log.w(TAG, "Failed talking with device policy service", re);
+            return false;
         }
     }
 
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 833bc00..e81e7c1 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -224,8 +224,8 @@
     void setSystemUpdatePolicy(in ComponentName who, in PersistableBundle policy);
     PersistableBundle getSystemUpdatePolicy();
 
-    boolean setKeyguardEnabledState(in ComponentName admin, boolean enabled);
-    void setStatusBarEnabledState(in ComponentName who, boolean enabled);
+    boolean setKeyguardDisabled(in ComponentName admin, boolean disabled);
+    boolean setStatusBarDisabled(in ComponentName who, boolean disabled);
     boolean getDoNotAskCredentialsOnBoot();
 
     void notifyPendingSystemUpdate(in long updateReceivedTime);
diff --git a/core/java/android/app/backup/BackupAgent.java b/core/java/android/app/backup/BackupAgent.java
index d8556a2..6fca0de 100644
--- a/core/java/android/app/backup/BackupAgent.java
+++ b/core/java/android/app/backup/BackupAgent.java
@@ -33,15 +33,21 @@
 import android.system.Os;
 import android.system.OsConstants;
 import android.system.StructStat;
+import android.util.ArraySet;
 import android.util.Log;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.util.HashSet;
+import java.util.Collection;
 import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 
+import org.xmlpull.v1.XmlPullParserException;
+
 /**
  * Provides the central interface between an
  * application and Android's data backup infrastructure.  An application that wishes
@@ -164,7 +170,6 @@
      * to do one-time initialization before the actual backup or restore operation
      * is begun.
      * <p>
-     * Agents do not need to override this method.
      */
     public void onCreate() {
     }
@@ -268,19 +273,41 @@
      * listed above.  Apps only need to override this method if they need to impose special
      * limitations on which files are being stored beyond the control that
      * {@link #getNoBackupFilesDir()} offers.
+     * Alternatively they can provide an xml resource to specify what data to include or exclude.
+     *
      *
      * @param data A structured wrapper pointing to the backup destination.
      * @throws IOException
      *
      * @see Context#getNoBackupFilesDir()
+     * @see ApplicationInfo#fullBackupContent
      * @see #fullBackupFile(File, FullBackupDataOutput)
      * @see #onRestoreFile(ParcelFileDescriptor, long, File, int, long, long)
      */
     public void onFullBackup(FullBackupDataOutput data) throws IOException {
-        ApplicationInfo appInfo = getApplicationInfo();
+        FullBackup.BackupScheme backupScheme = FullBackup.getBackupScheme(this);
+        if (!backupScheme.isFullBackupContentEnabled()) {
+            return;
+        }
 
-        // Note that we don't need to think about the no_backup dir because it's outside
-        // all of the ones we will be traversing
+        Map<String, Set<String>> manifestIncludeMap;
+        ArraySet<String> manifestExcludeSet;
+        try {
+            manifestIncludeMap =
+                    backupScheme.maybeParseAndGetCanonicalIncludePaths();
+            manifestExcludeSet = backupScheme.maybeParseAndGetCanonicalExcludePaths();
+        } catch (IOException | XmlPullParserException e) {
+            if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                Log.v(FullBackup.TAG_XML_PARSER,
+                        "Exception trying to parse fullBackupContent xml file!"
+                                + " Aborting full backup.", e);
+            }
+            return;
+        }
+
+        final String packageName = getPackageName();
+        final ApplicationInfo appInfo = getApplicationInfo();
+
         String rootDir = new File(appInfo.dataDir).getCanonicalPath();
         String filesDir = getFilesDir().getCanonicalPath();
         String nobackupDir = getNoBackupFilesDir().getCanonicalPath();
@@ -292,34 +319,49 @@
                 ? new File(appInfo.nativeLibraryDir).getCanonicalPath()
                 : null;
 
-        // Filters, the scan queue, and the set of resulting entities
-        HashSet<String> filterSet = new HashSet<String>();
-        String packageName = getPackageName();
+        // Maintain a set of excluded directories so that as we traverse the tree we know we're not
+        // going places we don't expect, and so the manifest includes can't take precedence over
+        // what the framework decides is not to be included.
+        final ArraySet<String> traversalExcludeSet = new ArraySet<String>();
 
-        // Okay, start with the app's root tree, but exclude all of the canonical subdirs
+        // Add the directories we always exclude.
+        traversalExcludeSet.add(cacheDir);
+        traversalExcludeSet.add(codeCacheDir);
+        traversalExcludeSet.add(nobackupDir);
         if (libDir != null) {
-            filterSet.add(libDir);
+            traversalExcludeSet.add(libDir);
         }
-        filterSet.add(cacheDir);
-        filterSet.add(codeCacheDir);
-        filterSet.add(databaseDir);
-        filterSet.add(sharedPrefsDir);
-        filterSet.add(filesDir);
-        filterSet.add(nobackupDir);
-        fullBackupFileTree(packageName, FullBackup.ROOT_TREE_TOKEN, rootDir, filterSet, data);
 
-        // Now do the same for the files dir, db dir, and shared prefs dir
-        filterSet.add(rootDir);
-        filterSet.remove(filesDir);
-        fullBackupFileTree(packageName, FullBackup.DATA_TREE_TOKEN, filesDir, filterSet, data);
+        traversalExcludeSet.add(databaseDir);
+        traversalExcludeSet.add(sharedPrefsDir);
+        traversalExcludeSet.add(filesDir);
 
-        filterSet.add(filesDir);
-        filterSet.remove(databaseDir);
-        fullBackupFileTree(packageName, FullBackup.DATABASE_TREE_TOKEN, databaseDir, filterSet, data);
+        // Root dir first.
+        applyXmlFiltersAndDoFullBackupForDomain(
+                packageName, FullBackup.ROOT_TREE_TOKEN, manifestIncludeMap,
+                manifestExcludeSet, traversalExcludeSet, data);
+        traversalExcludeSet.add(rootDir);
 
-        filterSet.add(databaseDir);
-        filterSet.remove(sharedPrefsDir);
-        fullBackupFileTree(packageName, FullBackup.SHAREDPREFS_TREE_TOKEN, sharedPrefsDir, filterSet, data);
+        // Data dir next.
+        traversalExcludeSet.remove(filesDir);
+        applyXmlFiltersAndDoFullBackupForDomain(
+                packageName, FullBackup.DATA_TREE_TOKEN, manifestIncludeMap,
+                manifestExcludeSet, traversalExcludeSet, data);
+        traversalExcludeSet.add(filesDir);
+
+        // Database directory.
+        traversalExcludeSet.remove(databaseDir);
+        applyXmlFiltersAndDoFullBackupForDomain(
+                packageName, FullBackup.DATABASE_TREE_TOKEN, manifestIncludeMap,
+                manifestExcludeSet, traversalExcludeSet, data);
+        traversalExcludeSet.add(databaseDir);
+
+        // SharedPrefs.
+        traversalExcludeSet.remove(sharedPrefsDir);
+        applyXmlFiltersAndDoFullBackupForDomain(
+                packageName, FullBackup.SHAREDPREFS_TREE_TOKEN, manifestIncludeMap,
+                manifestExcludeSet, traversalExcludeSet, data);
+        traversalExcludeSet.add(sharedPrefsDir);
 
         // getExternalFilesDir() location associated with this app.  Technically there should
         // not be any files here if the app does not properly have permission to access
@@ -331,8 +373,36 @@
         if (Process.myUid() != Process.SYSTEM_UID) {
             File efLocation = getExternalFilesDir(null);
             if (efLocation != null) {
-                fullBackupFileTree(packageName, FullBackup.MANAGED_EXTERNAL_TREE_TOKEN,
-                        efLocation.getCanonicalPath(), null, data);
+                applyXmlFiltersAndDoFullBackupForDomain(
+                        packageName, FullBackup.MANAGED_EXTERNAL_TREE_TOKEN, manifestIncludeMap,
+                        manifestExcludeSet, traversalExcludeSet, data);
+            }
+
+        }
+    }
+
+    /**
+     * Check whether the xml yielded any <include/> tag for the provided <code>domainToken</code>.
+     * If so, perform a {@link #fullBackupFileTree} which backs up the file or recurses if the path
+     * is a directory.
+     */
+    private void applyXmlFiltersAndDoFullBackupForDomain(String packageName, String domainToken,
+                                                         Map<String, Set<String>> includeMap,
+                                                         ArraySet<String> filterSet,
+                                                         ArraySet<String> traversalExcludeSet,
+                                                         FullBackupDataOutput data)
+            throws IOException {
+        if (includeMap == null || includeMap.size() == 0) {
+            // Do entire sub-tree for the provided token.
+            fullBackupFileTree(packageName, domainToken,
+                    FullBackup.getBackupScheme(this).tokenToDirectoryPath(domainToken),
+                    filterSet, traversalExcludeSet, data);
+        } else if (includeMap.get(domainToken) != null) {
+            // This will be null if the xml parsing didn't yield any rules for
+            // this domain (there may still be rules for other domains).
+            for (String includeFile : includeMap.get(domainToken)) {
+                fullBackupFileTree(packageName, domainToken, includeFile, filterSet,
+                        traversalExcludeSet, data);
             }
         }
     }
@@ -430,21 +500,31 @@
         // without transmitting any file data.
         if (DEBUG) Log.i(TAG, "backupFile() of " + filePath + " => domain=" + domain
                 + " rootpath=" + rootpath);
-        
+
         FullBackup.backupToTar(getPackageName(), domain, null, rootpath, filePath, output);
     }
 
     /**
      * Scan the dir tree (if it actually exists) and process each entry we find.  If the
-     * 'excludes' parameter is non-null, it is consulted each time a new file system entity
+     * 'excludes' parameters are non-null, they are consulted each time a new file system entity
      * is visited to see whether that entity (and its subtree, if appropriate) should be
      * omitted from the backup process.
      *
+     * @param systemExcludes An optional list of excludes.
      * @hide
      */
-    protected final void fullBackupFileTree(String packageName, String domain, String rootPath,
-            HashSet<String> excludes, FullBackupDataOutput output) {
-        File rootFile = new File(rootPath);
+    protected final void fullBackupFileTree(String packageName, String domain, String startingPath,
+                                            ArraySet<String> manifestExcludes,
+                                            ArraySet<String> systemExcludes,
+            FullBackupDataOutput output) {
+        // Pull out the domain and set it aside to use when making the tarball.
+        String domainPath = FullBackup.getBackupScheme(this).tokenToDirectoryPath(domain);
+        if (domainPath == null) {
+            // Should never happen.
+            return;
+        }
+
+        File rootFile = new File(startingPath);
         if (rootFile.exists()) {
             LinkedList<File> scanQueue = new LinkedList<File>();
             scanQueue.add(rootFile);
@@ -456,7 +536,10 @@
                     filePath = file.getCanonicalPath();
 
                     // prune this subtree?
-                    if (excludes != null && excludes.contains(filePath)) {
+                    if (manifestExcludes != null && manifestExcludes.contains(filePath)) {
+                        continue;
+                    }
+                    if (systemExcludes != null && systemExcludes.contains(filePath)) {
                         continue;
                     }
 
@@ -475,14 +558,20 @@
                     }
                 } catch (IOException e) {
                     if (DEBUG) Log.w(TAG, "Error canonicalizing path of " + file);
+                    if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                        Log.v(FullBackup.TAG_XML_PARSER, "Error canonicalizing path of " + file);
+                    }
                     continue;
                 } catch (ErrnoException e) {
                     if (DEBUG) Log.w(TAG, "Error scanning file " + file + " : " + e);
+                    if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                        Log.v(FullBackup.TAG_XML_PARSER, "Error scanning file " + file + " : " + e);
+                    }
                     continue;
                 }
 
                 // Finally, back this file up (or measure it) before proceeding
-                FullBackup.backupToTar(packageName, domain, null, rootPath, filePath, output);
+                FullBackup.backupToTar(packageName, domain, null, domainPath, filePath, output);
             }
         }
     }
@@ -516,10 +605,91 @@
     public void onRestoreFile(ParcelFileDescriptor data, long size,
             File destination, int type, long mode, long mtime)
             throws IOException {
+        FullBackup.BackupScheme bs = FullBackup.getBackupScheme(this);
+        if (!bs.isFullBackupContentEnabled()) {
+            if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                Log.v(FullBackup.TAG_XML_PARSER,
+                        "onRestoreFile \"" + destination.getCanonicalPath()
+                                + "\" : fullBackupContent not enabled for " + getPackageName());
+            }
+            return;
+        }
+        Map<String, Set<String>> includes = null;
+        ArraySet<String> excludes = null;
+        final String destinationCanonicalPath = destination.getCanonicalPath();
+        try {
+            includes = bs.maybeParseAndGetCanonicalIncludePaths();
+            excludes = bs.maybeParseAndGetCanonicalExcludePaths();
+        } catch (XmlPullParserException e) {
+            if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                Log.v(FullBackup.TAG_XML_PARSER,
+                        "onRestoreFile \"" + destinationCanonicalPath
+                                + "\" : Exception trying to parse fullBackupContent xml file!"
+                                + " Aborting onRestoreFile.", e);
+            }
+            return;
+        }
+
+        if (excludes != null &&
+                isFileSpecifiedInPathList(destination, excludes)) {
+            if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                Log.v(FullBackup.TAG_XML_PARSER,
+                        "onRestoreFile: \"" + destinationCanonicalPath + "\": listed in"
+                                + " excludes; skipping.");
+            }
+            return;
+        }
+
+        if (includes != null && !includes.isEmpty()) {
+            // Rather than figure out the <include/> domain based on the path (a lot of code, and
+            // it's a small list), we'll go through and look for it.
+            boolean explicitlyIncluded = false;
+            for (Set<String> domainIncludes : includes.values()) {
+                explicitlyIncluded |= isFileSpecifiedInPathList(destination, domainIncludes);
+                if (explicitlyIncluded) {
+                    break;
+                }
+            }
+            if (!explicitlyIncluded) {
+                if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                    Log.v(FullBackup.TAG_XML_PARSER,
+                            "onRestoreFile: Trying to restore \""
+                                    + destinationCanonicalPath + "\" but it isn't specified"
+                                    + " in the included files; skipping.");
+                }
+                return;
+            }
+        }
         FullBackup.restoreFile(data, size, type, mode, mtime, destination);
     }
 
     /**
+     * @return True if the provided file is either directly in the provided list, or the provided
+     * file is within a directory in the list.
+     */
+    private boolean isFileSpecifiedInPathList(File file, Collection<String> canonicalPathList)
+            throws IOException {
+        for (String canonicalPath : canonicalPathList) {
+            File fileFromList = new File(canonicalPath);
+            if (fileFromList.isDirectory()) {
+                if (file.isDirectory()) {
+                    // If they are both directories check exact equals.
+                    return file.equals(fileFromList);
+                } else {
+                    // O/w we have to check if the file is within the directory from the list.
+                    return file.getCanonicalPath().startsWith(canonicalPath);
+                }
+            } else {
+                if (file.equals(fileFromList)) {
+                    // Need to check the explicit "equals" so we don't end up with substrings.
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
      * Only specialized platform agents should overload this entry point to support
      * restores to crazy non-app locations.
      * @hide
@@ -533,31 +703,9 @@
                 + " domain=" + domain + " relpath=" + path + " mode=" + mode
                 + " mtime=" + mtime);
 
-        // Parse out the semantic domains into the correct physical location
-        if (domain.equals(FullBackup.DATA_TREE_TOKEN)) {
-            basePath = getFilesDir().getCanonicalPath();
-        } else if (domain.equals(FullBackup.DATABASE_TREE_TOKEN)) {
-            basePath = getDatabasePath("foo").getParentFile().getCanonicalPath();
-        } else if (domain.equals(FullBackup.ROOT_TREE_TOKEN)) {
-            basePath = new File(getApplicationInfo().dataDir).getCanonicalPath();
-        } else if (domain.equals(FullBackup.SHAREDPREFS_TREE_TOKEN)) {
-            basePath = getSharedPrefsFile("foo").getParentFile().getCanonicalPath();
-        } else if (domain.equals(FullBackup.CACHE_TREE_TOKEN)) {
-            basePath = getCacheDir().getCanonicalPath();
-        } else if (domain.equals(FullBackup.MANAGED_EXTERNAL_TREE_TOKEN)) {
-            // make sure we can try to restore here before proceeding
-            if (Process.myUid() != Process.SYSTEM_UID) {
-                File efLocation = getExternalFilesDir(null);
-                if (efLocation != null) {
-                    basePath = getExternalFilesDir(null).getCanonicalPath();
-                    mode = -1;  // < 0 is a token to skip attempting a chmod()
-                }
-            }
-        } else if (domain.equals(FullBackup.NO_BACKUP_TREE_TOKEN)) {
-            basePath = getNoBackupFilesDir().getCanonicalPath();
-        } else {
-            // Not a supported location
-            Log.i(TAG, "Unrecognized domain " + domain);
+        basePath = FullBackup.getBackupScheme(this).tokenToDirectoryPath(domain);
+        if (domain.equals(FullBackup.MANAGED_EXTERNAL_TREE_TOKEN)) {
+            mode = -1;  // < 0 is a token to skip attempting a chmod()
         }
 
         // Now that we've figured out where the data goes, send it on its way
diff --git a/core/java/android/app/backup/FullBackup.java b/core/java/android/app/backup/FullBackup.java
index 259884e..7718a36 100644
--- a/core/java/android/app/backup/FullBackup.java
+++ b/core/java/android/app/backup/FullBackup.java
@@ -16,16 +16,31 @@
 
 package android.app.backup;
 
-import android.os.ParcelFileDescriptor;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.XmlResourceParser;
+import android.os.*;
+import android.os.Process;
 import android.system.ErrnoException;
 import android.system.Os;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.ArraySet;
 import android.util.Log;
 
+import com.android.internal.annotations.VisibleForTesting;
+
+import org.xmlpull.v1.XmlPullParser;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
+import org.xmlpull.v1.XmlPullParserException;
 /**
  * Global constant definitions et cetera related to the full-backup-to-fd
  * binary format.  Nothing in this namespace is part of any API; it's all
@@ -35,6 +50,8 @@
  */
 public class FullBackup {
     static final String TAG = "FullBackup";
+    /** Enable this log tag to get verbose information while parsing the client xml. */
+    static final String TAG_XML_PARSER = "BackupXmlParserLogging";
 
     public static final String APK_TREE_TOKEN = "a";
     public static final String OBB_TREE_TOKEN = "obb";
@@ -60,6 +77,27 @@
     static public native int backupToTar(String packageName, String domain,
             String linkdomain, String rootpath, String path, FullBackupDataOutput output);
 
+    private static final Map<String, BackupScheme> kPackageBackupSchemeMap =
+            new ArrayMap<String, BackupScheme>();
+
+    static synchronized BackupScheme getBackupScheme(Context context) {
+        BackupScheme backupSchemeForPackage =
+                kPackageBackupSchemeMap.get(context.getPackageName());
+        if (backupSchemeForPackage == null) {
+            backupSchemeForPackage = new BackupScheme(context);
+            kPackageBackupSchemeMap.put(context.getPackageName(), backupSchemeForPackage);
+        }
+        return backupSchemeForPackage;
+    }
+
+    public static BackupScheme getBackupSchemeForTest(Context context) {
+        BackupScheme testing = new BackupScheme(context);
+        testing.mExcludes = new ArraySet();
+        testing.mIncludes = new ArrayMap();
+        return testing;
+    }
+
+
     /**
      * Copy data from a socket to the given File location on permanent storage.  The
      * modification time and access mode of the resulting file will be set if desired,
@@ -106,6 +144,8 @@
                     if (!parent.exists()) {
                         // in practice this will only be for the default semantic directories,
                         // and using the default mode for those is appropriate.
+                        // This can also happen for the case where a parent directory has been
+                        // excluded, but a file within that directory has been included.
                         parent.mkdirs();
                     }
                     out = new FileOutputStream(outFile);
@@ -154,4 +194,363 @@
             outFile.setLastModified(mtime);
         }
     }
+
+    @VisibleForTesting
+    public static class BackupScheme {
+        private final File FILES_DIR;
+        private final File DATABASE_DIR;
+        private final File ROOT_DIR;
+        private final File SHAREDPREF_DIR;
+        private final File EXTERNAL_DIR;
+        private final File CACHE_DIR;
+        private final File NOBACKUP_DIR;
+
+        final int mFullBackupContent;
+        final PackageManager mPackageManager;
+        final String mPackageName;
+
+        /**
+         * Parse out the semantic domains into the correct physical location.
+         */
+        String tokenToDirectoryPath(String domainToken) {
+            try {
+                if (domainToken.equals(FullBackup.DATA_TREE_TOKEN)) {
+                    return FILES_DIR.getCanonicalPath();
+                } else if (domainToken.equals(FullBackup.DATABASE_TREE_TOKEN)) {
+                    return DATABASE_DIR.getCanonicalPath();
+                } else if (domainToken.equals(FullBackup.ROOT_TREE_TOKEN)) {
+                    return ROOT_DIR.getCanonicalPath();
+                } else if (domainToken.equals(FullBackup.SHAREDPREFS_TREE_TOKEN)) {
+                    return SHAREDPREF_DIR.getCanonicalPath();
+                } else if (domainToken.equals(FullBackup.CACHE_TREE_TOKEN)) {
+                    return CACHE_DIR.getCanonicalPath();
+                } else if (domainToken.equals(FullBackup.MANAGED_EXTERNAL_TREE_TOKEN)) {
+                    if (EXTERNAL_DIR != null) {
+                        return EXTERNAL_DIR.getCanonicalPath();
+                    } else {
+                        return null;
+                    }
+                } else if (domainToken.equals(FullBackup.NO_BACKUP_TREE_TOKEN)) {
+                    return NOBACKUP_DIR.getCanonicalPath();
+                }
+                // Not a supported location
+                Log.i(TAG, "Unrecognized domain " + domainToken);
+                return null;
+            } catch (IOException e) {
+                Log.i(TAG, "Error reading directory for domain: " + domainToken);
+                return null;
+            }
+
+        }
+        /**
+        * A map of domain -> list of canonical file names in that domain that are to be included.
+        * We keep track of the domain so that we can go through the file system in order later on.
+        */
+        Map<String, Set<String>> mIncludes;
+        /**e
+         * List that will be populated with the canonical names of each file or directory that is
+         * to be excluded.
+         */
+        ArraySet<String> mExcludes;
+
+        BackupScheme(Context context) {
+            mFullBackupContent = context.getApplicationInfo().fullBackupContent;
+            mPackageManager = context.getPackageManager();
+            mPackageName = context.getPackageName();
+            FILES_DIR = context.getFilesDir();
+            DATABASE_DIR = context.getDatabasePath("foo").getParentFile();
+            ROOT_DIR = new File(context.getApplicationInfo().dataDir);
+            SHAREDPREF_DIR = context.getSharedPrefsFile("foo").getParentFile();
+            CACHE_DIR = context.getCacheDir();
+            NOBACKUP_DIR = context.getNoBackupFilesDir();
+            if (android.os.Process.myUid() != Process.SYSTEM_UID) {
+                EXTERNAL_DIR = context.getExternalFilesDir(null);
+            } else {
+                EXTERNAL_DIR = null;
+            }
+        }
+
+        boolean isFullBackupContentEnabled() {
+            if (mFullBackupContent < 0) {
+                // android:fullBackupContent="false", bail.
+                if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                    Log.v(FullBackup.TAG_XML_PARSER, "android:fullBackupContent - \"false\"");
+                }
+                return false;
+            }
+            return true;
+        }
+
+        /**
+         * @return A mapping of domain -> canonical paths within that domain. Each of these paths
+         * specifies a file that the client has explicitly included in their backup set. If this
+         * map is empty we will back up the entire data directory (including managed external
+         * storage).
+         */
+        public synchronized Map<String, Set<String>> maybeParseAndGetCanonicalIncludePaths()
+                throws IOException, XmlPullParserException {
+            if (mIncludes == null) {
+                maybeParseBackupSchemeLocked();
+            }
+            return mIncludes;
+        }
+
+        /**
+         * @return A set of canonical paths that are to be excluded from the backup/restore set.
+         */
+        public synchronized ArraySet<String> maybeParseAndGetCanonicalExcludePaths()
+                throws IOException, XmlPullParserException {
+            if (mExcludes == null) {
+                maybeParseBackupSchemeLocked();
+            }
+            return mExcludes;
+        }
+
+        private void maybeParseBackupSchemeLocked() throws IOException, XmlPullParserException {
+            // This not being null is how we know that we've tried to parse the xml already.
+            mIncludes = new ArrayMap<String, Set<String>>();
+            mExcludes = new ArraySet<String>();
+
+            if (mFullBackupContent == 0) {
+                // android:fullBackupContent="true" which means that we'll do everything.
+                if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                    Log.v(FullBackup.TAG_XML_PARSER, "android:fullBackupContent - \"true\"");
+                }
+            } else {
+                // android:fullBackupContent="@xml/some_resource".
+                if (Log.isLoggable(FullBackup.TAG_XML_PARSER, Log.VERBOSE)) {
+                    Log.v(FullBackup.TAG_XML_PARSER,
+                            "android:fullBackupContent - found xml resource");
+                }
+                XmlResourceParser parser = null;
+                try {
+                    parser = mPackageManager
+                            .getResourcesForApplication(mPackageName)
+                            .getXml(mFullBackupContent);
+                    parseBackupSchemeFromXmlLocked(parser, mExcludes, mIncludes);
+                } catch (PackageManager.NameNotFoundException e) {
+                    // Throw it as an IOException
+                    throw new IOException(e);
+                } finally {
+                    if (parser != null) {
+                        parser.close();
+                    }
+                }
+            }
+        }
+
+        @VisibleForTesting
+        public void parseBackupSchemeFromXmlLocked(XmlPullParser parser,
+                                                   Set<String> excludes,
+                                                   Map<String, Set<String>> includes)
+                throws IOException, XmlPullParserException {
+            int event = parser.getEventType(); // START_DOCUMENT
+            while (event != XmlPullParser.START_TAG) {
+                event = parser.next();
+            }
+
+            if (!"full-backup-content".equals(parser.getName())) {
+                throw new XmlPullParserException("Xml file didn't start with correct tag" +
+                        " (<full-backup-content>). Found \"" + parser.getName() + "\"");
+            }
+
+            if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                Log.v(TAG_XML_PARSER, "\n");
+                Log.v(TAG_XML_PARSER, "====================================================");
+                Log.v(TAG_XML_PARSER, "Found valid fullBackupContent; parsing xml resource.");
+                Log.v(TAG_XML_PARSER, "====================================================");
+                Log.v(TAG_XML_PARSER, "");
+            }
+
+            while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
+                switch (event) {
+                    case XmlPullParser.START_TAG:
+                        validateInnerTagContents(parser);
+                        final String domainFromXml = parser.getAttributeValue(null, "domain");
+                        final File domainDirectory =
+                                getDirectoryForCriteriaDomain(domainFromXml);
+                        if (domainDirectory == null) {
+                            if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                                Log.v(TAG_XML_PARSER, "...parsing \"" + parser.getName() + "\": "
+                                        + "domain=\"" + domainFromXml + "\" invalid; skipping");
+                            }
+                            break;
+                        }
+                        final File canonicalFile =
+                                extractCanonicalFile(domainDirectory,
+                                        parser.getAttributeValue(null, "path"));
+                        if (canonicalFile == null) {
+                            break;
+                        }
+
+                        Set<String> activeSet = parseCurrentTagForDomain(
+                                parser, excludes, includes, domainFromXml);
+                        activeSet.add(canonicalFile.getCanonicalPath());
+                        if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                            Log.v(TAG_XML_PARSER, "...parsed " + canonicalFile.getCanonicalPath()
+                                    + " for domain \"" + domainFromXml + "\"");
+                        }
+
+                        // Special case journal files (not dirs) for sqlite database. frowny-face.
+                        // Note that for a restore, the file is never a directory (b/c it doesn't
+                        // exist). We have no way of knowing a priori whether or not to expect a
+                        // dir, so we add the -journal anyway to be safe.
+                        if ("database".equals(domainFromXml) && !canonicalFile.isDirectory()) {
+                            final String canonicalJournalPath =
+                                    canonicalFile.getCanonicalPath() + "-journal";
+                            activeSet.add(canonicalJournalPath);
+                            if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                                Log.v(TAG_XML_PARSER, "...automatically generated "
+                                        + canonicalJournalPath + ". Ignore if nonexistant.");
+                            }
+                        }
+                }
+            }
+            if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                Log.v(TAG_XML_PARSER, "\n");
+                Log.v(TAG_XML_PARSER, "Xml resource parsing complete.");
+                Log.v(TAG_XML_PARSER, "Final tally.");
+                Log.v(TAG_XML_PARSER, "Includes:");
+                if (includes.isEmpty()) {
+                    Log.v(TAG_XML_PARSER, "  ...nothing specified (This means the entirety of app"
+                            + " data minus excludes)");
+                } else {
+                    for (Map.Entry<String, Set<String>> entry : includes.entrySet()) {
+                        Log.v(TAG_XML_PARSER, "  domain=" + entry.getKey());
+                        for (String includeData : entry.getValue()) {
+                            Log.v(TAG_XML_PARSER, "  " + includeData);
+                        }
+                    }
+                }
+
+                Log.v(TAG_XML_PARSER, "Excludes:");
+                if (excludes.isEmpty()) {
+                    Log.v(TAG_XML_PARSER, "  ...nothing to exclude.");
+                } else {
+                    for (String excludeData : excludes) {
+                        Log.v(TAG_XML_PARSER, "  " + excludeData);
+                    }
+                }
+
+                Log.v(TAG_XML_PARSER, "  ");
+                Log.v(TAG_XML_PARSER, "====================================================");
+                Log.v(TAG_XML_PARSER, "\n");
+            }
+        }
+
+        private Set<String> parseCurrentTagForDomain(XmlPullParser parser,
+                                                     Set<String> excludes,
+                                                     Map<String, Set<String>> includes,
+                                                     String domain)
+                throws XmlPullParserException {
+            if ("include".equals(parser.getName())) {
+                final String domainToken = getTokenForXmlDomain(domain);
+                Set<String> includeSet = includes.get(domainToken);
+                if (includeSet == null) {
+                    includeSet = new ArraySet<String>();
+                    includes.put(domainToken, includeSet);
+                }
+                return includeSet;
+            } else if ("exclude".equals(parser.getName())) {
+                return excludes;
+            } else {
+                // Unrecognised tag => hard failure.
+                if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                    Log.v(TAG_XML_PARSER, "Invalid tag found in xml \""
+                            + parser.getName() + "\"; aborting operation.");
+                }
+                throw new XmlPullParserException("Unrecognised tag in backup" +
+                        " criteria xml (" + parser.getName() + ")");
+            }
+        }
+
+        /**
+         * Map xml specified domain (human-readable, what clients put in their manifest's xml) to
+         * BackupAgent internal data token.
+         * @return null if the xml domain was invalid.
+         */
+        private String getTokenForXmlDomain(String xmlDomain) {
+            if ("root".equals(xmlDomain)) {
+                return FullBackup.ROOT_TREE_TOKEN;
+            } else if ("file".equals(xmlDomain)) {
+                return FullBackup.DATA_TREE_TOKEN;
+            } else if ("database".equals(xmlDomain)) {
+                return FullBackup.DATABASE_TREE_TOKEN;
+            } else if ("sharedpref".equals(xmlDomain)) {
+                return FullBackup.SHAREDPREFS_TREE_TOKEN;
+            } else if ("external".equals(xmlDomain)) {
+                return FullBackup.MANAGED_EXTERNAL_TREE_TOKEN;
+            } else {
+                return null;
+            }
+        }
+
+        /**
+         *
+         * @param domain Directory where the specified file should exist. Not null.
+         * @param filePathFromXml parsed from xml. Not sanitised before calling this function so may be
+         *                        null.
+         * @return The canonical path of the file specified or null if no such file exists.
+         */
+        private File extractCanonicalFile(File domain, String filePathFromXml) {
+            if (filePathFromXml == null) {
+                // Allow things like <include domain="sharedpref"/>
+                filePathFromXml = "";
+            }
+            if (filePathFromXml.contains("..")) {
+                if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                    Log.v(TAG_XML_PARSER, "...resolved \"" + domain.getPath() + " " + filePathFromXml
+                            + "\", but the \"..\" path is not permitted; skipping.");
+                }
+                return null;
+            }
+            if (filePathFromXml.contains("//")) {
+                if (Log.isLoggable(TAG_XML_PARSER, Log.VERBOSE)) {
+                    Log.v(TAG_XML_PARSER, "...resolved \"" + domain.getPath() + " " + filePathFromXml
+                            + "\", which contains the invalid \"//\" sequence; skipping.");
+                }
+                return null;
+            }
+            return new File(domain, filePathFromXml);
+        }
+
+        /**
+         * @param domain parsed from xml. Not sanitised before calling this function so may be null.
+         * @return The directory relevant to the domain specified.
+         */
+        private File getDirectoryForCriteriaDomain(String domain) {
+            if (TextUtils.isEmpty(domain)) {
+                return null;
+            }
+            if ("file".equals(domain)) {
+                return FILES_DIR;
+            } else if ("database".equals(domain)) {
+                return DATABASE_DIR;
+            } else if ("root".equals(domain)) {
+                return ROOT_DIR;
+            } else if ("sharedpref".equals(domain)) {
+                return SHAREDPREF_DIR;
+            } else if ("external".equals(domain)) {
+                return EXTERNAL_DIR;
+            } else {
+                return null;
+            }
+        }
+
+        /**
+         * Let's be strict about the type of xml the client can write. If we see anything untoward,
+         * throw an XmlPullParserException.
+         */
+        private void validateInnerTagContents(XmlPullParser parser)
+                throws XmlPullParserException {
+            if (parser.getAttributeCount() > 2) {
+                throw new XmlPullParserException("At most 2 tag attributes allowed for \""
+                        + parser.getName() + "\" tag (\"domain\" & \"path\".");
+            }
+            if (!"include".equals(parser.getName()) && !"exclude".equals(parser.getName())) {
+                throw new XmlPullParserException("A valid tag is one of \"<include/>\" or" +
+                        " \"<exclude/>. You provided \"" + parser.getName() + "\"");
+            }
+        }
+    }
 }
diff --git a/core/java/android/app/trust/ITrustManager.aidl b/core/java/android/app/trust/ITrustManager.aidl
index 17cff5c..32951d9 100644
--- a/core/java/android/app/trust/ITrustManager.aidl
+++ b/core/java/android/app/trust/ITrustManager.aidl
@@ -32,4 +32,5 @@
     void reportKeyguardShowingChanged();
     boolean isDeviceLocked(int userId);
     boolean isDeviceSecure(int userId);
+    boolean hasUserAuthenticatedSinceBoot(int userId);
 }
diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java
index b5c5317..8cab565 100644
--- a/core/java/android/app/trust/TrustManager.java
+++ b/core/java/android/app/trust/TrustManager.java
@@ -147,6 +147,23 @@
         }
     }
 
+    /**
+     * Checks whether the specified user has been authenticated since the last boot.
+     *
+     * @param userId the user id of the user to check for
+     * @return true if the user has authenticated since boot, false otherwise
+     *
+     * Requires the {@link android.Manifest.permission#ACCESS_KEYGUARD_SECURE_STORAGE} permission.
+     */
+    public boolean hasUserAuthenticatedSinceBoot(int userId) {
+        try {
+            return mService.hasUserAuthenticatedSinceBoot(userId);
+        } catch (RemoteException e) {
+            onError(e);
+            return false;
+        }
+    }
+
     private void onError(Exception e) {
         Log.e(TAG, "Error while calling TrustManagerService", e);
     }
diff --git a/core/java/android/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl
index 23659e3..254408a 100644
--- a/core/java/android/app/usage/IUsageStatsManager.aidl
+++ b/core/java/android/app/usage/IUsageStatsManager.aidl
@@ -30,6 +30,6 @@
     ParceledListSlice queryConfigurationStats(int bucketType, long beginTime, long endTime,
             String callingPackage);
     UsageEvents queryEvents(long beginTime, long endTime, String callingPackage);
-    void setAppIdle(String packageName, boolean idle, int userId);
-    boolean isAppIdle(String packageName, int userId);
+    void setAppInactive(String packageName, boolean inactive, int userId);
+    boolean isAppInactive(String packageName, int userId);
 }
diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java
index 8a01d66..c74bbdd 100644
--- a/core/java/android/app/usage/UsageStatsManager.java
+++ b/core/java/android/app/usage/UsageStatsManager.java
@@ -220,15 +220,15 @@
     }
 
     /**
-     * Returns whether the specified app is currently considered idle. This will be true if the
+     * Returns whether the specified app is currently considered inactive. This will be true if the
      * app hasn't been used directly or indirectly for a period of time defined by the system. This
      * could be of the order of several hours or days.
      * @param packageName The package name of the app to query
-     * @return whether the app is currently considered idle
+     * @return whether the app is currently considered inactive
      */
-    public boolean isAppIdle(String packageName) {
+    public boolean isAppInactive(String packageName) {
         try {
-            return mService.isAppIdle(packageName, UserHandle.myUserId());
+            return mService.isAppInactive(packageName, UserHandle.myUserId());
         } catch (RemoteException e) {
             // fall through and return default
         }
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 00248cc..1205708 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -1053,6 +1053,20 @@
         }
     }
 
+    /**
+     * @hide
+     */
+    public boolean isBoundWidgetPackage(String packageName, int userId) {
+        if (mService == null) {
+            return false;
+        }
+        try {
+            return mService.isBoundWidgetPackage(packageName, userId);
+        } catch (RemoteException re) {
+            throw new RuntimeException("system server dead?", re);
+        }
+    }
+
     private boolean bindAppWidgetIdIfAllowed(int appWidgetId, int profileId,
             ComponentName provider, Bundle options) {
         if (mService == null) {
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 3044a94..ec6f18d 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -28,13 +28,11 @@
 import android.bluetooth.le.ScanResult;
 import android.bluetooth.le.ScanSettings;
 import android.content.Context;
+import android.os.Binder;
 import android.os.IBinder;
 import android.os.ParcelUuid;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.app.ActivityThread;
-import android.os.SystemProperties;
-import android.os.Binder;
 import android.util.Log;
 import android.util.Pair;
 
@@ -389,7 +387,7 @@
      * @hide
      */
     public static final String ACTION_BLE_STATE_CHANGED =
-        "anrdoid.bluetooth.adapter.action.BLE_STATE_CHANGED";
+        "android.bluetooth.adapter.action.BLE_STATE_CHANGED";
 
     /**
      * Broadcast Action: The notifys Bluetooth ACL connected event. This will be
@@ -632,24 +630,6 @@
     }
 
     /**
-     * Returns true if LE only mode is enabled, that is apps
-     * have authorization to turn only BT ON and the calling
-     * app has privilage to do so
-     */
-    private boolean isLEAlwaysOnEnabled() {
-        boolean ret = false;
-        if (SystemProperties.getBoolean("ro.bluetooth.blealwayson", true) == true) {
-            Log.v(TAG, "LE always on mode is enabled");
-            // TODO: System API authorization check
-            ret = true;
-        } else {
-            Log.v(TAG, "LE always on mode is disabled");
-            ret = false;
-        }
-        return ret;
-    }
-
-    /**
      * Turns off Bluetooth LE which was earlier turned on by calling EnableBLE().
      *
      * <p> If the internal Adapter state is STATE_BLE_ON, this would trigger the transition
@@ -676,7 +656,7 @@
      * @hide
      */
     public boolean disableBLE() {
-        if (isLEAlwaysOnEnabled() != true) return false;
+        if (!isBleScanAlwaysAvailable()) return false;
 
         int state = getLeState();
         if (state == BluetoothAdapter.STATE_ON) {
@@ -738,7 +718,7 @@
      * @hide
      */
     public boolean enableBLE() {
-        if (isLEAlwaysOnEnabled() != true) return false;
+        if (!isBleScanAlwaysAvailable()) return false;
 
         if (isLeEnabled() == true) {
             if (DBG) Log.d(TAG, "enableBLE(): BT is already enabled..!");
@@ -1243,8 +1223,12 @@
      */
     @SystemApi
     public boolean isBleScanAlwaysAvailable() {
-        // TODO: implement after Settings UI change.
-        return false;
+        try {
+            return mManagerService.isBleScanAlwaysAvailable();
+        } catch (RemoteException e) {
+            Log.e(TAG, "remote expection when calling isBleScanAlwaysAvailable", e);
+            return false;
+        }
     }
 
     /**
@@ -1268,7 +1252,7 @@
      * @return true if chipset supports on-chip filtering
      */
     public boolean isOffloadedFilteringSupported() {
-        if (getState() != STATE_ON) return false;
+        if (!getLeAccess()) return false;
         try {
             return mService.isOffloadedFilteringSupported();
         } catch (RemoteException e) {
@@ -1283,7 +1267,7 @@
      * @return true if chipset supports on-chip scan batching
      */
     public boolean isOffloadedScanBatchingSupported() {
-        if (getState() != STATE_ON) return false;
+        if (!getLeAccess()) return false;
         try {
             return mService.isOffloadedScanBatchingSupported();
         } catch (RemoteException e) {
@@ -1299,7 +1283,7 @@
      * @hide
      */
     public boolean isHardwareTrackingFiltersAvailable() {
-        if (getState() != STATE_ON) return false;
+        if (!getLeAccess()) return false;
         try {
             IBluetoothGatt iGatt = mManagerService.getBluetoothGatt();
             if (iGatt == null) {
@@ -1705,7 +1689,8 @@
      * @param context Context of the application
      * @param listener The service Listener for connection callbacks.
      * @param profile The Bluetooth profile; either {@link BluetoothProfile#HEALTH},
-     *                {@link BluetoothProfile#HEADSET} or {@link BluetoothProfile#A2DP}.
+     *                {@link BluetoothProfile#HEADSET}, {@link BluetoothProfile#A2DP}.
+     *                {@link BluetoothProfile#GATT} or {@link BluetoothProfile#GATT_SERVER}.
      * @return true on success, false on error
      */
     public boolean getProfileProxy(Context context, BluetoothProfile.ServiceListener listener,
diff --git a/core/java/android/bluetooth/BluetoothHealthCallback.java b/core/java/android/bluetooth/BluetoothHealthCallback.java
index baf2ade..128376f 100644
--- a/core/java/android/bluetooth/BluetoothHealthCallback.java
+++ b/core/java/android/bluetooth/BluetoothHealthCallback.java
@@ -17,6 +17,7 @@
 
 package android.bluetooth;
 
+import android.annotation.BinderThread;
 import android.os.ParcelFileDescriptor;
 import android.util.Log;
 
@@ -39,6 +40,7 @@
      *            {@link BluetoothHealth#APP_CONFIG_UNREGISTRATION_SUCCESS} or
      *            {@link BluetoothHealth#APP_CONFIG_UNREGISTRATION_FAILURE}
      */
+    @BinderThread
     public void onHealthAppConfigurationStatusChange(BluetoothHealthAppConfiguration config,
             int status) {
         Log.d(TAG, "onHealthAppConfigurationStatusChange: " + config + "Status: " + status);
@@ -58,6 +60,7 @@
      * @param channelId The id associated with the channel. This id will be used
      *            in future calls like when disconnecting the channel.
      */
+    @BinderThread
     public void onHealthChannelStateChange(BluetoothHealthAppConfiguration config,
             BluetoothDevice device, int prevState, int newState, ParcelFileDescriptor fd,
             int channelId) {
diff --git a/core/java/android/bluetooth/BluetoothSap.java b/core/java/android/bluetooth/BluetoothSap.java
index 7b4c6f9..014cb22 100644
--- a/core/java/android/bluetooth/BluetoothSap.java
+++ b/core/java/android/bluetooth/BluetoothSap.java
@@ -28,13 +28,41 @@
 import android.os.ServiceManager;
 import android.util.Log;
 
-
+/**
+ * This class provides the APIs to control the Bluetooth SIM
+ * Access Profile (SAP).
+ *
+ * <p>BluetoothSap is a proxy object for controlling the Bluetooth
+ * Service via IPC. Use {@link BluetoothAdapter#getProfileProxy} to get
+ * the BluetoothSap proxy object.
+ *
+ * <p>Each method is protected with its appropriate permission.
+ * @hide
+ */
 public final class BluetoothSap implements BluetoothProfile {
 
     private static final String TAG = "BluetoothSap";
     private static final boolean DBG = true;
     private static final boolean VDBG = false;
 
+    /**
+     * Intent used to broadcast the change in connection state of the profile.
+     *
+     * <p>This intent will have 4 extras:
+     * <ul>
+     *   <li> {@link #EXTRA_STATE} - The current state of the profile. </li>
+     *   <li> {@link #EXTRA_PREVIOUS_STATE}- The previous state of the profile.</li>
+     *   <li> {@link BluetoothDevice#EXTRA_DEVICE} - The remote device. </li>
+     * </ul>
+     *
+     * <p>{@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} can be any of
+     * {@link #STATE_DISCONNECTED}, {@link #STATE_CONNECTING},
+     * {@link #STATE_CONNECTED}, {@link #STATE_DISCONNECTING}.
+     *
+     * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission to
+     * receive.
+     * @hide
+     */
     public static final String ACTION_CONNECTION_STATE_CHANGED =
         "android.bluetooth.sap.profile.action.CONNECTION_STATE_CHANGED";
 
@@ -43,12 +71,22 @@
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
 
-    /** There was an error trying to obtain the state */
-    public static final int STATE_ERROR        = -1;
+    /**
+     * There was an error trying to obtain the state.
+     * @hide
+     */
+    public static final int STATE_ERROR = -1;
 
-    public static final int RESULT_FAILURE = 0;
+    /**
+     * Connection state change succceeded.
+     * @hide
+     */
     public static final int RESULT_SUCCESS = 1;
-    /** Connection canceled before completion. */
+
+    /**
+     * Connection canceled before completion.
+     * @hide
+     */
     public static final int RESULT_CANCELED = 2;
 
     final private IBluetoothStateChangeCallback mBluetoothStateChangeCallback =
@@ -124,6 +162,7 @@
      * Other public functions of BluetoothSap will return default error
      * results once close() has been called. Multiple invocations of close()
      * are ok.
+     * @hide
      */
     public synchronized void close() {
         IBluetoothManager mgr = mAdapter.getBluetoothManager();
@@ -152,6 +191,7 @@
      * Get the current state of the BluetoothSap service.
      * @return One of the STATE_ return codes, or STATE_ERROR if this proxy
      *         object is currently not connected to the Sap service.
+     * @hide
      */
     public int getState() {
         if (VDBG) log("getState()");
@@ -171,6 +211,7 @@
      * @return The remote Bluetooth device, or null if not in connected or
      *         connecting state, or if this proxy object is not connected to
      *         the Sap service.
+     * @hide
      */
     public BluetoothDevice getClient() {
         if (VDBG) log("getClient()");
@@ -189,6 +230,7 @@
      * Returns true if the specified Bluetooth device is connected.
      * Returns false if not connected, or if this proxy object is not
      * currently connected to the Sap service.
+     * @hide
      */
     public boolean isConnected(BluetoothDevice device) {
         if (VDBG) log("isConnected(" + device + ")");
@@ -206,6 +248,7 @@
     /**
      * Initiate connection. Initiation of outgoing connections is not
      * supported for SAP server.
+     * @hide
      */
     public boolean connect(BluetoothDevice device) {
         if (DBG) log("connect(" + device + ")" + "not supported for SAPS");
@@ -218,6 +261,7 @@
      * @param device Remote Bluetooth Device
      * @return false on error,
      *               true otherwise
+     * @hide
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
@@ -238,6 +282,7 @@
      * Get the list of connected devices. Currently at most one.
      *
      * @return list of connected devices
+     * @hide
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (DBG) log("getConnectedDevices()");
@@ -257,6 +302,7 @@
      * Get the list of devices matching specified states. Currently at most one.
      *
      * @return list of matching devices
+     * @hide
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (DBG) log("getDevicesMatchingStates()");
@@ -276,6 +322,7 @@
      * Get connection state of device
      *
      * @return device connection state
+     * @hide
      */
     public int getConnectionState(BluetoothDevice device) {
         if (DBG) log("getConnectionState(" + device + ")");
@@ -300,6 +347,7 @@
      * @param device Paired bluetooth device
      * @param priority
      * @return true if priority is set, false on error
+     * @hide
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) log("setPriority(" + device + ", " + priority + ")");
@@ -325,6 +373,7 @@
      *
      * @param device Bluetooth device
      * @return priority of the device
+     * @hide
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) log("getPriority(" + device + ")");
diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java
index 5702d11..5cf2300 100644
--- a/core/java/android/bluetooth/BluetoothSocket.java
+++ b/core/java/android/bluetooth/BluetoothSocket.java
@@ -91,9 +91,13 @@
     public static final int MAX_RFCOMM_CHANNEL = 30;
     /*package*/ static final int MAX_L2CAP_PACKAGE_SIZE = 0xFFFF;
 
-    /** Keep TYPE_ fields in sync with BluetoothSocket.cpp */
+    /** RFCOMM socket */
     public static final int TYPE_RFCOMM = 1;
+
+    /** SCO socket */
     public static final int TYPE_SCO = 2;
+
+    /** L2CAP socket */
     public static final int TYPE_L2CAP = 3;
 
     /*package*/ static final int EBADFD = 77;
@@ -578,8 +582,8 @@
     }
 
     /**
-     * Get the type of the underlying connection
-     * @return one of TYPE_
+     * Get the type of the underlying connection.
+     * @return one of {@link #TYPE_RFCOMM}, {@link #TYPE_SCO} or {@link #TYPE_L2CAP}
      */
     public int getConnectionType() {
         return mType;
diff --git a/core/java/android/bluetooth/IBluetoothManager.aidl b/core/java/android/bluetooth/IBluetoothManager.aidl
index 8d1ce99..0b81ee8 100644
--- a/core/java/android/bluetooth/IBluetoothManager.aidl
+++ b/core/java/android/bluetooth/IBluetoothManager.aidl
@@ -44,6 +44,8 @@
 
     String getAddress();
     String getName();
+
+    boolean isBleScanAlwaysAvailable();
     int updateBleAppCount(IBinder b, boolean enable);
     boolean isBleAppPresent();
 }
diff --git a/core/java/android/bluetooth/le/ScanCallback.java b/core/java/android/bluetooth/le/ScanCallback.java
index 27b96bd..61b2e78 100644
--- a/core/java/android/bluetooth/le/ScanCallback.java
+++ b/core/java/android/bluetooth/le/ScanCallback.java
@@ -53,8 +53,10 @@
     /**
      * Callback when a BLE advertisement has been found.
      *
-     * @param callbackType Determines how this callback was triggered. Could be of
-     *            {@link ScanSettings#CALLBACK_TYPE_ALL_MATCHES}
+     * @param callbackType Determines how this callback was triggered. Could be one of
+     *            {@link ScanSettings#CALLBACK_TYPE_ALL_MATCHES},
+     *            {@link ScanSettings#CALLBACK_TYPE_FIRST_MATCH} or
+     *            {@link ScanSettings#CALLBACK_TYPE_MATCH_LOST}
      * @param result A Bluetooth LE scan result.
      */
     public void onScanResult(int callbackType, ScanResult result) {
diff --git a/core/java/android/bluetooth/le/ScanSettings.java b/core/java/android/bluetooth/le/ScanSettings.java
index 123514e..4eeb577 100644
--- a/core/java/android/bluetooth/le/ScanSettings.java
+++ b/core/java/android/bluetooth/le/ScanSettings.java
@@ -59,17 +59,13 @@
     /**
      * A result callback is only triggered for the first advertisement packet received that matches
      * the filter criteria.
-     * @hide
      */
-    @SystemApi
     public static final int CALLBACK_TYPE_FIRST_MATCH = 2;
 
     /**
      * Receive a callback when advertisements are no longer received from a device that has been
      * previously reported by a first match callback.
-     * @hide
      */
-    @SystemApi
     public static final int CALLBACK_TYPE_MATCH_LOST = 4;
 
 
@@ -78,21 +74,18 @@
      */
     /**
      * Match one advertisement per filter
-     * @hide
      */
     public static final int MATCH_NUM_ONE_ADVERTISEMENT = 1;
 
     /**
      * Match few advertisement per filter, depends on current capability and availibility of
      * the resources in hw
-     * @hide
      */
     public static final int MATCH_NUM_FEW_ADVERTISEMENT = 2;
 
     /**
      * Match as many advertisement per filter as hw could allow, depends on current
      * capability and availibility of the resources in hw
-     * @hide
      */
     public static final int MATCH_NUM_MAX_ADVERTISEMENT = 3;
 
@@ -100,14 +93,12 @@
     /**
      * In Aggressive mode, hw will determine a match sooner even with feeble signal strength
      * and few number of sightings/match in a duration.
-     * @hide
      */
     public static final int MATCH_MODE_AGGRESSIVE = 1;
 
     /**
      * For sticky mode, higher threshold of signal strength and sightings is required
      * before reporting by hw
-     * @hide
      */
     public static final int MATCH_MODE_STICKY = 2;
 
@@ -187,7 +178,7 @@
         mScanResultType = scanResultType;
         mReportDelayMillis = reportDelayMillis;
         mNumOfMatchesPerFilter = numOfMatchesPerFilter;
-        mMatchMode = numOfMatchesPerFilter;
+        mMatchMode = matchMode;
     }
 
     private ScanSettings(Parcel in) {
@@ -324,7 +315,6 @@
          *              {@link ScanSettings#MATCH_NUM_FEW_ADVERTISEMENT} or
          *              {@link ScanSettings#MATCH_NUM_MAX_ADVERTISEMENT}
          * @throws IllegalArgumentException If the {@code matchMode} is invalid.
-         * @hide
          */
         public Builder setNumOfMatches(int numOfMatches) {
             if (numOfMatches < MATCH_NUM_ONE_ADVERTISEMENT
@@ -342,7 +332,6 @@
          *              {@link ScanSettings#MATCH_MODE_AGGRESSIVE} or
          *              {@link ScanSettings#MATCH_MODE_STICKY}
          * @throws IllegalArgumentException If the {@code matchMode} is invalid.
-         * @hide
          */
         public Builder setMatchMode(int matchMode) {
             if (matchMode < MATCH_MODE_AGGRESSIVE
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 0bd60ef..6a98950 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -389,24 +389,30 @@
     }
 
     /**
-     * Return a localized string from the application's package's
+     * Returns a localized string from the application's package's
      * default string table.
      *
      * @param resId Resource id for the string
+     * @return The string data associated with the resource, stripped of styled
+     *         text information.
      */
+    @NonNull
     public final String getString(@StringRes int resId) {
         return getResources().getString(resId);
     }
 
     /**
-     * Return a localized formatted string from the application's package's
+     * Returns a localized formatted string from the application's package's
      * default string table, substituting the format arguments as defined in
      * {@link java.util.Formatter} and {@link java.lang.String#format}.
      *
      * @param resId Resource id for the format string
-     * @param formatArgs The format arguments that will be used for substitution.
+     * @param formatArgs The format arguments that will be used for
+     *                   substitution.
+     * @return The string data associated with the resource, formatted and
+     *         stripped of styled text information.
      */
-
+    @NonNull
     public final String getString(@StringRes int resId, Object... formatArgs) {
         return getResources().getString(resId, formatArgs);
     }
@@ -3127,16 +3133,6 @@
     public static final String RADIO_SERVICE = "radio";
 
     /**
-     * Use with {@link #getSystemService} to retrieve a
-     * {@link android.media.AudioDevicesManager} for handling device enumeration & notification.
-     *
-     * @see #getSystemService
-     * @see android.media.AudioDevicesManager
-     */
-    public static final String AUDIO_DEVICES_SERVICE = "audio_devices_manager";
-
-
-    /**
      * Determine whether the given permission is allowed for a particular
      * process and user ID running in the system.
      *
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 54fe786..7d76760 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -17,6 +17,7 @@
 package android.content;
 
 import android.content.pm.ApplicationInfo;
+import android.os.ResultReceiver;
 import android.provider.MediaStore;
 import android.util.ArraySet;
 
@@ -2588,21 +2589,6 @@
             "android.intent.action.GET_RESTRICTION_ENTRIES";
 
     /**
-     * @hide
-     * Activity to challenge the user for a PIN that was configured when setting up
-     * restrictions. Restrictions include blocking of apps and preventing certain user operations,
-     * controlled by {@link android.os.UserManager#setUserRestrictions(Bundle).
-     * Launch the activity using
-     * {@link android.app.Activity#startActivityForResult(Intent, int)} and check if the
-     * result is {@link android.app.Activity#RESULT_OK} for a successful response to the
-     * challenge.<p/>
-     * Before launching this activity, make sure that there is a PIN in effect, by calling
-     * {@link android.os.UserManager#hasRestrictionsChallenge()}.
-     */
-    public static final String ACTION_RESTRICTIONS_CHALLENGE =
-            "android.intent.action.RESTRICTIONS_CHALLENGE";
-
-    /**
      * Sent the first time a user is starting, to allow system apps to
      * perform one time initialization.  (This will not be seen by third
      * party applications because a newly initialized user does not have any
@@ -3291,11 +3277,79 @@
 
     /**
      * An Intent describing the choices you would like shown with
-     * {@link #ACTION_PICK_ACTIVITY}.
+     * {@link #ACTION_PICK_ACTIVITY} or {@link #ACTION_CHOOSER}.
      */
     public static final String EXTRA_INTENT = "android.intent.extra.INTENT";
 
     /**
+     * An Intent[] describing additional, alternate choices you would like shown with
+     * {@link #ACTION_CHOOSER}.
+     *
+     * <p>An app may be capable of providing several different payload types to complete a
+     * user's intended action. For example, an app invoking {@link #ACTION_SEND} to share photos
+     * with another app may use EXTRA_ALTERNATE_INTENTS to have the chooser transparently offer
+     * several different supported sending mechanisms for sharing, such as the actual "image/*"
+     * photo data or a hosted link where the photos can be viewed.</p>
+     *
+     * <p>The intent present in {@link #EXTRA_INTENT} will be treated as the
+     * first/primary/preferred intent in the set. Additional intents specified in
+     * this extra are ordered; by default intents that appear earlier in the array will be
+     * preferred over intents that appear later in the array as matches for the same
+     * target component. To alter this preference, a calling app may also supply
+     * {@link #EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER}.</p>
+     */
+    public static final String EXTRA_ALTERNATE_INTENTS = "android.intent.extra.ALTERNATE_INTENTS";
+
+    /**
+     * An {@link IntentSender} for an Activity that will be invoked when the user makes a selection
+     * from the chooser activity presented by {@link #ACTION_CHOOSER}.
+     *
+     * <p>An app preparing an action for another app to complete may wish to allow the user to
+     * disambiguate between several options for completing the action based on the chosen target
+     * or otherwise refine the action before it is invoked.
+     * </p>
+     *
+     * <p>When sent, this IntentSender may be filled in with the following extras:</p>
+     * <ul>
+     *     <li>{@link #EXTRA_INTENT} The first intent that matched the user's chosen target</li>
+     *     <li>{@link #EXTRA_ALTERNATE_INTENTS} Any additional intents that also matched the user's
+     *     chosen target beyond the first</li>
+     *     <li>{@link #EXTRA_RESULT_RECEIVER} A {@link ResultReceiver} that the refinement activity
+     *     should fill in and send once the disambiguation is complete</li>
+     * </ul>
+     */
+    public static final String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER
+            = "android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER";
+
+    /**
+     * A {@link ResultReceiver} used to return data back to the sender.
+     *
+     * <p>Used to complete an app-specific
+     * {@link #EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER refinement} for {@link #ACTION_CHOOSER}.</p>
+     *
+     * <p>If {@link #EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER} is present in the intent
+     * used to start a {@link #ACTION_CHOOSER} activity this extra will be
+     * {@link #fillIn(Intent, int) filled in} to that {@link IntentSender} and sent
+     * when the user selects a target component from the chooser. It is up to the recipient
+     * to send a result to this ResultReceiver to signal that disambiguation is complete
+     * and that the chooser should invoke the user's choice.</p>
+     *
+     * <p>The disambiguator should provide a Bundle to the ResultReceiver with an intent
+     * assigned to the key {@link #EXTRA_INTENT}. This supplied intent will be used by the chooser
+     * to match and fill in the final Intent or ChooserTarget before starting it.
+     * The supplied intent must {@link #filterEquals(Intent) match} one of the intents from
+     * {@link #EXTRA_INTENT} or {@link #EXTRA_ALTERNATE_INTENTS} passed to
+     * {@link #EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER} to be accepted.</p>
+     *
+     * <p>The result code passed to the ResultReceiver should be
+     * {@link android.app.Activity#RESULT_OK} if the refinement succeeded and the supplied intent's
+     * target in the chooser should be started, or {@link android.app.Activity#RESULT_CANCELED} if
+     * the chooser should finish without starting a target.</p>
+     */
+    public static final String EXTRA_RESULT_RECEIVER
+            = "android.intent.extra.RESULT_RECEIVER";
+
+    /**
      * A CharSequence dialog title to provide to the user when used with a
      * {@link #ACTION_CHOOSER}.
      */
@@ -3311,14 +3365,6 @@
     public static final String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
 
     /**
-     * A Parcelable[] of {@link android.service.chooser.ChooserTarget ChooserTarget} objects
-     * as set with {@link #putExtra(String, Parcelable[])} representing additional app-specific
-     * targets to place at the front of the list of choices. Shown to the user with
-     * {@link #ACTION_CHOOSER}.
-     */
-    public static final String EXTRA_CHOOSER_TARGETS = "android.intent.extra.CHOOSER_TARGETS";
-
-    /**
      * A Bundle forming a mapping of potential target package names to different extras Bundles
      * to add to the default intent extras in {@link #EXTRA_INTENT} when used with
      * {@link #ACTION_CHOOSER}. Each key should be a package name. The package need not
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 16f6b1e..43cc63b 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -570,13 +570,16 @@
         Configuration.NATIVE_CONFIG_DENSITY,                // DENSITY
         Configuration.NATIVE_CONFIG_LAYOUTDIR,              // LAYOUT DIRECTION
     };
-    /** @hide
+
+    /**
      * Convert Java change bits to native.
+     *
+     * @hide
      */
     public static int activityInfoConfigToNative(int input) {
         int output = 0;
-        for (int i=0; i<CONFIG_NATIVE_BITS.length; i++) {
-            if ((input&(1<<i)) != 0) {
+        for (int i = 0; i < CONFIG_NATIVE_BITS.length; i++) {
+            if ((input & (1 << i)) != 0) {
                 output |= CONFIG_NATIVE_BITS[i];
             }
         }
@@ -584,6 +587,21 @@
     }
 
     /**
+     * Convert native change bits to Java.
+     *
+     * @hide
+     */
+    public static int activityInfoConfigNativeToJava(int input) {
+        int output = 0;
+        for (int i = 0; i < CONFIG_NATIVE_BITS.length; i++) {
+            if ((input & CONFIG_NATIVE_BITS[i]) != 0) {
+                output |= (1 << i);
+            }
+        }
+        return output;
+    }
+
+    /**
      * @hide
      * Unfortunately some developers (OpenFeint I am looking at you) have
      * compared the configChanges bit field against absolute values, so if we
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 6c32873..707ef30 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -96,6 +96,21 @@
     public String backupAgentName;
 
     /**
+     * An optional attribute that indicates the app supports automatic backup of app data.
+     * <p>0 is the default and means the app's entire data folder + managed external storage will
+     * be backed up;
+     * Any negative value indicates the app does not support full-data backup, though it may still
+     * want to participate via the traditional key/value backup API;
+     * A positive number specifies an xml resource in which the application has defined its backup
+     * include/exclude criteria.
+     * <p>If android:allowBackup is set to false, this attribute is ignored.
+     *
+     * @see {@link android.content.Context#getNoBackupFilesDir}
+     * @see {@link #FLAG_ALLOW_BACKUP}
+     */
+    public int fullBackupContent = 0;
+
+    /**
      * The default extra UI options for activities in this application.
      * Set from the {@link android.R.attr#uiOptions} attribute in the
      * activity's manifest.
@@ -686,6 +701,11 @@
             pw.println(prefix + "uiOptions=0x" + Integer.toHexString(uiOptions));
         }
         pw.println(prefix + "supportsRtl=" + (hasRtlSupport() ? "true" : "false"));
+        if (fullBackupContent > 0) {
+            pw.println(prefix + "fullBackupContent=@xml/" + fullBackupContent);
+        } else {
+            pw.println(prefix + "fullBackupContent=" + (fullBackupContent < 0 ? "false" : "true"));
+        }
         super.dumpBack(pw, prefix);
     }
 
@@ -763,6 +783,7 @@
         uiOptions = orig.uiOptions;
         backupAgentName = orig.backupAgentName;
         hardwareAccelerated = orig.hardwareAccelerated;
+        fullBackupContent = orig.fullBackupContent;
     }
 
 
@@ -816,6 +837,7 @@
         dest.writeInt(descriptionRes);
         dest.writeInt(uiOptions);
         dest.writeInt(hardwareAccelerated ? 1 : 0);
+        dest.writeInt(fullBackupContent);
     }
 
     public static final Parcelable.Creator<ApplicationInfo> CREATOR
@@ -868,6 +890,7 @@
         descriptionRes = source.readInt();
         uiOptions = source.readInt();
         hardwareAccelerated = source.readInt() != 0;
+        fullBackupContent = source.readInt();
     }
 
     /**
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 0b24594..94b0223 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -96,9 +96,9 @@
 
     void removePermission(String name);
 
-    boolean grantPermission(String packageName, String permissionName, int userId);
+    void grantPermission(String packageName, String permissionName, int userId);
 
-    boolean revokePermission(String packageName, String permissionName, int userId);
+    void revokePermission(String packageName, String permissionName, int userId);
 
     boolean isProtectedBroadcast(String actionName);
 
diff --git a/core/java/android/content/pm/IntentFilterVerificationInfo.java b/core/java/android/content/pm/IntentFilterVerificationInfo.java
index e50b0ff..96000dd 100644
--- a/core/java/android/content/pm/IntentFilterVerificationInfo.java
+++ b/core/java/android/content/pm/IntentFilterVerificationInfo.java
@@ -48,19 +48,18 @@
     private static final String ATTR_PACKAGE_NAME = "packageName";
     private static final String ATTR_STATUS = "status";
 
-    private ArrayList<String> mDomains;
+    private ArraySet<String> mDomains = new ArraySet<>();
     private String mPackageName;
     private int mMainStatus;
 
     public IntentFilterVerificationInfo() {
         mPackageName = null;
-        mDomains = new ArrayList<>();
         mMainStatus = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
     }
 
     public IntentFilterVerificationInfo(String packageName, ArrayList<String> domains) {
         mPackageName = packageName;
-        mDomains = domains;
+        mDomains.addAll(domains);
         mMainStatus = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
     }
 
@@ -73,14 +72,6 @@
         readFromParcel(source);
     }
 
-    public ArrayList<String> getDomains() {
-        return mDomains;
-    }
-
-    public ArraySet<String> getDomainsSet() {
-        return new ArraySet<>(mDomains);
-    }
-
     public String getPackageName() {
         return mPackageName;
     }
@@ -98,6 +89,14 @@
         }
     }
 
+    public ArraySet<String> getDomains() {
+        return mDomains;
+    }
+
+    public void setDomains(ArrayList<String> list) {
+        mDomains = new ArraySet<>(list);
+    }
+
     public String getDomainsString() {
         StringBuilder sb = new StringBuilder();
         for (String str : mDomains) {
@@ -145,7 +144,6 @@
         }
         mMainStatus = status;
 
-        mDomains = new ArrayList<>();
         int outerDepth = parser.getDepth();
         int type;
         while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
@@ -201,15 +199,16 @@
     private void readFromParcel(Parcel source) {
         mPackageName = source.readString();
         mMainStatus = source.readInt();
-        mDomains = new ArrayList<>();
-        source.readStringList(mDomains);
+        ArrayList<String> list = new ArrayList<>();
+        source.readStringList(list);
+        mDomains.addAll(list);
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeString(mPackageName);
         dest.writeInt(mMainStatus);
-        dest.writeStringList(mDomains);
+        dest.writeStringList(new ArrayList<>(mDomains));
     }
 
     public static final Creator<IntentFilterVerificationInfo> CREATOR =
@@ -221,5 +220,4 @@
                     return new IntentFilterVerificationInfo[size];
                 }
             };
-
 }
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 7ff6ec3..51fa075 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1067,6 +1067,13 @@
     public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
 
     /**
+     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
+     * The device has professional audio level of functionality, performance, and acoustics.
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
+
+    /**
      * Feature for {@link #getSystemAvailableFeatures} and
      * {@link #hasSystemFeature}: The device is capable of communicating with
      * other devices via Bluetooth.
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 9596c42..acc27c3 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -2421,8 +2421,8 @@
         if (allowBackup) {
             ai.flags |= ApplicationInfo.FLAG_ALLOW_BACKUP;
 
-            // backupAgent, killAfterRestore, and restoreAnyVersion are only relevant
-            // if backup is possible for the given application.
+            // backupAgent, killAfterRestore, fullBackupContent and restoreAnyVersion are only
+            // relevant if backup is possible for the given application.
             String backupAgent = sa.getNonConfigurationString(
                     com.android.internal.R.styleable.AndroidManifestApplication_backupAgent,
                     Configuration.NATIVE_CONFIG_VERSION);
@@ -2449,6 +2449,20 @@
                     ai.flags |= ApplicationInfo.FLAG_FULL_BACKUP_ONLY;
                 }
             }
+
+            TypedValue v = sa.peekValue(
+                    com.android.internal.R.styleable.AndroidManifestApplication_fullBackupContent);
+            if (v != null && (ai.fullBackupContent = v.resourceId) == 0) {
+                if (DEBUG_BACKUP) {
+                    Slog.v(TAG, "fullBackupContent specified as boolean=" +
+                            (v.data == 0 ? "false" : "true"));
+                }
+                // "false" => -1, "true" => 0
+                ai.fullBackupContent = (v.data == 0 ? -1 : 0);
+            }
+            if (DEBUG_BACKUP) {
+                Slog.v(TAG, "fullBackupContent=" + ai.fullBackupContent + " for " + pkgName);
+            }
         }
 
         TypedValue v = sa.peekValue(
diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java
index a176593..8d96f5c2 100644
--- a/core/java/android/content/res/AssetManager.java
+++ b/core/java/android/content/res/AssetManager.java
@@ -785,10 +785,12 @@
     private native final void deleteTheme(long theme);
     /*package*/ native static final void applyThemeStyle(long theme, int styleRes, boolean force);
     /*package*/ native static final void copyTheme(long dest, long source);
+    /*package*/ native static final void clearTheme(long theme);
     /*package*/ native static final int loadThemeAttributeValue(long theme, int ident,
                                                                 TypedValue outValue,
                                                                 boolean resolve);
     /*package*/ native static final void dumpTheme(long theme, int priority, String tag, String prefix);
+    /*package*/ native static final int getThemeChangingConfigurations(long theme);
 
     private native final long openXmlAssetNative(int cookie, String fileName);
 
diff --git a/core/java/android/content/res/ConfigurationBoundResourceCache.java b/core/java/android/content/res/ConfigurationBoundResourceCache.java
index cde7e84..fecda87 100644
--- a/core/java/android/content/res/ConfigurationBoundResourceCache.java
+++ b/core/java/android/content/res/ConfigurationBoundResourceCache.java
@@ -1,138 +1,58 @@
 /*
-* Copyright (C) 2014 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.content.res;
+ * Copyright (C) 2014 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.
+ */
 
-import android.util.ArrayMap;
-import android.util.LongSparseArray;
-import java.lang.ref.WeakReference;
+package android.content.res;
 
 /**
  * A Cache class which can be used to cache resource objects that are easy to clone but more
  * expensive to inflate.
- * @hide
+ *
+ * @hide For internal use only.
  */
-public class ConfigurationBoundResourceCache<T> {
-
-    private final ArrayMap<String, LongSparseArray<WeakReference<ConstantState<T>>>> mCache =
-            new ArrayMap<String, LongSparseArray<WeakReference<ConstantState<T>>>>();
-
-    final Resources mResources;
+public class ConfigurationBoundResourceCache<T> extends ThemedResourceCache<ConstantState<T>> {
+    private final Resources mResources;
 
     /**
-     * Creates a Resource cache for the given Resources instance.
+     * Creates a cache for the given Resources instance.
      *
-     * @param resources The Resource which can be used when creating new instances.
+     * @param resources the resources to use when creating new instances
      */
     public ConfigurationBoundResourceCache(Resources resources) {
         mResources = resources;
     }
 
     /**
-     * Adds a new item to the cache.
+     * If the resource is cached, creates and returns a new instance of it.
      *
-     * @param key A custom key that uniquely identifies the resource.
-     * @param theme The Theme instance where this resource was loaded.
-     * @param constantState The constant state that can create new instances of the resource.
-     *
+     * @param key a key that uniquely identifies the drawable resource
+     * @param theme the theme where the resource will be used
+     * @return a new instance of the resource, or {@code null} if not in
+     *         the cache
      */
-    public void put(long key, Resources.Theme theme, ConstantState<T> constantState) {
-        if (constantState == null) {
-            return;
-        }
-        final String themeKey = theme == null ? "" : theme.getKey();
-        LongSparseArray<WeakReference<ConstantState<T>>> themedCache;
-        synchronized (this) {
-            themedCache = mCache.get(themeKey);
-            if (themedCache == null) {
-                themedCache = new LongSparseArray<WeakReference<ConstantState<T>>>(1);
-                mCache.put(themeKey, themedCache);
-            }
-            themedCache.put(key, new WeakReference<ConstantState<T>>(constantState));
-        }
-    }
-
-    /**
-     * If the resource is cached, creates a new instance of it and returns.
-     *
-     * @param key The long key which can be used to uniquely identify the resource.
-     * @param theme The The Theme instance where we want to load this resource.
-     *
-     * @return If this resources was loaded before, returns a new instance of it. Otherwise, returns
-     *         null.
-     */
-    public T get(long key, Resources.Theme theme) {
-        final String themeKey = theme != null ? theme.getKey() : "";
-        final LongSparseArray<WeakReference<ConstantState<T>>> themedCache;
-        final WeakReference<ConstantState<T>> wr;
-        synchronized (this) {
-            themedCache = mCache.get(themeKey);
-            if (themedCache == null) {
-                return null;
-            }
-            wr = themedCache.get(key);
-        }
-        if (wr == null) {
-            return null;
-        }
-        final ConstantState entry = wr.get();
+    public T getInstance(long key, Resources.Theme theme) {
+        final ConstantState<T> entry = get(key, theme);
         if (entry != null) {
-            return  (T) entry.newInstance(mResources, theme);
-        } else {  // our entry has been purged
-            synchronized (this) {
-                // there is a potential race condition here where this entry may be put in
-                // another thread. But we prefer it to minimize lock duration
-                themedCache.delete(key);
-            }
+            return entry.newInstance(mResources, theme);
         }
+
         return null;
     }
 
-    /**
-     * Users of ConfigurationBoundResourceCache must call this method whenever a configuration
-     * change happens. On this callback, the cache invalidates all resources that are not valid
-     * anymore.
-     *
-     * @param configChanges The configuration changes
-     */
-    public void onConfigurationChange(final int configChanges) {
-        synchronized (this) {
-            final int size = mCache.size();
-            for (int i = size - 1; i >= 0; i--) {
-                final LongSparseArray<WeakReference<ConstantState<T>>>
-                        themeCache = mCache.valueAt(i);
-                onConfigurationChangeInt(themeCache, configChanges);
-                if (themeCache.size() == 0) {
-                    mCache.removeAt(i);
-                }
-            }
-        }
+    @Override
+    public boolean shouldInvalidateEntry(ConstantState<T> entry, int configChanges) {
+        return Configuration.needNewResources(configChanges, entry.getChangingConfigurations());
     }
-
-    private void onConfigurationChangeInt(
-            final LongSparseArray<WeakReference<ConstantState<T>>> themeCache,
-            final int configChanges) {
-        final int size = themeCache.size();
-        for (int i = size - 1; i >= 0; i--) {
-            final WeakReference<ConstantState<T>> wr = themeCache.valueAt(i);
-            final ConstantState<T> constantState = wr.get();
-            if (constantState == null || Configuration.needNewResources(
-                    configChanges, constantState.getChangingConfigurations())) {
-                themeCache.removeAt(i);
-            }
-        }
-    }
-
 }
diff --git a/core/java/android/content/res/DrawableCache.java b/core/java/android/content/res/DrawableCache.java
new file mode 100644
index 0000000..fc70bc60
--- /dev/null
+++ b/core/java/android/content/res/DrawableCache.java
@@ -0,0 +1,57 @@
+/*
+ * 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.content.res;
+
+import android.graphics.drawable.Drawable;
+
+/**
+ * Class which can be used to cache Drawable resources against a theme.
+ */
+class DrawableCache extends ThemedResourceCache<Drawable.ConstantState> {
+    private final Resources mResources;
+
+    /**
+     * Creates a cache for the given Resources instance.
+     *
+     * @param resources the resources to use when creating new instances
+     */
+    public DrawableCache(Resources resources) {
+        mResources = resources;
+    }
+
+    /**
+     * If the resource is cached, creates and returns a new instance of it.
+     *
+     * @param key a key that uniquely identifies the drawable resource
+     * @param theme the theme where the resource will be used
+     * @return a new instance of the resource, or {@code null} if not in
+     *         the cache
+     */
+    public Drawable getInstance(long key, Resources.Theme theme) {
+        final Drawable.ConstantState entry = get(key, theme);
+        if (entry != null) {
+            return entry.newDrawable(mResources, theme);
+        }
+
+        return null;
+    }
+
+    @Override
+    public boolean shouldInvalidateEntry(Drawable.ConstantState entry, int configChanges) {
+        return false;
+    }
+}
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 334d180..a572590 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -20,6 +20,7 @@
 import android.annotation.ColorInt;
 import android.annotation.StyleRes;
 import android.annotation.StyleableRes;
+import com.android.internal.util.GrowingArrayUtils;
 import com.android.internal.util.XmlUtils;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -60,6 +61,7 @@
 import android.util.Slog;
 import android.util.TypedValue;
 import android.view.ViewDebug;
+import android.view.ViewHierarchyEncoder;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -132,10 +134,8 @@
     // These are protected by mAccessLock.
     private final Object mAccessLock = new Object();
     private final Configuration mTmpConfig = new Configuration();
-    private final ArrayMap<String, LongSparseArray<WeakReference<ConstantState>>> mDrawableCache =
-            new ArrayMap<>();
-    private final ArrayMap<String, LongSparseArray<WeakReference<ConstantState>>> mColorDrawableCache =
-            new ArrayMap<>();
+    private final DrawableCache mDrawableCache = new DrawableCache(this);
+    private final DrawableCache mColorDrawableCache = new DrawableCache(this);
     private final ConfigurationBoundResourceCache<ColorStateList> mColorStateListCache =
             new ConfigurationBoundResourceCache<>(this);
     private final ConfigurationBoundResourceCache<Animator> mAnimatorCache =
@@ -393,10 +393,11 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      *
      * @return String The string data associated with the resource,
-     * stripped of styled text information.
+     *         stripped of styled text information.
      */
+    @NonNull
     public String getString(@StringRes int id) throws NotFoundException {
-        CharSequence res = getText(id);
+        final CharSequence res = getText(id);
         if (res != null) {
             return res.toString();
         }
@@ -421,11 +422,11 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      *
      * @return String The string data associated with the resource,
-     * stripped of styled text information.
+     *         stripped of styled text information.
      */
-    public String getString(@StringRes int id, Object... formatArgs)
-            throws NotFoundException {
-        String raw = getString(id);
+    @NonNull
+    public String getString(@StringRes int id, Object... formatArgs) throws NotFoundException {
+        final String raw = getString(id);
         return String.format(mConfiguration.locale, raw, formatArgs);
     }
 
@@ -1440,7 +1441,7 @@
             AssetManager.applyThemeStyle(mTheme, resId, force);
 
             mThemeResId = resId;
-            mKey += Integer.toHexString(resId) + (force ? "! " : " ");
+            mKey.append(resId, force);
         }
 
         /**
@@ -1456,7 +1457,7 @@
             AssetManager.copyTheme(mTheme, other.mTheme);
 
             mThemeResId = other.mThemeResId;
-            mKey = other.mKey;
+            mKey.setTo(other.getKey());
         }
 
         /**
@@ -1730,6 +1731,19 @@
         }
 
         /**
+         * Returns a bit mask of configuration changes that will impact this
+         * theme (and thus require completely reloading it).
+         *
+         * @return a bit mask of configuration changes, as defined by
+         *         {@link ActivityInfo}
+         * @see ActivityInfo
+         */
+        public int getChangingConfigurations() {
+            final int nativeChangingConfig = AssetManager.getThemeChangingConfigurations(mTheme);
+            return ActivityInfo.activityInfoConfigNativeToJava(nativeChangingConfig);
+        }
+
+        /**
          * Print contents of this theme out to the log.  For debugging only.
          * 
          * @param priority The log priority to use.
@@ -1751,6 +1765,9 @@
             mTheme = mAssets.createTheme();
         }
 
+        /** Unique key for the series of styles applied to this theme. */
+        private final ThemeKey mKey = new ThemeKey();
+
         @SuppressWarnings("hiding")
         private final AssetManager mAssets;
         private final long mTheme;
@@ -1758,9 +1775,6 @@
         /** Resource identifier for the theme. */
         private int mThemeResId = 0;
 
-        /** Unique key for the series of styles applied to this theme. */
-        private String mKey = "";
-
         // Needed by layoutlib.
         /*package*/ long getNativeTheme() {
             return mTheme;
@@ -1770,7 +1784,7 @@
             return mThemeResId;
         }
 
-        /*package*/ String getKey() {
+        /*package*/ ThemeKey getKey() {
             return mKey;
         }
 
@@ -1779,29 +1793,133 @@
         }
 
         /**
-         * Parses {@link #mKey} and returns a String array that holds pairs of adjacent Theme data:
-         * resource name followed by whether or not it was forced, as specified by
-         * {@link #applyStyle(int, boolean)}.
+         * Parses {@link #mKey} and returns a String array that holds pairs of
+         * adjacent Theme data: resource name followed by whether or not it was
+         * forced, as specified by {@link #applyStyle(int, boolean)}.
          *
          * @hide
          */
         @ViewDebug.ExportedProperty(category = "theme", hasAdjacentMapping = true)
         public String[] getTheme() {
-            String[] themeData = mKey.split(" ");
-            String[] themes = new String[themeData.length * 2];
-            String theme;
-            boolean forced;
-
-            for (int i = 0, j = themeData.length - 1; i < themes.length; i += 2, --j) {
-                theme = themeData[j];
-                forced = theme.endsWith("!");
-                themes[i] = forced ?
-                        getResourceNameFromHexString(theme.substring(0, theme.length() - 1)) :
-                        getResourceNameFromHexString(theme);
+            final int N = mKey.mCount;
+            final String[] themes = new String[N * 2];
+            for (int i = 0, j = N - 1; i < themes.length; i += 2, --j) {
+                final int resId = mKey.mResId[j];
+                final boolean forced = mKey.mForce[j];
+                try {
+                    themes[i] = getResourceName(resId);
+                } catch (NotFoundException e) {
+                    themes[i] = Integer.toHexString(i);
+                }
                 themes[i + 1] = forced ? "forced" : "not forced";
             }
             return themes;
         }
+
+        /** @hide */
+        public void encode(@NonNull ViewHierarchyEncoder encoder) {
+            encoder.beginObject(this);
+            final String[] properties = getTheme();
+            for (int i = 0; i < properties.length; i += 2) {
+                encoder.addProperty(properties[i], properties[i+1]);
+            }
+            encoder.endObject();
+        }
+
+        /**
+         * Rebases the theme against the parent Resource object's current
+         * configuration by re-applying the styles passed to
+         * {@link #applyStyle(int, boolean)}.
+         *
+         * @hide
+         */
+        public void rebase() {
+            AssetManager.clearTheme(mTheme);
+
+            // Reapply the same styles in the same order.
+            for (int i = 0; i < mKey.mCount; i++) {
+                final int resId = mKey.mResId[i];
+                final boolean force = mKey.mForce[i];
+                AssetManager.applyThemeStyle(mTheme, resId, force);
+            }
+        }
+    }
+
+    static class ThemeKey implements Cloneable {
+        int[] mResId;
+        boolean[] mForce;
+        int mCount;
+
+        private int mHashCode = 0;
+
+        public void append(int resId, boolean force) {
+            if (mResId == null) {
+                mResId = new int[4];
+            }
+
+            if (mForce == null) {
+                mForce = new boolean[4];
+            }
+
+            mResId = GrowingArrayUtils.append(mResId, mCount, resId);
+            mForce = GrowingArrayUtils.append(mForce, mCount, force);
+            mCount++;
+
+            mHashCode = 31 * (31 * mHashCode + resId) + (force ? 1 : 0);
+        }
+
+        /**
+         * Sets up this key as a deep copy of another key.
+         *
+         * @param other the key to deep copy into this key
+         */
+        public void setTo(ThemeKey other) {
+            mResId = other.mResId == null ? null : other.mResId.clone();
+            mForce = other.mForce == null ? null : other.mForce.clone();
+            mCount = other.mCount;
+        }
+
+        @Override
+        public int hashCode() {
+            return mHashCode;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+
+            if (o == null || getClass() != o.getClass() || hashCode() != o.hashCode()) {
+                return false;
+            }
+
+            final ThemeKey t = (ThemeKey) o;
+            if (mCount != t.mCount) {
+                return false;
+            }
+
+            final int N = mCount;
+            for (int i = 0; i < N; i++) {
+                if (mResId[i] != t.mResId[i] || mForce[i] != t.mForce[i]) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        /**
+         * @return a shallow copy of this key
+         */
+        @Override
+        public ThemeKey clone() {
+            final ThemeKey other = new ThemeKey();
+            other.mResId = mResId;
+            other.mForce = mForce;
+            other.mCount = mCount;
+            return other;
+        }
     }
 
     /**
@@ -1930,8 +2048,8 @@
                         + " final compat is " + mCompatibilityInfo);
             }
 
-            clearDrawableCachesLocked(mDrawableCache, configChanges);
-            clearDrawableCachesLocked(mColorDrawableCache, configChanges);
+            mDrawableCache.onConfigurationChange(configChanges);
+            mColorDrawableCache.onConfigurationChange(configChanges);
             mColorStateListCache.onConfigurationChange(configChanges);
             mAnimatorCache.onConfigurationChange(configChanges);
             mStateListAnimatorCache.onConfigurationChange(configChanges);
@@ -1969,48 +2087,6 @@
         return configChanges;
     }
 
-    private void clearDrawableCachesLocked(
-            ArrayMap<String, LongSparseArray<WeakReference<ConstantState>>> caches,
-            int configChanges) {
-        final int N = caches.size();
-        for (int i = 0; i < N; i++) {
-            clearDrawableCacheLocked(caches.valueAt(i), configChanges);
-        }
-    }
-
-    private void clearDrawableCacheLocked(
-            LongSparseArray<WeakReference<ConstantState>> cache, int configChanges) {
-        if (DEBUG_CONFIG) {
-            Log.d(TAG, "Cleaning up drawables config changes: 0x"
-                    + Integer.toHexString(configChanges));
-        }
-        final int N = cache.size();
-        for (int i = 0; i < N; i++) {
-            final WeakReference<ConstantState> ref = cache.valueAt(i);
-            if (ref != null) {
-                final ConstantState cs = ref.get();
-                if (cs != null) {
-                    if (Configuration.needNewResources(
-                            configChanges, cs.getChangingConfigurations())) {
-                        if (DEBUG_CONFIG) {
-                            Log.d(TAG, "FLUSHING #0x"
-                                    + Long.toHexString(cache.keyAt(i))
-                                    + " / " + cs + " with changes: 0x"
-                                    + Integer.toHexString(cs.getChangingConfigurations()));
-                        }
-                        cache.setValueAt(i, null);
-                    } else if (DEBUG_CONFIG) {
-                        Log.d(TAG, "(Keeping #0x"
-                                + Long.toHexString(cache.keyAt(i))
-                                + " / " + cs + " with changes: 0x"
-                                + Integer.toHexString(cs.getChangingConfigurations())
-                                + ")");
-                    }
-                }
-            }
-        }
-    }
-
     /**
      * {@code Locale.toLanguageTag} will transform the obsolete (and deprecated)
      * language codes "in", "ji" and "iw" to "id", "yi" and "he" respectively.
@@ -2422,7 +2498,7 @@
         }
 
         final boolean isColorDrawable;
-        final ArrayMap<String, LongSparseArray<WeakReference<ConstantState>>> caches;
+        final DrawableCache caches;
         final long key;
         if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
                 && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
@@ -2438,7 +2514,7 @@
         // First, check whether we have a cached version of this drawable
         // that was inflated against the specified theme.
         if (!mPreloading) {
-            final Drawable cachedDrawable = getCachedDrawable(caches, key, theme);
+            final Drawable cachedDrawable = caches.getInstance(key, theme);
             if (cachedDrawable != null) {
                 return cachedDrawable;
             }
@@ -2465,13 +2541,8 @@
         // Determine if the drawable has unresolved theme attributes. If it
         // does, we'll need to apply a theme and store it in a theme-specific
         // cache.
-        final String cacheKey;
-        if (!dr.canApplyTheme()) {
-            cacheKey = CACHE_NOT_THEMED;
-        } else if (theme == null) {
-            cacheKey = CACHE_NULL_THEME;
-        } else {
-            cacheKey = theme.getKey();
+        final boolean canApplyTheme = dr.canApplyTheme();
+        if (canApplyTheme && theme != null) {
             dr = dr.mutate();
             dr.applyTheme(theme);
             dr.clearMutated();
@@ -2481,15 +2552,14 @@
         // cache: preload, not themed, null theme, or theme-specific.
         if (dr != null) {
             dr.setChangingConfigurations(value.changingConfigurations);
-            cacheDrawable(value, isColorDrawable, caches, cacheKey, key, dr);
+            cacheDrawable(value, isColorDrawable, caches, theme, canApplyTheme, key, dr);
         }
 
         return dr;
     }
 
-    private void cacheDrawable(TypedValue value, boolean isColorDrawable,
-            ArrayMap<String, LongSparseArray<WeakReference<ConstantState>>> caches,
-            String cacheKey, long key, Drawable dr) {
+    private void cacheDrawable(TypedValue value, boolean isColorDrawable, DrawableCache caches,
+            Theme theme, boolean usesTheme, long key, Drawable dr) {
         final ConstantState cs = dr.getConstantState();
         if (cs == null) {
             return;
@@ -2517,54 +2587,12 @@
             }
         } else {
             synchronized (mAccessLock) {
-                LongSparseArray<WeakReference<ConstantState>> themedCache = caches.get(cacheKey);
-                if (themedCache == null) {
-                    // Clean out the caches before we add more. This shouldn't
-                    // happen very often.
-                    pruneCaches(caches);
-                    themedCache = new LongSparseArray<>(1);
-                    caches.put(cacheKey, themedCache);
-                }
-                themedCache.put(key, new WeakReference<>(cs));
+                caches.put(key, theme, cs, usesTheme);
             }
         }
     }
 
     /**
-     * Prunes empty caches from the cache map.
-     *
-     * @param caches The map of caches to prune.
-     */
-    private void pruneCaches(ArrayMap<String,
-            LongSparseArray<WeakReference<ConstantState>>> caches) {
-        final int N = caches.size();
-        for (int i = N - 1; i >= 0; i--) {
-            final LongSparseArray<WeakReference<ConstantState>> cache = caches.valueAt(i);
-            if (pruneCache(cache)) {
-                caches.removeAt(i);
-            }
-        }
-    }
-
-    /**
-     * Prunes obsolete weak references from a cache, returning {@code true} if
-     * the cache is empty and should be removed.
-     *
-     * @param cache The cache of weak references to prune.
-     * @return {@code true} if the cache is empty and should be removed.
-     */
-    private boolean pruneCache(LongSparseArray<WeakReference<ConstantState>> cache) {
-        final int N = cache.size();
-        for (int i = N - 1; i >= 0; i--) {
-            final WeakReference entry = cache.valueAt(i);
-            if (entry == null || entry.get() == null) {
-                cache.removeAt(i);
-            }
-        }
-        return cache.size() == 0;
-    }
-
-    /**
      * Loads a drawable from XML or resources stream.
      */
     private Drawable loadDrawableForCookie(TypedValue value, int id, Theme theme) {
@@ -2617,51 +2645,6 @@
         return dr;
     }
 
-    private Drawable getCachedDrawable(
-            ArrayMap<String, LongSparseArray<WeakReference<ConstantState>>> caches,
-            long key, Theme theme) {
-        synchronized (mAccessLock) {
-            // First search theme-agnostic cache.
-            final Drawable unthemedDrawable = getCachedDrawableLocked(
-                    caches, key, CACHE_NOT_THEMED);
-            if (unthemedDrawable != null) {
-                return unthemedDrawable;
-            }
-
-            // Next search theme-specific cache.
-            final String themeKey = theme != null ? theme.getKey() : CACHE_NULL_THEME;
-            return getCachedDrawableLocked(caches, key, themeKey);
-        }
-    }
-
-    private Drawable getCachedDrawableLocked(
-            ArrayMap<String, LongSparseArray<WeakReference<ConstantState>>> caches,
-            long key, String themeKey) {
-        final LongSparseArray<WeakReference<ConstantState>> cache = caches.get(themeKey);
-        if (cache != null) {
-            final ConstantState entry = getConstantStateLocked(cache, key);
-            if (entry != null) {
-                return entry.newDrawable(this);
-            }
-        }
-        return null;
-    }
-
-    private ConstantState getConstantStateLocked(
-            LongSparseArray<WeakReference<ConstantState>> drawableCache, long key) {
-        final WeakReference<ConstantState> wr = drawableCache.get(key);
-        if (wr != null) {
-            final ConstantState entry = wr.get();
-            if (entry != null) {
-                return entry;
-            } else {
-                // Our entry has been purged.
-                drawableCache.delete(key);
-            }
-        }
-        return null;
-    }
-
     @Nullable
     ColorStateList loadColorStateList(TypedValue value, int id, Theme theme)
             throws NotFoundException {
@@ -2699,8 +2682,7 @@
         }
 
         final ConfigurationBoundResourceCache<ColorStateList> cache = mColorStateListCache;
-
-        csl = cache.get(key, theme);
+        csl = cache.getInstance(key, theme);
         if (csl != null) {
             return csl;
         }
diff --git a/core/java/android/content/res/ThemedResourceCache.java b/core/java/android/content/res/ThemedResourceCache.java
new file mode 100644
index 0000000..9a2d06147
--- /dev/null
+++ b/core/java/android/content/res/ThemedResourceCache.java
@@ -0,0 +1,233 @@
+/*
+ * 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.content.res;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.res.Resources.Theme;
+import android.content.res.Resources.ThemeKey;
+import android.util.LongSparseArray;
+import android.util.ArrayMap;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Data structure used for caching data against themes.
+ *
+ * @param <T> type of data to cache
+ */
+abstract class ThemedResourceCache<T> {
+    private ArrayMap<ThemeKey, LongSparseArray<WeakReference<T>>> mThemedEntries;
+    private LongSparseArray<WeakReference<T>> mUnthemedEntries;
+    private LongSparseArray<WeakReference<T>> mNullThemedEntries;
+
+    /**
+     * Adds a new theme-dependent entry to the cache.
+     *
+     * @param key a key that uniquely identifies the entry
+     * @param theme the theme against which this entry was inflated, or
+     *              {@code null} if the entry has no theme applied
+     * @param entry the entry to cache
+     */
+    public void put(long key, @Nullable Theme theme, @NonNull T entry) {
+        put(key, theme, entry, true);
+    }
+
+    /**
+     * Adds a new entry to the cache.
+     *
+     * @param key a key that uniquely identifies the entry
+     * @param theme the theme against which this entry was inflated, or
+     *              {@code null} if the entry has no theme applied
+     * @param entry the entry to cache
+     * @param usesTheme {@code true} if the entry is affected theme changes,
+     *                  {@code false} otherwise
+     */
+    public void put(long key, @Nullable Theme theme, @NonNull T entry, boolean usesTheme) {
+        if (entry == null) {
+            return;
+        }
+
+        synchronized (this) {
+            final LongSparseArray<WeakReference<T>> entries;
+            if (!usesTheme) {
+                entries = getUnthemedLocked(true);
+            } else {
+                entries = getThemedLocked(theme, true);
+            }
+            if (entries != null) {
+                entries.put(key, new WeakReference<>(entry));
+            }
+        }
+    }
+
+    /**
+     * Returns an entry from the cache.
+     *
+     * @param key a key that uniquely identifies the entry
+     * @param theme the theme where the entry will be used
+     * @return a cached entry, or {@code null} if not in the cache
+     */
+    @Nullable
+    public T get(long key, @Nullable Theme theme) {
+        // The themed (includes null-themed) and unthemed caches are mutually
+        // exclusive, so we'll give priority to whichever one we think we'll
+        // hit first. Since most of the framework drawables are themed, that's
+        // probably going to be the themed cache.
+        synchronized (this) {
+            final LongSparseArray<WeakReference<T>> themedEntries = getThemedLocked(theme, false);
+            if (themedEntries != null) {
+                final WeakReference<T> themedEntry = themedEntries.get(key);
+                if (themedEntry != null) {
+                    return themedEntry.get();
+                }
+            }
+
+            final LongSparseArray<WeakReference<T>> unthemedEntries = getUnthemedLocked(false);
+            if (unthemedEntries != null) {
+                final WeakReference<T> unthemedEntry = unthemedEntries.get(key);
+                if (unthemedEntry != null) {
+                    return unthemedEntry.get();
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Prunes cache entries that have been invalidated by a configuration
+     * change.
+     *
+     * @param configChanges a bitmask of configuration changes
+     */
+    public void onConfigurationChange(int configChanges) {
+        prune(configChanges);
+    }
+
+    /**
+     * Returns whether a cached entry has been invalidated by a configuration
+     * change.
+     *
+     * @param entry a cached entry
+     * @param configChanges a non-zero bitmask of configuration changes
+     * @return {@code true} if the entry is invalid, {@code false} otherwise
+     */
+    protected abstract boolean shouldInvalidateEntry(@NonNull T entry, int configChanges);
+
+    /**
+     * Returns the cached data for the specified theme, optionally creating a
+     * new entry if one does not already exist.
+     *
+     * @param t the theme for which to return cached data
+     * @param create {@code true} to create an entry if one does not already
+     *               exist, {@code false} otherwise
+     * @return the cached data for the theme, or {@code null} if the cache is
+     *         empty and {@code create} was {@code false}
+     */
+    @Nullable
+    private LongSparseArray<WeakReference<T>> getThemedLocked(@Nullable Theme t, boolean create) {
+        if (t == null) {
+            if (mNullThemedEntries == null && create) {
+                mNullThemedEntries = new LongSparseArray<>(1);
+            }
+            return mNullThemedEntries;
+        }
+
+        if (mThemedEntries == null) {
+            if (create) {
+                mThemedEntries = new ArrayMap<>(1);
+            } else {
+                return null;
+            }
+        }
+
+        final ThemeKey key = t.getKey();
+        LongSparseArray<WeakReference<T>> cache = mThemedEntries.get(key);
+        if (cache == null && create) {
+            cache = new LongSparseArray<>(1);
+
+            final ThemeKey keyClone = key.clone();
+            mThemedEntries.put(keyClone, cache);
+        }
+
+        return cache;
+    }
+
+    /**
+     * Returns the theme-agnostic cached data.
+     *
+     * @param create {@code true} to create an entry if one does not already
+     *               exist, {@code false} otherwise
+     * @return the theme-agnostic cached data, or {@code null} if the cache is
+     *         empty and {@code create} was {@code false}
+     */
+    @Nullable
+    private LongSparseArray<WeakReference<T>> getUnthemedLocked(boolean create) {
+        if (mUnthemedEntries == null && create) {
+            mUnthemedEntries = new LongSparseArray<>(1);
+        }
+        return mUnthemedEntries;
+    }
+
+    /**
+     * Prunes cache entries affected by configuration changes or where weak
+     * references have expired.
+     *
+     * @param configChanges a bitmask of configuration changes, or {@code 0} to
+     *                      simply prune missing weak references
+     * @return {@code true} if the cache is completely empty after pruning
+     */
+    private boolean prune(int configChanges) {
+        synchronized (this) {
+            if (mThemedEntries != null) {
+                for (int i = mThemedEntries.size() - 1; i >= 0; i--) {
+                    if (pruneEntriesLocked(mThemedEntries.valueAt(i), configChanges)) {
+                        mThemedEntries.removeAt(i);
+                    }
+                }
+            }
+
+            pruneEntriesLocked(mNullThemedEntries, configChanges);
+            pruneEntriesLocked(mUnthemedEntries, configChanges);
+
+            return mThemedEntries == null && mNullThemedEntries == null
+                    && mUnthemedEntries == null;
+        }
+    }
+
+    private boolean pruneEntriesLocked(@Nullable LongSparseArray<WeakReference<T>> entries,
+            int configChanges) {
+        if (entries == null) {
+            return true;
+        }
+
+        for (int i = entries.size() - 1; i >= 0; i--) {
+            final WeakReference<T> ref = entries.valueAt(i);
+            if (ref == null || pruneEntryLocked(ref.get(), configChanges)) {
+                entries.removeAt(i);
+            }
+        }
+
+        return entries.size() == 0;
+    }
+
+    private boolean pruneEntryLocked(@Nullable T entry, int configChanges) {
+        return entry == null || (configChanges != 0
+                && shouldInvalidateEntry(entry, configChanges));
+    }
+}
diff --git a/core/java/android/ddm/DdmHandleViewDebug.java b/core/java/android/ddm/DdmHandleViewDebug.java
index 3a36b0a..be48633 100644
--- a/core/java/android/ddm/DdmHandleViewDebug.java
+++ b/core/java/android/ddm/DdmHandleViewDebug.java
@@ -229,15 +229,25 @@
     private Chunk dumpHierarchy(View rootView, ByteBuffer in) {
         boolean skipChildren = in.getInt() > 0;
         boolean includeProperties = in.getInt() > 0;
+        boolean v2 = in.hasRemaining() && in.getInt() > 0;
 
-        ByteArrayOutputStream b = new ByteArrayOutputStream(1024);
+        long start = System.currentTimeMillis();
+
+        ByteArrayOutputStream b = new ByteArrayOutputStream(2*1024*1024);
         try {
-            ViewDebug.dump(rootView, skipChildren, includeProperties, b);
-        } catch (IOException e) {
+            if (v2) {
+                ViewDebug.dumpv2(rootView, b);
+            } else {
+                ViewDebug.dump(rootView, skipChildren, includeProperties, b);
+            }
+        } catch (IOException | InterruptedException e) {
             return createFailChunk(1, "Unexpected error while obtaining view hierarchy: "
                     + e.getMessage());
         }
 
+        long end = System.currentTimeMillis();
+        Log.d(TAG, "Time to obtain view hierarchy (ms): " + (end - start));
+
         byte[] data = b.toByteArray();
         return new Chunk(CHUNK_VURT, data, 0, data.length);
     }
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index d88594d..1fc69c0 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -460,9 +460,8 @@
             mEventHandler = null;
         }
 
-        String packageName = ActivityThread.currentPackageName();
-
-        return native_setup(new WeakReference<Camera>(this), cameraId, halVersion, packageName);
+        return native_setup(new WeakReference<Camera>(this), cameraId, halVersion,
+                ActivityThread.currentOpPackageName());
     }
 
     private int cameraInitNormal(int cameraId) {
diff --git a/core/java/android/hardware/ICameraService.aidl b/core/java/android/hardware/ICameraService.aidl
index 9bc2f46..7b96e20 100644
--- a/core/java/android/hardware/ICameraService.aidl
+++ b/core/java/android/hardware/ICameraService.aidl
@@ -38,13 +38,13 @@
     int getCameraInfo(int cameraId, out CameraInfo info);
 
     int connect(ICameraClient client, int cameraId,
-                    String clientPackageName,
+                    String opPackageName,
                     int clientUid,
                     // Container for an ICamera object
                     out BinderHolder device);
 
     int connectDevice(ICameraDeviceCallbacks callbacks, int cameraId,
-                              String clientPackageName,
+                              String opPackageName,
                               int clientUid,
                               // Container for an ICameraDeviceUser object
                               out BinderHolder device);
@@ -69,7 +69,7 @@
 
     int connectLegacy(ICameraClient client, int cameraId,
                     int halVersion,
-                    String clientPackageName,
+                    String opPackageName,
                     int clientUid,
                     // Container for an ICamera object
                     out BinderHolder device);
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index 11037fd..22a9e9c 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -41,16 +41,19 @@
  */
 public class SystemSensorManager extends SensorManager {
     private static native void nativeClassInit();
-    private static native int nativeGetNextSensor(Sensor sensor, int next);
-    private static native int nativeEnableDataInjection(boolean enable);
+    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 boolean sSensorModuleInitialized = false;
-    private static final Object sSensorModuleLock = new Object();
-    private static final ArrayList<Sensor> sFullSensorsList = new ArrayList<Sensor>();
-    private static final SparseArray<Sensor> sHandleToSensor = new SparseArray<Sensor>();
     private static InjectEventQueue mInjectEventQueue = null;
     private static boolean mDataInjectionMode = false;
 
+    private final Object mLock = new Object();
+
+    private final ArrayList<Sensor> mFullSensorsList = new ArrayList<>();
+    private final SparseArray<Sensor> mHandleToSensor = new SparseArray<>();
+
     // Listener list
     private final HashMap<SensorEventListener, SensorEventQueue> mSensorListeners =
             new HashMap<SensorEventListener, SensorEventQueue>();
@@ -60,44 +63,44 @@
     // Looper associated with the context in which this instance was created.
     private final Looper mMainLooper;
     private final int mTargetSdkLevel;
-    private final String mPackageName;
+    private final Context mContext;
     private final boolean mHasDataInjectionPermissions;
+    private final long mNativeInstance;
 
     /** {@hide} */
     public SystemSensorManager(Context context, Looper mainLooper) {
         mMainLooper = mainLooper;
         mTargetSdkLevel = context.getApplicationInfo().targetSdkVersion;
-        mPackageName = context.getPackageName();
-        synchronized(sSensorModuleLock) {
+        mContext = context;
+        mNativeInstance = nativeCreate(context.getOpPackageName());
+
+        synchronized(mLock) {
             if (!sSensorModuleInitialized) {
                 sSensorModuleInitialized = true;
-
                 nativeClassInit();
-
-                // initialize the sensor list
-                final ArrayList<Sensor> fullList = sFullSensorsList;
-                int i = 0;
-                do {
-                    Sensor sensor = new Sensor();
-                    i = nativeGetNextSensor(sensor, i);
-                    if (i>=0) {
-                        //Log.d(TAG, "found sensor: " + sensor.getName() +
-                        //        ", handle=" + sensor.getHandle());
-                        fullList.add(sensor);
-                        sHandleToSensor.append(sensor.getHandle(), sensor);
-                    }
-                } while (i>0);
             }
             mHasDataInjectionPermissions = context.checkSelfPermission(
                     Manifest.permission.HARDWARE_TEST) == PackageManager.PERMISSION_GRANTED;
         }
+
+        // initialize the sensor list
+        int i = 0;
+        while(true) {
+            Sensor sensor = new Sensor();
+            i = nativeGetNextSensor(mNativeInstance, sensor, i);
+            if (i <= 0) {
+                break;
+            }
+            mFullSensorsList.add(sensor);
+            mHandleToSensor.append(sensor.getHandle(), sensor);
+        }
     }
 
 
     /** @hide */
     @Override
     protected List<Sensor> getFullSensorList() {
-        return sFullSensorsList;
+        return mFullSensorsList;
     }
 
 
@@ -232,8 +235,8 @@
             throw new SecurityException("Permission denial. Calling enableDataInjection without "
                     + Manifest.permission.HARDWARE_TEST);
         }
-        synchronized (sSensorModuleLock) {
-            int ret = nativeEnableDataInjection(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");
@@ -255,7 +258,7 @@
             throw new SecurityException("Permission denial. Calling injectSensorData without "
                     + Manifest.permission.HARDWARE_TEST);
         }
-        synchronized (sSensorModuleLock) {
+        synchronized (mLock) {
             if (!mDataInjectionMode) {
                 Log.e(TAG, "Data injection mode not activated before calling injectSensorData");
                 return false;
@@ -284,15 +287,17 @@
      * SensorManager instance.
      */
     private static abstract class BaseEventQueue {
-        private native long nativeInitBaseEventQueue(WeakReference<BaseEventQueue> eventQWeak,
-               MessageQueue msgQ, float[] scratch, String packageName, int mode);
+        private static native long nativeInitBaseEventQueue(long nativeManager,
+                WeakReference<BaseEventQueue> eventQWeak, MessageQueue msgQ, float[] scratch,
+                String packageName, int mode, String opPackageName);
         private static native int nativeEnableSensor(long eventQ, int handle, int rateUs,
                 int maxBatchReportLatencyUs);
         private static native int nativeDisableSensor(long eventQ, int handle);
         private static native void nativeDestroySensorEventQueue(long eventQ);
         private static native int nativeFlushSensor(long eventQ);
         private static native int nativeInjectSensorData(long eventQ, int handle,
-                                                    float[] values,int accuracy, long timestamp);
+                float[] values,int accuracy, long timestamp);
+
         private long nSensorEventQueue;
         private final SparseBooleanArray mActiveSensors = new SparseBooleanArray();
         protected final SparseIntArray mSensorAccuracies = new SparseIntArray();
@@ -305,8 +310,9 @@
         protected static final int OPERATING_MODE_DATA_INJECTION = 1;
 
         BaseEventQueue(Looper looper, SystemSensorManager manager, int mode) {
-            nSensorEventQueue = nativeInitBaseEventQueue(new WeakReference<BaseEventQueue>(this),
-                    looper.getQueue(), mScratch, manager.mPackageName, mode);
+            nSensorEventQueue = nativeInitBaseEventQueue(manager.mNativeInstance,
+                    new WeakReference<>(this), looper.getQueue(), mScratch,
+                    manager.mContext.getPackageName(), mode, manager.mContext.getOpPackageName());
             mCloseGuard.open("dispose");
             mManager = manager;
         }
@@ -339,7 +345,7 @@
             for (int i=0 ; i<mActiveSensors.size(); i++) {
                 if (mActiveSensors.valueAt(i) == true) {
                     int handle = mActiveSensors.keyAt(i);
-                    Sensor sensor = sHandleToSensor.get(handle);
+                    Sensor sensor = mManager.mHandleToSensor.get(handle);
                     if (sensor != null) {
                         disableSensor(sensor);
                         mActiveSensors.put(handle, false);
@@ -452,7 +458,7 @@
         @Override
         protected void dispatchSensorEvent(int handle, float[] values, int inAccuracy,
                 long timestamp) {
-            final Sensor sensor = sHandleToSensor.get(handle);
+            final Sensor sensor = mManager.mHandleToSensor.get(handle);
             SensorEvent t = null;
             synchronized (mSensorsEvents) {
                 t = mSensorsEvents.get(handle);
@@ -481,7 +487,7 @@
         @SuppressWarnings("unused")
         protected void dispatchFlushCompleteEvent(int handle) {
             if (mListener instanceof SensorEventListener2) {
-                final Sensor sensor = sHandleToSensor.get(handle);
+                final Sensor sensor = mManager.mHandleToSensor.get(handle);
                 ((SensorEventListener2)mListener).onFlushCompleted(sensor);
             }
             return;
@@ -519,7 +525,7 @@
         @Override
         protected void dispatchSensorEvent(int handle, float[] values, int accuracy,
                 long timestamp) {
-            final Sensor sensor = sHandleToSensor.get(handle);
+            final Sensor sensor = mManager.mHandleToSensor.get(handle);
             TriggerEvent t = null;
             synchronized (mTriggerEvents) {
                 t = mTriggerEvents.get(handle);
@@ -546,7 +552,7 @@
         }
     }
 
-    static final class InjectEventQueue extends BaseEventQueue {
+    final class InjectEventQueue extends BaseEventQueue {
         public InjectEventQueue(Looper looper, SystemSensorManager manager) {
             super(looper, manager, OPERATING_MODE_DATA_INJECTION);
         }
diff --git a/core/java/android/hardware/camera2/CameraCaptureSession.java b/core/java/android/hardware/camera2/CameraCaptureSession.java
index 0cf8df1..ef71c42 100644
--- a/core/java/android/hardware/camera2/CameraCaptureSession.java
+++ b/core/java/android/hardware/camera2/CameraCaptureSession.java
@@ -114,6 +114,11 @@
      * the Surface provided to prepare must not be used as a target of a CaptureRequest submitted
      * to this session.</p>
      *
+     * <p>{@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY}
+     * devices cannot pre-allocate output buffers; for those devices,
+     * {@link StateCallback#onSurfacePrepared} will be immediately called, and no preallocation is
+     * done.</p>
+     *
      * @param surface the output Surface for which buffers should be pre-allocated. Must be one of
      * the output Surfaces used to create this session.
      *
@@ -207,8 +212,7 @@
      * <p>All capture sessions can be used for capturing images from the camera but only capture
      * sessions created by
      * {@link CameraDevice#createReprocessibleCaptureSession createReprocessibleCaptureSession}
-     * can submit reprocess capture requests. The list of requests must all be capturing images from
-     * the camera or all be reprocess capture requests. Submitting a reprocess request to a regular
+     * can submit reprocess capture requests. Submitting a reprocess request to a regular
      * capture session will result in an {@link IllegalArgumentException}.</p>
      *
      * @param requests the list of settings for this burst capture
@@ -231,9 +235,7 @@
      * @throws IllegalArgumentException If the requests target no Surfaces, or the requests target
      *                                  Surfaces not currently configured as outputs; or a reprocess
      *                                  capture request is submitted in a non-reprocessible capture
-     *                                  session; or the list of requests contains both requests to
-     *                                  capture images from the camera and reprocess capture
-     *                                  requests; or one of the reprocess capture requests was
+     *                                  session; or one of the reprocess capture requests was
      *                                  created with a {@link TotalCaptureResult} from a different
      *                                  session; or one of the captures targets a Surface in the
      *                                  middle of being {@link #prepare prepared}; or if the handler
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index f6791a4..e9564b3 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -580,7 +580,8 @@
          * indicating that the camera device is in use already.
          *
          * <p>
-         * This error can be produced when opening the camera fails.
+         * This error can be produced when opening the camera fails due to the camera
+        *  being used by a higher-priority camera API client.
          * </p>
          *
          * @see #onError
@@ -678,7 +679,7 @@
          * {@link CameraAccessException}. The disconnection could be due to a
          * change in security policy or permissions; the physical disconnection
          * of a removable camera device; or the camera being needed for a
-         * higher-priority use case.</p>
+         * higher-priority camera API client.</p>
          *
          * <p>There may still be capture callbacks that are invoked
          * after this method is called, or new image buffers that are delivered
@@ -688,8 +689,9 @@
          * about the disconnection.</p>
          *
          * <p>You should clean up the camera with {@link CameraDevice#close} after
-         * this happens, as it is not recoverable until opening the camera again
-         * after it becomes {@link CameraManager.AvailabilityCallback#onCameraAvailable available}.
+         * this happens, as it is not recoverable until the camera can be opened
+         * again. For most use cases, this will be when the camera again becomes
+         * {@link CameraManager.AvailabilityCallback#onCameraAvailable available}.
          * </p>
          *
          * @param camera the device that has been disconnected
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index 1a00a05..9327f00 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -77,8 +77,8 @@
     }
 
     /**
-     * Return the list of currently connected camera devices by
-     * identifier.
+     * Return the list of currently connected camera devices by identifier, including
+     * cameras that may be in use by other camera API clients.
      *
      * <p>Non-removable cameras use integers starting at 0 for their
      * identifiers, while removable cameras have a unique identifier for each
@@ -103,6 +103,11 @@
      * <p>The first time a callback is registered, it is immediately called
      * with the availability status of all currently known camera devices.</p>
      *
+     * <p>{@link AvailabilityCallback#onCameraUnavailable(String)} will be called whenever a camera
+     * device is opened by any camera API client. As of API level 23, other camera API clients may
+     * still be able to open such a camera device, evicting the existing client if they have higher
+     * priority than the existing client of a camera device. See open() for more details.</p>
+     *
      * <p>Since this callback will be registered with the camera service, remember to unregister it
      * once it is no longer needed; otherwise the callback will continue to receive events
      * indefinitely and it may prevent other resources from being released. Specifically, the
@@ -259,14 +264,14 @@
     }
 
     /**
-     * Helper for openning a connection to a camera with the given ID.
+     * Helper for opening a connection to a camera with the given ID.
      *
      * @param cameraId The unique identifier of the camera device to open
      * @param callback The callback for the camera. Must not be null.
      * @param handler  The handler to invoke the callback on. Must not be null.
      *
      * @throws CameraAccessException if the camera is disabled by device policy,
-     * or too many camera devices are already open, or the cameraId does not match
+     * too many camera devices are already open, or the cameraId does not match
      * any currently available camera device.
      *
      * @throws SecurityException if the application does not have permission to
@@ -309,7 +314,7 @@
                                 "Camera service is currently unavailable");
                         }
                         cameraService.connectDevice(callbacks, id,
-                                mContext.getPackageName(), USE_CALLING_UID, holder);
+                                mContext.getOpPackageName(), USE_CALLING_UID, holder);
                         cameraUser = ICameraDeviceUser.Stub.asInterface(holder.getBinder());
                     } else {
                         // Use legacy camera implementation for HAL1 devices
@@ -330,7 +335,8 @@
                         deviceImpl.setRemoteFailure(e);
 
                         if (e.getReason() == CameraAccessException.CAMERA_DISABLED ||
-                                e.getReason() == CameraAccessException.CAMERA_DISCONNECTED) {
+                                e.getReason() == CameraAccessException.CAMERA_DISCONNECTED ||
+                                e.getReason() == CameraAccessException.CAMERA_IN_USE) {
                             // Per API docs, these failures call onError and throw
                             throw e.asChecked();
                         }
@@ -369,7 +375,19 @@
      * <p>Use {@link #getCameraIdList} to get the list of available camera
      * devices. Note that even if an id is listed, open may fail if the device
      * is disconnected between the calls to {@link #getCameraIdList} and
-     * {@link #openCamera}.</p>
+     * {@link #openCamera}, or if a higher-priority camera API client begins using the
+     * camera device.</p>
+     *
+     * <p>As of API level 23, devices for which the
+     * {@link AvailabilityCallback#onCameraUnavailable(String)} callback has been called due to the
+     * device being in use by a lower-priority, background camera API client can still potentially
+     * be opened by calling this method when the calling camera API client has a higher priority
+     * than the current camera API client using this device.  In general, if the top, foreground
+     * activity is running within your application process, your process will be given the highest
+     * priority when accessing the camera, and this method will succeed even if the camera device is
+     * in use by another camera API client. Any lower-priority application that loses control of the
+     * camera in this way will receive an
+     * {@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected} callback.</p>
      *
      * <p>Once the camera is successfully opened, {@link CameraDevice.StateCallback#onOpened} will
      * be invoked with the newly opened {@link CameraDevice}. The camera device can then be set up
@@ -401,7 +419,7 @@
      *             {@code null} to use the current thread's {@link android.os.Looper looper}.
      *
      * @throws CameraAccessException if the camera is disabled by device policy,
-     * or the camera has become or was disconnected.
+     * has been disconnected, or is being used by a higher-priority camera API client.
      *
      * @throws IllegalArgumentException if cameraId or the callback was null,
      * or the cameraId does not match any currently or previously available
@@ -477,8 +495,7 @@
     }
 
     /**
-     * A callback for camera devices becoming available or
-     * unavailable to open.
+     * A callback for camera devices becoming available or unavailable to open.
      *
      * <p>Cameras become available when they are no longer in use, or when a new
      * removable camera is connected. They become unavailable when some
diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
index 3c19529..dff6227 100644
--- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
@@ -177,26 +177,20 @@
     public synchronized int captureBurst(List<CaptureRequest> requests, CaptureCallback callback,
             Handler handler) throws CameraAccessException {
         if (requests == null) {
-            throw new IllegalArgumentException("requests must not be null");
+            throw new IllegalArgumentException("Requests must not be null");
         } else if (requests.isEmpty()) {
-            throw new IllegalArgumentException("requests must have at least one element");
+            throw new IllegalArgumentException("Requests must have at least one element");
         }
 
-        boolean reprocess = requests.get(0).isReprocess();
-        if (reprocess && !isReprocessible()) {
-            throw new IllegalArgumentException("this capture session cannot handle reprocess " +
-                    "requests");
-        } else if (reprocess && requests.get(0).getReprocessibleSessionId() != mId) {
-            throw new IllegalArgumentException("capture request was created for another session");
-        }
-
-        for (int i = 1; i < requests.size(); i++) {
-            if (requests.get(i).isReprocess() != reprocess) {
-                throw new IllegalArgumentException("cannot mix regular and reprocess capture " +
-                        " requests");
-            } else if (reprocess && requests.get(i).getReprocessibleSessionId() != mId) {
-                throw new IllegalArgumentException("capture request was created for another " +
-                    "session");
+        for (CaptureRequest request : requests) {
+            if (request.isReprocess()) {
+                if (!isReprocessible()) {
+                    throw new IllegalArgumentException("This capture session cannot handle " +
+                            "reprocess requests");
+                } else if (request.getReprocessibleSessionId() != mId) {
+                    throw new IllegalArgumentException("Capture request was created for another " +
+                            "session");
+                }
             }
         }
 
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index ff4ad79..e84b46a 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -94,11 +94,11 @@
     private final int mTotalPartialCount;
 
     /**
-     * A list tracking request and its expected last frame.
-     * Updated when calling ICameraDeviceUser methods.
+     * A list tracking request and its expected last regular frame number and last reprocess frame
+     * number. Updated when calling ICameraDeviceUser methods.
      */
-    private final List<SimpleEntry</*frameNumber*/Long, /*requestId*/Integer>>
-            mFrameNumberRequestPairs = new ArrayList<SimpleEntry<Long, Integer>>();
+    private final List<RequestLastFrameNumbersHolder> mRequestLastFrameNumbersList =
+            new ArrayList<>();
 
     /**
      * An object tracking received frame numbers.
@@ -653,8 +653,8 @@
      *
      * <p>If lastFrameNumber is NO_FRAMES_CAPTURED, it means that the request was never
      * sent to HAL. Then onCaptureSequenceAborted is immediately triggered.
-     * If lastFrameNumber is non-negative, then the requestId and lastFrameNumber pair
-     * is added to the list mFrameNumberRequestPairs.</p>
+     * If lastFrameNumber is non-negative, then the requestId and lastFrameNumber as the last
+     * regular frame number will be added to the list mRequestLastFrameNumbersList.</p>
      *
      * @param requestId the request ID of the current repeating request.
      *
@@ -693,10 +693,6 @@
                                         "early trigger sequence complete for request %d",
                                         requestId));
                             }
-                            if (lastFrameNumber < Integer.MIN_VALUE
-                                    || lastFrameNumber > Integer.MAX_VALUE) {
-                                throw new AssertionError(lastFrameNumber + " cannot be cast to int");
-                            }
                             holder.getCallback().onCaptureSequenceAborted(
                                     CameraDeviceImpl.this,
                                     requestId);
@@ -710,9 +706,11 @@
                         requestId));
             }
         } else {
-            mFrameNumberRequestPairs.add(
-                    new SimpleEntry<Long, Integer>(lastFrameNumber,
-                            requestId));
+            // This function is only called for regular request so lastFrameNumber is the last
+            // regular frame number.
+            mRequestLastFrameNumbersList.add(new RequestLastFrameNumbersHolder(requestId,
+                    lastFrameNumber));
+
             // It is possible that the last frame has already arrived, so we need to check
             // for sequence completion right away
             checkAndFireSequenceComplete();
@@ -779,8 +777,8 @@
                 }
                 mRepeatingRequestId = requestId;
             } else {
-                mFrameNumberRequestPairs.add(
-                        new SimpleEntry<Long, Integer>(lastFrameNumber, requestId));
+                mRequestLastFrameNumbersList.add(new RequestLastFrameNumbersHolder(requestList,
+                        requestId, lastFrameNumber));
             }
 
             if (mIdle) {
@@ -1146,7 +1144,101 @@
         public int getSessionId() {
             return mSessionId;
         }
+    }
 
+    /**
+     * This class holds a capture ID and its expected last regular frame number and last reprocess
+     * frame number.
+     */
+    static class RequestLastFrameNumbersHolder {
+        // request ID
+        private final int mRequestId;
+        // The last regular frame number for this request ID. It's
+        // CaptureCallback.NO_FRAMES_CAPTURED if the request ID has no regular request.
+        private final long mLastRegularFrameNumber;
+        // The last reprocess frame number for this request ID. It's
+        // CaptureCallback.NO_FRAMES_CAPTURED if the request ID has no reprocess request.
+        private final long mLastReprocessFrameNumber;
+
+        /**
+         * Create a request-last-frame-numbers holder with a list of requests, request ID, and
+         * the last frame number returned by camera service.
+         */
+        public RequestLastFrameNumbersHolder(List<CaptureRequest> requestList, int requestId,
+                long lastFrameNumber) {
+            long lastRegularFrameNumber = CaptureCallback.NO_FRAMES_CAPTURED;
+            long lastReprocessFrameNumber = CaptureCallback.NO_FRAMES_CAPTURED;
+            long frameNumber = lastFrameNumber;
+
+            if (lastFrameNumber < requestList.size() - 1) {
+                throw new IllegalArgumentException("lastFrameNumber: " + lastFrameNumber +
+                        " should be at least " + (requestList.size() - 1) + " for the number of " +
+                        " requests in the list: " + requestList.size());
+            }
+
+            // find the last regular frame number and the last reprocess frame number
+            for (int i = requestList.size() - 1; i >= 0; i--) {
+                CaptureRequest request = requestList.get(i);
+                if (request.isReprocess() && lastReprocessFrameNumber ==
+                        CaptureCallback.NO_FRAMES_CAPTURED) {
+                    lastReprocessFrameNumber = frameNumber;
+                } else if (!request.isReprocess() && lastRegularFrameNumber ==
+                        CaptureCallback.NO_FRAMES_CAPTURED) {
+                    lastRegularFrameNumber = frameNumber;
+                }
+
+                if (lastReprocessFrameNumber != CaptureCallback.NO_FRAMES_CAPTURED &&
+                        lastRegularFrameNumber != CaptureCallback.NO_FRAMES_CAPTURED) {
+                    break;
+                }
+
+                frameNumber--;
+            }
+
+            mLastRegularFrameNumber = lastRegularFrameNumber;
+            mLastReprocessFrameNumber = lastReprocessFrameNumber;
+            mRequestId = requestId;
+        }
+
+        /**
+         * Create a request-last-frame-numbers holder with a request ID and last regular frame
+         * number.
+         */
+        public RequestLastFrameNumbersHolder(int requestId, long lastRegularFrameNumber) {
+            mLastRegularFrameNumber = lastRegularFrameNumber;
+            mLastReprocessFrameNumber = CaptureCallback.NO_FRAMES_CAPTURED;
+            mRequestId = requestId;
+        }
+
+        /**
+         * Return the last regular frame number. Return CaptureCallback.NO_FRAMES_CAPTURED if
+         * it contains no regular request.
+         */
+        public long getLastRegularFrameNumber() {
+            return mLastRegularFrameNumber;
+        }
+
+        /**
+         * Return the last reprocess frame number. Return CaptureCallback.NO_FRAMES_CAPTURED if
+         * it contains no reprocess request.
+         */
+        public long getLastReprocessFrameNumber() {
+            return mLastReprocessFrameNumber;
+        }
+
+        /**
+         * Return the last frame number overall.
+         */
+        public long getLastFrameNumber() {
+            return Math.max(mLastRegularFrameNumber, mLastReprocessFrameNumber);
+        }
+
+        /**
+         * Return the request ID.
+         */
+        public int getRequestId() {
+            return mRequestId;
+        }
     }
 
     /**
@@ -1154,8 +1246,8 @@
      */
     public class FrameNumberTracker {
 
-        private long mCompletedFrameNumber = -1;
-        private long mCompletedReprocessFrameNumber = -1;
+        private long mCompletedFrameNumber = CaptureCallback.NO_FRAMES_CAPTURED;
+        private long mCompletedReprocessFrameNumber = CaptureCallback.NO_FRAMES_CAPTURED;
         /** the skipped frame numbers that belong to regular results */
         private final LinkedList<Long> mSkippedRegularFrameNumbers = new LinkedList<Long>();
         /** the skipped frame numbers that belong to reprocess results */
@@ -1360,11 +1452,11 @@
         long completedFrameNumber = mFrameNumberTracker.getCompletedFrameNumber();
         long completedReprocessFrameNumber = mFrameNumberTracker.getCompletedReprocessFrameNumber();
         boolean isReprocess = false;
-        Iterator<SimpleEntry<Long, Integer> > iter = mFrameNumberRequestPairs.iterator();
+        Iterator<RequestLastFrameNumbersHolder> iter = mRequestLastFrameNumbersList.iterator();
         while (iter.hasNext()) {
-            final SimpleEntry<Long, Integer> frameNumberRequestPair = iter.next();
+            final RequestLastFrameNumbersHolder requestLastFrameNumbers = iter.next();
             boolean sequenceCompleted = false;
-            final int requestId = frameNumberRequestPair.getValue();
+            final int requestId = requestLastFrameNumbers.getRequestId();
             final CaptureCallbackHolder holder;
             synchronized(mInterfaceLock) {
                 if (mRemoteDevice == null) {
@@ -1376,19 +1468,22 @@
                 holder = (index >= 0) ?
                         mCaptureCallbackMap.valueAt(index) : null;
                 if (holder != null) {
-                    isReprocess = holder.getRequest().isReprocess();
+                    long lastRegularFrameNumber =
+                            requestLastFrameNumbers.getLastRegularFrameNumber();
+                    long lastReprocessFrameNumber =
+                            requestLastFrameNumbers.getLastReprocessFrameNumber();
+
                     // check if it's okay to remove request from mCaptureCallbackMap
-                    if ((isReprocess && frameNumberRequestPair.getKey() <=
-                            completedReprocessFrameNumber) || (!isReprocess &&
-                            frameNumberRequestPair.getKey() <= completedFrameNumber)) {
+                    if (lastRegularFrameNumber <= completedFrameNumber &&
+                            lastReprocessFrameNumber <= completedReprocessFrameNumber) {
                         sequenceCompleted = true;
                         mCaptureCallbackMap.removeAt(index);
                         if (DEBUG) {
                             Log.v(TAG, String.format(
-                                    "remove holder for requestId %d, "
-                                    + "because lastFrame %d is <= %d",
-                                    requestId, frameNumberRequestPair.getKey(),
-                                    completedFrameNumber));
+                                    "Remove holder for requestId %d, because lastRegularFrame %d " +
+                                    "is <= %d and lastReprocessFrame %d is <= %d", requestId,
+                                    lastRegularFrameNumber, completedFrameNumber,
+                                    lastReprocessFrameNumber, completedReprocessFrameNumber));
                         }
                     }
                 }
@@ -1412,16 +1507,10 @@
                                         requestId));
                             }
 
-                            long lastFrameNumber = frameNumberRequestPair.getKey();
-                            if (lastFrameNumber < Integer.MIN_VALUE
-                                    || lastFrameNumber > Integer.MAX_VALUE) {
-                                throw new AssertionError(lastFrameNumber
-                                        + " cannot be cast to int");
-                            }
                             holder.getCallback().onCaptureSequenceCompleted(
                                 CameraDeviceImpl.this,
                                 requestId,
-                                lastFrameNumber);
+                                requestLastFrameNumbers.getLastFrameNumber());
                         }
                     }
                 };
diff --git a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
index abe26ea..edad00f 100644
--- a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
+++ b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
@@ -202,6 +202,7 @@
         private static final int CAMERA_IDLE = 1;
         private static final int CAPTURE_STARTED = 2;
         private static final int RESULT_RECEIVED = 3;
+        private static final int PREPARED = 4;
 
         private final HandlerThread mHandlerThread;
         private Handler mHandler;
@@ -253,7 +254,9 @@
 
         @Override
         public void onPrepared(int streamId) {
-            // TODO
+            Message msg = getHandler().obtainMessage(PREPARED,
+                    /*arg1*/ streamId, /*arg2*/ 0);
+            getHandler().sendMessage(msg);
         }
 
         @Override
@@ -301,6 +304,11 @@
                             mCallbacks.onResultReceived(result, resultExtras);
                             break;
                         }
+                        case PREPARED: {
+                            int streamId = msg.arg1;
+                            mCallbacks.onPrepared(streamId);
+                            break;
+                        }
                         default:
                             throw new IllegalArgumentException(
                                 "Unknown callback message " + msg.what);
@@ -631,7 +639,9 @@
             return CameraBinderDecorator.ENODEV;
         }
 
-        // TODO: Implement and fire callback
+        // LEGACY doesn't support actual prepare, just signal success right away
+        mCameraCallbacks.onPrepared(streamId);
+
         return CameraBinderDecorator.NO_ERROR;
     }
 
diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
index a4d6be09..691798f 100644
--- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
+++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
@@ -326,9 +326,6 @@
         }
 
         try {
-            startPreview(); // If preview is not running (i.e. after a JPEG capture), we need to
-                            // explicitely start and stop preview before setting preview surface.
-                            // null.
             stopPreview();
         }  catch (RuntimeException e) {
             Log.e(TAG, "Received device exception in configure call: ", e);
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 9f344ad..cf96145 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -434,7 +434,8 @@
             mAuthenticationCallback = callback;
             mCryptoObject = crypto;
             long sessionId = crypto != null ? crypto.getOpId() : 0;
-            mService.authenticate(mToken, sessionId, userId, mServiceReceiver, flags);
+            mService.authenticate(mToken, sessionId, userId, mServiceReceiver, flags,
+                    mContext.getOpPackageName());
         } catch (RemoteException e) {
             Log.w(TAG, "Remote exception while authenticating: ", e);
             if (callback != null) {
@@ -555,7 +556,7 @@
      */
     public List<Fingerprint> getEnrolledFingerprints(int userId) {
         if (mService != null) try {
-            return mService.getEnrolledFingerprints(userId);
+            return mService.getEnrolledFingerprints(userId, mContext.getOpPackageName());
         } catch (RemoteException e) {
             Log.v(TAG, "Remote exception in getEnrolledFingerprints: ", e);
         }
@@ -579,7 +580,8 @@
      */
     public boolean hasEnrolledFingerprints() {
         if (mService != null) try {
-            return mService.hasEnrolledFingerprints(UserHandle.myUserId());
+            return mService.hasEnrolledFingerprints(UserHandle.myUserId(),
+                    mContext.getOpPackageName());
         } catch (RemoteException e) {
             Log.v(TAG, "Remote exception in getEnrolledFingerprints: ", e);
         }
@@ -595,7 +597,7 @@
         if (mService != null) {
             try {
                 long deviceId = 0; /* TODO: plumb hardware id to FPMS */
-                return mService.isHardwareDetected(deviceId);
+                return mService.isHardwareDetected(deviceId, mContext.getOpPackageName());
             } catch (RemoteException e) {
                 Log.v(TAG, "Remote exception in isFingerprintHardwareDetected(): ", e);
             }
@@ -614,7 +616,7 @@
     public long getAuthenticatorId() {
         if (mService != null) {
             try {
-                return mService.getAuthenticatorId();
+                return mService.getAuthenticatorId(mContext.getOpPackageName());
             } catch (RemoteException e) {
                 Log.v(TAG, "Remote exception in getAuthenticatorId(): ", e);
             }
@@ -624,7 +626,13 @@
         return 0;
     }
 
-    private Handler mHandler = new Handler() {
+    private Handler mHandler;
+
+    private class MyHandler extends Handler {
+        private MyHandler(Context context) {
+            super(context.getMainLooper());
+        }
+
         public void handleMessage(android.os.Message msg) {
             switch(msg.what) {
                 case MSG_ENROLL_RESULT:
@@ -709,6 +717,7 @@
         if (mService == null) {
             Slog.v(TAG, "FingerprintManagerService was null");
         }
+        mHandler = new MyHandler(context);
     }
 
     private int getCurrentUserId() {
@@ -736,7 +745,7 @@
 
     private void cancelAuthentication(CryptoObject cryptoObject) {
         if (mService != null) try {
-            mService.cancelAuthentication(mToken);
+            mService.cancelAuthentication(mToken, mContext.getOpPackageName());
         } catch (RemoteException e) {
             if (DEBUG) Log.w(TAG, "Remote exception while canceling enrollment");
         }
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
index c5ec08c..0484806 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
@@ -27,10 +27,10 @@
 interface IFingerprintService {
     // Authenticate the given sessionId with a fingerprint
     void authenticate(IBinder token, long sessionId, int groupId,
-            IFingerprintServiceReceiver receiver, int flags);
+            IFingerprintServiceReceiver receiver, int flags, String opPackageName);
 
     // Cancel authentication for the given sessionId
-    void cancelAuthentication(IBinder token);
+    void cancelAuthentication(IBinder token, String opPackageName);
 
     // Start fingerprint enrollment
     void enroll(IBinder token, in byte [] cryptoToken, int groupId, IFingerprintServiceReceiver receiver,
@@ -46,16 +46,16 @@
     void rename(int fingerId, int groupId, String name);
 
     // Get a list of enrolled fingerprints in the given group.
-    List<Fingerprint> getEnrolledFingerprints(int groupId);
+    List<Fingerprint> getEnrolledFingerprints(int groupId, String opPackageName);
 
     // Determine if HAL is loaded and ready
-    boolean isHardwareDetected(long deviceId);
+    boolean isHardwareDetected(long deviceId, String opPackageName);
 
     // Get a pre-enrollment authentication token
     long preEnroll(IBinder token);
 
     // Determine if a user has at least one enrolled fingerprint
-    boolean hasEnrolledFingerprints(int groupId);
+    boolean hasEnrolledFingerprints(int groupId, String opPackageName);
 
     // Gets the number of hardware devices
     // int getHardwareDeviceCount();
@@ -64,5 +64,5 @@
     // long getHardwareDevice(int i);
 
     // Gets the authenticator ID for fingerprint
-    long getAuthenticatorId();
+    long getAuthenticatorId(String opPackageName);
 }
diff --git a/core/java/android/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl
index 9bc967f..e4ab3f2 100644
--- a/core/java/android/hardware/usb/IUsbManager.aidl
+++ b/core/java/android/hardware/usb/IUsbManager.aidl
@@ -85,9 +85,6 @@
     /* Sets the current USB function. */
     void setCurrentFunction(String function, boolean makeDefault);
 
-    /* Sets the file path for USB mass storage backing file. */
-    void setMassStorageBackingFile(String path);
-
     /* Allow USB debugging from the attached host. If alwaysAllow is true, add the
      * the public key to list of host keys that the user has approved.
      */
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index f283051..a45d4ca 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -410,28 +410,6 @@
         }
     }
 
-    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.
-     *
-     * @param function name of the USB function
-     * @return true if the USB function is enabled.
-     *
-     * {@hide}
-     */
-    public boolean isFunctionEnabled(String function) {
-        return propertyContainsFunction("sys.usb.config", function);
-    }
-
     /**
      * Returns the current default USB function.
      *
@@ -465,19 +443,4 @@
             Log.e(TAG, "RemoteException in setCurrentFunction", e);
         }
     }
-
-    /**
-     * Sets the file path for USB mass storage backing file.
-     *
-     * @param path backing file path
-     *
-     * {@hide}
-     */
-    public void setMassStorageBackingFile(String path) {
-        try {
-            mService.setMassStorageBackingFile(path);
-        } catch (RemoteException e) {
-            Log.e(TAG, "RemoteException in setDefaultFunction", e);
-        }
-    }
 }
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index c531e7e..d8c3361 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -341,7 +341,8 @@
      * one.  This is used by applications needing to talk to the carrier's
      * Multimedia Messaging Service servers.
      *
-     * @deprecated Applications should instead use {@link #requestNetwork} to request a network that
+     * @deprecated Applications should instead use
+     *         {@link #requestNetwork(NetworkRequest, NetworkCallback)} to request a network that
      *         provides the {@link NetworkCapabilities#NET_CAPABILITY_MMS} capability.
      */
     public static final int TYPE_MOBILE_MMS  = 2;
@@ -351,7 +352,8 @@
      * one.  This is used by applications needing to talk to the carrier's
      * Secure User Plane Location servers for help locating the device.
      *
-     * @deprecated Applications should instead use {@link #requestNetwork} to request a network that
+     * @deprecated Applications should instead use
+     *         {@link #requestNetwork(NetworkRequest, NetworkCallback)} to request a network that
      *         provides the {@link NetworkCapabilities#NET_CAPABILITY_SUPL} capability.
      */
     public static final int TYPE_MOBILE_SUPL = 3;
@@ -367,7 +369,8 @@
      * same network interface as {@link #TYPE_MOBILE} but the routing setup
      * is different.
      *
-     * @deprecated Applications should instead use {@link #requestNetwork} to request a network that
+     * @deprecated Applications should instead use
+     *         {@link #requestNetwork(NetworkRequest, NetworkCallback)} to request a network that
      *         uses the {@link NetworkCapabilities#TRANSPORT_CELLULAR} transport.
      */
     public static final int TYPE_MOBILE_HIPRI = 5;
@@ -910,7 +913,8 @@
      * implementation+feature combination, except that the value {@code -1}
      * always indicates failure.
      *
-     * @deprecated Deprecated in favor of the cleaner {@link #requestNetwork} api.
+     * @deprecated Deprecated in favor of the cleaner
+     *             {@link #requestNetwork(NetworkRequest, NetworkCallback)} API.
      * @removed
      */
     public int startUsingNetworkFeature(int networkType, String feature) {
@@ -958,7 +962,7 @@
      * implementation+feature combination, except that the value {@code -1}
      * always indicates failure.
      *
-     * @deprecated Deprecated in favor of the cleaner {@link #requestNetwork} api.
+     * @deprecated Deprecated in favor of the cleaner {@link unregisterNetworkCallback} API.
      * @removed
      */
     public int stopUsingNetworkFeature(int networkType, String feature) {
@@ -1236,8 +1240,9 @@
      * @param hostAddress the IP address of the host to which the route is desired
      * @return {@code true} on success, {@code false} on failure
      *
-     * @deprecated Deprecated in favor of the {@link #requestNetwork},
-     *             {@link #bindProcessToNetwork} and {@link Network#getSocketFactory} api.
+     * @deprecated Deprecated in favor of the
+     *             {@link #requestNetwork(NetworkRequest, NetworkCallback)},
+     *             {@link #bindProcessToNetwork} and {@link Network#getSocketFactory} API.
      * @removed
      */
     public boolean requestRouteToHost(int networkType, int hostAddress) {
@@ -1256,7 +1261,7 @@
      * @return {@code true} on success, {@code false} on failure
      * @hide
      * @deprecated Deprecated in favor of the {@link #requestNetwork} and
-     *             {@link #bindProcessToNetwork} api.
+     *             {@link #bindProcessToNetwork} API.
      * @removed
      */
     public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) {
@@ -2144,14 +2149,22 @@
         public static final int CANCELED     = 8;
 
         /**
-         * @hide
-         * Called whenever the framework connects to a network that it may use to
-         * satisfy this request
+         * 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}
+         * callback. There is no guarantee that this new network will satisfy any requests, or that
+         * the network will stay connected for longer than the time necessary to evaluate it.
+         * <p>
+         * Most applications <b>should not</b> act on this callback, and should instead use
+         * {@link #onAvailable}. This callback is intended for use by applications that can assist
+         * the framework in properly evaluating the network &mdash; for example, an application that
+         * can automatically log in to a captive portal without user intervention.
+         *
+         * @param network The {@link Network} of the network that is being evaluated.
          */
         public void onPreCheck(Network network) {}
 
         /**
-         * Called when the framework connects and has declared new network ready for use.
+         * Called when the framework connects and has declared a new network ready for use.
          * This callback may be called more than once if the {@link Network} that is
          * satisfying the request changes.
          *
@@ -2251,116 +2264,82 @@
         @Override
         public void handleMessage(Message message) {
             Log.d(TAG, "CM callback handler got msg " + message.what);
+            NetworkRequest request = (NetworkRequest) getObject(message, NetworkRequest.class);
+            Network network = (Network) getObject(message, Network.class);
             switch (message.what) {
                 case CALLBACK_PRECHECK: {
-                    NetworkRequest request = (NetworkRequest)getObject(message,
-                            NetworkRequest.class);
-                    NetworkCallback callbacks = getCallbacks(request);
-                    if (callbacks != null) {
-                        callbacks.onPreCheck((Network)getObject(message, Network.class));
-                    } else {
-                        Log.e(TAG, "callback not found for PRECHECK message");
+                    NetworkCallback callback = getCallback(request, "PRECHECK");
+                    if (callback != null) {
+                        callback.onPreCheck(network);
                     }
                     break;
                 }
                 case CALLBACK_AVAILABLE: {
-                    NetworkRequest request = (NetworkRequest)getObject(message,
-                            NetworkRequest.class);
-                    NetworkCallback callbacks = getCallbacks(request);
-                    if (callbacks != null) {
-                        callbacks.onAvailable((Network)getObject(message, Network.class));
-                    } else {
-                        Log.e(TAG, "callback not found for AVAILABLE message");
+                    NetworkCallback callback = getCallback(request, "AVAILABLE");
+                    if (callback != null) {
+                        callback.onAvailable(network);
                     }
                     break;
                 }
                 case CALLBACK_LOSING: {
-                    NetworkRequest request = (NetworkRequest)getObject(message,
-                            NetworkRequest.class);
-                    NetworkCallback callbacks = getCallbacks(request);
-                    if (callbacks != null) {
-                        callbacks.onLosing((Network)getObject(message, Network.class),
-                                message.arg1);
-                    } else {
-                        Log.e(TAG, "callback not found for LOSING message");
+                    NetworkCallback callback = getCallback(request, "LOSING");
+                    if (callback != null) {
+                        callback.onLosing(network, message.arg1);
                     }
                     break;
                 }
                 case CALLBACK_LOST: {
-                    NetworkRequest request = (NetworkRequest)getObject(message,
-                            NetworkRequest.class);
-
-                    NetworkCallback callbacks = getCallbacks(request);
-                    if (callbacks != null) {
-                        callbacks.onLost((Network)getObject(message, Network.class));
-                    } else {
-                        Log.e(TAG, "callback not found for LOST message");
+                    NetworkCallback callback = getCallback(request, "LOST");
+                    if (callback != null) {
+                        callback.onLost(network);
                     }
                     break;
                 }
                 case CALLBACK_UNAVAIL: {
-                    NetworkRequest request = (NetworkRequest)getObject(message,
-                            NetworkRequest.class);
-                    NetworkCallback callbacks = null;
-                    synchronized(mCallbackMap) {
-                        callbacks = mCallbackMap.get(request);
-                    }
-                    if (callbacks != null) {
-                        callbacks.onUnavailable();
-                    } else {
-                        Log.e(TAG, "callback not found for UNAVAIL message");
+                    NetworkCallback callback = getCallback(request, "UNAVAIL");
+                    if (callback != null) {
+                        callback.onUnavailable();
                     }
                     break;
                 }
                 case CALLBACK_CAP_CHANGED: {
-                    NetworkRequest request = (NetworkRequest)getObject(message,
-                            NetworkRequest.class);
-                    NetworkCallback callbacks = getCallbacks(request);
-                    if (callbacks != null) {
-                        Network network = (Network)getObject(message, Network.class);
+                    NetworkCallback callback = getCallback(request, "CAP_CHANGED");
+                    if (callback != null) {
                         NetworkCapabilities cap = (NetworkCapabilities)getObject(message,
                                 NetworkCapabilities.class);
 
-                        callbacks.onCapabilitiesChanged(network, cap);
-                    } else {
-                        Log.e(TAG, "callback not found for CAP_CHANGED message");
+                        callback.onCapabilitiesChanged(network, cap);
                     }
                     break;
                 }
                 case CALLBACK_IP_CHANGED: {
-                    NetworkRequest request = (NetworkRequest)getObject(message,
-                            NetworkRequest.class);
-                    NetworkCallback callbacks = getCallbacks(request);
-                    if (callbacks != null) {
-                        Network network = (Network)getObject(message, Network.class);
+                    NetworkCallback callback = getCallback(request, "IP_CHANGED");
+                    if (callback != null) {
                         LinkProperties lp = (LinkProperties)getObject(message,
                                 LinkProperties.class);
 
-                        callbacks.onLinkPropertiesChanged(network, lp);
-                    } else {
-                        Log.e(TAG, "callback not found for IP_CHANGED message");
+                        callback.onLinkPropertiesChanged(network, lp);
                     }
                     break;
                 }
                 case CALLBACK_RELEASED: {
-                    NetworkRequest req = (NetworkRequest)getObject(message, NetworkRequest.class);
-                    NetworkCallback callbacks = null;
+                    NetworkCallback callback = null;
                     synchronized(mCallbackMap) {
-                        callbacks = mCallbackMap.remove(req);
+                        callback = mCallbackMap.remove(request);
                     }
-                    if (callbacks != null) {
+                    if (callback != null) {
                         synchronized(mRefCount) {
                             if (mRefCount.decrementAndGet() == 0) {
                                 getLooper().quit();
                             }
                         }
                     } else {
-                        Log.e(TAG, "callback not found for CANCELED message");
+                        Log.e(TAG, "callback not found for RELEASED message");
                     }
                     break;
                 }
                 case CALLBACK_EXIT: {
-                    Log.d(TAG, "Listener quiting");
+                    Log.d(TAG, "Listener quitting");
                     getLooper().quit();
                     break;
                 }
@@ -2374,10 +2353,16 @@
         private Object getObject(Message msg, Class c) {
             return msg.getData().getParcelable(c.getSimpleName());
         }
-        private NetworkCallback getCallbacks(NetworkRequest req) {
+
+        private NetworkCallback getCallback(NetworkRequest req, String name) {
+            NetworkCallback callback;
             synchronized(mCallbackMap) {
-                return mCallbackMap.get(req);
+                callback = mCallbackMap.get(req);
             }
+            if (callback == null) {
+                Log.e(TAG, "callback not found for " + name + " message");
+            }
+            return callback;
         }
     }
 
@@ -2586,10 +2571,8 @@
      * method assumes that the caller has previously called {@link #registerNetworkCallback} to
      * listen for network changes.
      *
-     * @param network{@link Network} specifying which network you're interested.
+     * @param network {@link Network} specifying which network you're interested.
      * @return {@code true} on success, {@code false} if the {@link Network} is no longer valid.
-     *
-     * @hide
      */
     public boolean requestBandwidthUpdate(Network network) {
         try {
@@ -2601,10 +2584,10 @@
 
     /**
      * Unregisters callbacks about and possibly releases networks originating from
-     * {@link #requestNetwork} and {@link #registerNetworkCallback} calls.  If the
-     * given {@code NetworkCallback} had previously been used with {@code #requestNetwork},
-     * any networks that had been connected to only to satisfy that request will be
-     * disconnected.
+     * {@link #requestNetwork(NetworkRequest, NetworkCallback)} and {@link #registerNetworkCallback}
+     * calls.  If the given {@code NetworkCallback} had previously been used with
+     * {@code #requestNetwork}, any networks that had been connected to only to satisfy that request
+     * will be disconnected.
      *
      * @param networkCallback The {@link NetworkCallback} used when making the request.
      */
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 8c8bfab..ab70485 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -37,6 +37,11 @@
      * @hide
      */
     public NetworkCapabilities() {
+        clearAll();
+        mNetworkCapabilities =
+                (1 << NET_CAPABILITY_NOT_RESTRICTED) |
+                (1 << NET_CAPABILITY_TRUSTED) |
+                (1 << NET_CAPABILITY_NOT_VPN);
     }
 
     public NetworkCapabilities(NetworkCapabilities nc) {
@@ -50,11 +55,21 @@
     }
 
     /**
+     * Completely clears the contents of this object, removing even the capabilities that are set
+     * by default when the object is constructed.
+     * @hide
+     */
+    public void clearAll() {
+        mNetworkCapabilities = mTransportTypes = 0;
+        mLinkUpBandwidthKbps = mLinkDownBandwidthKbps = 0;
+        mNetworkSpecifier = null;
+    }
+
+    /**
      * Represents the network's capabilities.  If any are specified they will be satisfied
      * by any Network that matches all of them.
      */
-    private long mNetworkCapabilities = (1 << NET_CAPABILITY_NOT_RESTRICTED) |
-            (1 << NET_CAPABILITY_TRUSTED) | (1 << NET_CAPABILITY_NOT_VPN);
+    private long mNetworkCapabilities;
 
     /**
      * Indicates this is a network that has the ability to reach the
diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java
index 47e8e69..243ddf7 100644
--- a/core/java/android/os/AsyncTask.java
+++ b/core/java/android/os/AsyncTask.java
@@ -16,6 +16,9 @@
 
 package android.os;
 
+import android.annotation.MainThread;
+import android.annotation.WorkerThread;
+
 import java.util.ArrayDeque;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.Callable;
@@ -350,6 +353,7 @@
      * @see #onPostExecute
      * @see #publishProgress
      */
+    @WorkerThread
     protected abstract Result doInBackground(Params... params);
 
     /**
@@ -358,6 +362,7 @@
      * @see #onPostExecute
      * @see #doInBackground
      */
+    @MainThread
     protected void onPreExecute() {
     }
 
@@ -374,6 +379,7 @@
      * @see #onCancelled(Object) 
      */
     @SuppressWarnings({"UnusedDeclaration"})
+    @MainThread
     protected void onPostExecute(Result result) {
     }
 
@@ -387,6 +393,7 @@
      * @see #doInBackground
      */
     @SuppressWarnings({"UnusedDeclaration"})
+    @MainThread
     protected void onProgressUpdate(Progress... values) {
     }
 
@@ -405,6 +412,7 @@
      * @see #isCancelled()
      */
     @SuppressWarnings({"UnusedParameters"})
+    @MainThread
     protected void onCancelled(Result result) {
         onCancelled();
     }    
@@ -421,6 +429,7 @@
      * @see #cancel(boolean)
      * @see #isCancelled()
      */
+    @MainThread
     protected void onCancelled() {
     }
 
@@ -535,6 +544,7 @@
      * @see #executeOnExecutor(java.util.concurrent.Executor, Object[])
      * @see #execute(Runnable)
      */
+    @MainThread
     public final AsyncTask<Params, Progress, Result> execute(Params... params) {
         return executeOnExecutor(sDefaultExecutor, params);
     }
@@ -572,6 +582,7 @@
      *
      * @see #execute(Object[])
      */
+    @MainThread
     public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec,
             Params... params) {
         if (mStatus != Status.PENDING) {
@@ -604,6 +615,7 @@
      * @see #execute(Object[])
      * @see #executeOnExecutor(java.util.concurrent.Executor, Object[])
      */
+    @MainThread
     public static void execute(Runnable runnable) {
         sDefaultExecutor.execute(runnable);
     }
@@ -622,6 +634,7 @@
      * @see #onProgressUpdate
      * @see #doInBackground
      */
+    @WorkerThread
     protected final void publishProgress(Progress... values) {
         if (!isCancelled()) {
             getHandler().obtainMessage(MESSAGE_POST_PROGRESS,
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 36fc4f9..50eed3e 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -173,6 +173,27 @@
                 "ro.build.version.sdk", 0);
 
         /**
+         * The developer preview revision of a prerelease SDK. This value will always
+         * be <code>0</code> on production platform builds/devices.
+         *
+         * <p>When this value is nonzero, any new API added since the last
+         * officially published {@link #SDK_INT API level} is only guaranteed to be present
+         * on that specific preview revision. For example, an API <code>Activity.fooBar()</code>
+         * might be present in preview revision 1 but renamed or removed entirely in
+         * preview revision 2, which may cause an app attempting to call it to crash
+         * at runtime.</p>
+         *
+         * <p>Experimental apps targeting preview APIs should check this value for
+         * equality (<code>==</code>) with the preview SDK revision they were built for
+         * before using any prerelease platform APIs. Apps that detect a preview SDK revision
+         * other than the specific one they expect should fall back to using APIs from
+         * the previously published API level only to avoid unwanted runtime exceptions.
+         * </p>
+         */
+        public static final int PREVIEW_SDK_INT = SystemProperties.getInt(
+                "ro.build.version.preview_sdk", 0);
+
+        /**
          * The current development codename, or the string "REL" if this is
          * a release build.
          */
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index 5e9b8c1..74699fd 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -211,8 +211,9 @@
                     } else if (obj instanceof Parcelable[]) {
                         Parcelable[] array = (Parcelable[]) obj;
                         for (int n = array.length - 1; n >= 0; n--) {
-                            if ((array[n].describeContents()
-                                    & Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0) {
+                            Parcelable p = array[n];
+                            if (p != null && ((p.describeContents()
+                                    & Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0)) {
                                 fdFound = true;
                                 break;
                             }
@@ -221,7 +222,8 @@
                         SparseArray<? extends Parcelable> array =
                                 (SparseArray<? extends Parcelable>) obj;
                         for (int n = array.size() - 1; n >= 0; n--) {
-                            if ((array.valueAt(n).describeContents()
+                            Parcelable p = array.valueAt(n);
+                            if (p != null && (p.describeContents()
                                     & Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0) {
                                 fdFound = true;
                                 break;
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index 4aff7a1..19c8fa9 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -169,6 +169,65 @@
         public int otherSwappedOut;
 
         /** @hide */
+        public static final int HEAP_UNKNOWN = 0;
+        /** @hide */
+        public static final int HEAP_DALVIK = 1;
+        /** @hide */
+        public static final int HEAP_NATIVE = 2;
+
+        /** @hide */
+        public static final int OTHER_DALVIK_OTHER = 0;
+        /** @hide */
+        public static final int OTHER_STACK = 1;
+        /** @hide */
+        public static final int OTHER_CURSOR = 2;
+        /** @hide */
+        public static final int OTHER_ASHMEM = 3;
+        /** @hide */
+        public static final int OTHER_GL_DEV = 4;
+        /** @hide */
+        public static final int OTHER_UNKNOWN_DEV = 5;
+        /** @hide */
+        public static final int OTHER_SO = 6;
+        /** @hide */
+        public static final int OTHER_JAR = 7;
+        /** @hide */
+        public static final int OTHER_APK = 8;
+        /** @hide */
+        public static final int OTHER_TTF = 9;
+        /** @hide */
+        public static final int OTHER_DEX = 10;
+        /** @hide */
+        public static final int OTHER_OAT = 11;
+        /** @hide */
+        public static final int OTHER_ART = 12;
+        /** @hide */
+        public static final int OTHER_UNKNOWN_MAP = 13;
+        /** @hide */
+        public static final int OTHER_GRAPHICS = 14;
+        /** @hide */
+        public static final int OTHER_GL = 15;
+        /** @hide */
+        public static final int OTHER_OTHER_MEMTRACK = 16;
+
+        /** @hide */
+        public static final int OTHER_DALVIK_NORMAL = 17;
+        /** @hide */
+        public static final int OTHER_DALVIK_LARGE = 18;
+        /** @hide */
+        public static final int OTHER_DALVIK_LINEARALLOC = 19;
+        /** @hide */
+        public static final int OTHER_DALVIK_ACCOUNTING = 20;
+        /** @hide */
+        public static final int OTHER_DALVIK_CODE_CACHE = 21;
+        /** @hide */
+        public static final int OTHER_DALVIK_ZYGOTE = 22;
+        /** @hide */
+        public static final int OTHER_DALVIK_NON_MOVING = 23;
+        /** @hide */
+        public static final int OTHER_DALVIK_INDIRECT_REFERENCE_TABLE = 24;
+
+        /** @hide */
         public static final int NUM_OTHER_STATS = 17;
 
         /** @hide */
@@ -284,6 +343,11 @@
         }
 
         /** @hide */
+        public int getOtherPrivate(int which) {
+          return getOtherPrivateClean(which) + getOtherPrivateDirty(which);
+        }
+
+        /** @hide */
         public int getOtherSharedClean(int which) {
             return otherStats[which*NUM_CATEGORIES + offsetSharedClean];
         }
@@ -296,35 +360,157 @@
         /** @hide */
         public static String getOtherLabel(int which) {
             switch (which) {
-                case 0: return "Dalvik Other";
-                case 1: return "Stack";
-                case 2: return "Cursor";
-                case 3: return "Ashmem";
-                case 4: return "Gfx dev";
-                case 5: return "Other dev";
-                case 6: return ".so mmap";
-                case 7: return ".jar mmap";
-                case 8: return ".apk mmap";
-                case 9: return ".ttf mmap";
-                case 10: return ".dex mmap";
-                case 11: return ".oat mmap";
-                case 12: return ".art mmap";
-                case 13: return "Other mmap";
-                case 14: return "EGL mtrack";
-                case 15: return "GL mtrack";
-                case 16: return "Other mtrack";
-                case 17: return ".Heap";
-                case 18: return ".LOS";
-                case 19: return ".LinearAlloc";
-                case 20: return ".GC";
-                case 21: return ".JITCache";
-                case 22: return ".Zygote";
-                case 23: return ".NonMoving";
-                case 24: return ".IndirectRef";
+                case OTHER_DALVIK_OTHER: return "Dalvik Other";
+                case OTHER_STACK: return "Stack";
+                case OTHER_CURSOR: return "Cursor";
+                case OTHER_ASHMEM: return "Ashmem";
+                case OTHER_GL_DEV: return "Gfx dev";
+                case OTHER_UNKNOWN_DEV: return "Other dev";
+                case OTHER_SO: return ".so mmap";
+                case OTHER_JAR: return ".jar mmap";
+                case OTHER_APK: return ".apk mmap";
+                case OTHER_TTF: return ".ttf mmap";
+                case OTHER_DEX: return ".dex mmap";
+                case OTHER_OAT: return ".oat mmap";
+                case OTHER_ART: return ".art mmap";
+                case OTHER_UNKNOWN_MAP: return "Other mmap";
+                case OTHER_GRAPHICS: return "EGL mtrack";
+                case OTHER_GL: return "GL mtrack";
+                case OTHER_OTHER_MEMTRACK: return "Other mtrack";
+                case OTHER_DALVIK_NORMAL: return ".Heap";
+                case OTHER_DALVIK_LARGE: return ".LOS";
+                case OTHER_DALVIK_LINEARALLOC: return ".LinearAlloc";
+                case OTHER_DALVIK_ACCOUNTING: return ".GC";
+                case OTHER_DALVIK_CODE_CACHE: return ".JITCache";
+                case OTHER_DALVIK_ZYGOTE: return ".Zygote";
+                case OTHER_DALVIK_NON_MOVING: return ".NonMoving";
+                case OTHER_DALVIK_INDIRECT_REFERENCE_TABLE: return ".IndirectRef";
                 default: return "????";
             }
         }
 
+        /**
+         * Pss of Java Heap bytes in KB due to the application.
+         * Notes:
+         *  * OTHER_ART is the boot image. Anything private here is blamed on
+         *    the application, not the system.
+         *  * dalvikPrivateDirty includes private zygote, which means the
+         *    application dirtied something allocated by the zygote. We blame
+         *    the application for that memory, not the system.
+         *  * Does not include OTHER_DALVIK_OTHER, which is considered VM
+         *    Overhead and lumped into Private Other.
+         *  * We don't include dalvikPrivateClean, because there should be no
+         *    such thing as private clean for the Java Heap.
+         * @hide
+         */
+        public int getSummaryJavaHeap() {
+            return dalvikPrivateDirty + getOtherPrivate(OTHER_ART);
+        }
+
+        /**
+         * Pss of Native Heap bytes in KB due to the application.
+         * Notes:
+         *  * Includes private dirty malloc space.
+         *  * We don't include nativePrivateClean, because there should be no
+         *    such thing as private clean for the Native Heap.
+         * @hide
+         */
+        public int getSummaryNativeHeap() {
+            return nativePrivateDirty;
+        }
+
+        /**
+         * Pss of code and other static resource bytes in KB due to
+         * the application.
+         * @hide
+         */
+        public int getSummaryCode() {
+            return getOtherPrivate(OTHER_SO)
+              + getOtherPrivate(OTHER_JAR)
+              + getOtherPrivate(OTHER_APK)
+              + getOtherPrivate(OTHER_TTF)
+              + getOtherPrivate(OTHER_DEX)
+              + getOtherPrivate(OTHER_OAT);
+        }
+
+        /**
+         * Pss in KB of the stack due to the application.
+         * Notes:
+         *  * Includes private dirty stack, which includes both Java and Native
+         *    stack.
+         *  * Does not include private clean stack, because there should be no
+         *    such thing as private clean for the stack.
+         * @hide
+         */
+        public int getSummaryStack() {
+            return getOtherPrivateDirty(OTHER_STACK);
+        }
+
+        /**
+         * Pss in KB of graphics due to the application.
+         * Notes:
+         *  * Includes private Gfx, EGL, and GL.
+         *  * Warning: These numbers can be misreported by the graphics drivers.
+         *  * We don't include shared graphics. It may make sense to, because
+         *    shared graphics are likely buffers due to the application
+         *    anyway, but it's simpler to implement to just group all shared
+         *    memory into the System category.
+         * @hide
+         */
+        public int getSummaryGraphics() {
+            return getOtherPrivate(OTHER_GL_DEV)
+              + getOtherPrivate(OTHER_GRAPHICS)
+              + getOtherPrivate(OTHER_GL);
+        }
+
+        /**
+         * Pss in KB due to the application that haven't otherwise been
+         * accounted for.
+         * @hide
+         */
+        public int getSummaryPrivateOther() {
+            return getTotalPrivateClean()
+              + getTotalPrivateDirty()
+              - getSummaryJavaHeap()
+              - getSummaryNativeHeap()
+              - getSummaryCode()
+              - getSummaryStack()
+              - getSummaryGraphics();
+        }
+
+        /**
+         * Pss in KB due to the system.
+         * Notes:
+         *  * Includes all shared memory.
+         * @hide
+         */
+        public int getSummarySystem() {
+            return getTotalPss()
+              - getTotalPrivateClean()
+              - getTotalPrivateDirty();
+        }
+
+        /**
+         * Total Pss in KB.
+         * @hide
+         */
+        public int getSummaryTotalPss() {
+            return getTotalPss();
+        }
+
+        /**
+         * Total Swap in KB.
+         * Notes:
+         *  * Some of this memory belongs in other categories, but we don't
+         *    know if the Swap memory is shared or private, so we don't know
+         *    what to blame on the application and what on the system.
+         *    For now, just lump all the Swap in one place.
+         * @hide
+         */
+        public int getSummaryTotalSwap() {
+            return getTotalSwappedOut();
+        }
+
         public int describeContents() {
             return 0;
         }
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index e3e16eb..8e0584a 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.os.storage.StorageManager;
 import android.os.storage.StorageVolume;
+import android.text.TextUtils;
 import android.util.Log;
 
 import java.io.File;
@@ -242,6 +243,15 @@
         return DATA_DIRECTORY;
     }
 
+    /** {@hide} */
+    public static File getDataAppDirectory(String volumeUuid) {
+        if (TextUtils.isEmpty(volumeUuid)) {
+            return new File("/data/app");
+        } else {
+            return new File("/mnt/expand/" + volumeUuid + "/app");
+        }
+    }
+
     /**
      * 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/IPermissionController.aidl b/core/java/android/os/IPermissionController.aidl
index 0cc1603..5e8590a 100644
--- a/core/java/android/os/IPermissionController.aidl
+++ b/core/java/android/os/IPermissionController.aidl
@@ -21,4 +21,5 @@
 interface IPermissionController {
     boolean checkPermission(String permission, int pid, int uid);
     String[] getPackagesForUid(int uid);
+    boolean isRuntimePermission(String permission);
 }
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index c2fd3c3..f212daf 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -45,13 +45,12 @@
     Bundle getUserRestrictions(int userHandle);
     boolean hasUserRestriction(in String restrictionKey, int userHandle);
     void setUserRestrictions(in Bundle restrictions, int userHandle);
+    void setUserRestriction(String key, boolean value, int userId);
+    void setSystemControlledUserRestriction(String key, boolean value, int userId);
     void setApplicationRestrictions(in String packageName, in Bundle restrictions,
             int userHandle);
     Bundle getApplicationRestrictions(in String packageName);
     Bundle getApplicationRestrictionsForUser(in String packageName, int userHandle);
-    boolean setRestrictionsChallenge(in String newPin);
-    int checkRestrictionsChallenge(in String pin);
-    boolean hasRestrictionsChallenge();
     void removeRestrictions();
     void setDefaultGuestRestrictions(in Bundle restrictions);
     Bundle getDefaultGuestRestrictions();
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 8c1f44f..1273772b 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -502,7 +502,25 @@
      * {@SystemApi}
      */
     public final void writeBlob(byte[] b) {
-        nativeWriteBlob(mNativePtr, b, 0, (b != null) ? b.length : 0);
+        writeBlob(b, 0, (b != null) ? b.length : 0);
+    }
+
+    /**
+     * Write a blob of data into the parcel at the current {@link #dataPosition},
+     * growing {@link #dataCapacity} if needed.
+     * @param b Bytes to place into the parcel.
+     * @param offset Index of first byte to be written.
+     * @param len Number of bytes to write.
+     * {@hide}
+     * {@SystemApi}
+     */
+    public final void writeBlob(byte[] b, int offset, int len) {
+        if (b == null) {
+            writeInt(-1);
+            return;
+        }
+        Arrays.checkOffsetAndCount(b.length, offset, len);
+        nativeWriteBlob(mNativePtr, b, offset, len);
     }
 
     /**
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 355ec8c..009649f 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -634,6 +634,9 @@
             if ((debugFlags & Zygote.DEBUG_ENABLE_JIT) != 0) {
                 argsForZygote.add("--enable-jit");
             }
+            if ((debugFlags & Zygote.DEBUG_GENERATE_CFI) != 0) {
+                argsForZygote.add("--generate-cfi");
+            }
             if ((debugFlags & Zygote.DEBUG_ENABLE_ASSERT) != 0) {
                 argsForZygote.add("--enable-assert");
             }
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 44eb1ed..cc37d5e 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -412,6 +412,16 @@
     public static final String DISALLOW_SAFE_BOOT = "no_safe_boot";
 
     /**
+     * Specifies if a user is not allowed to record audio. This restriction is always enabled for
+     * background users. The default value is <code>false</code>.
+     *
+     * @see #setUserRestrictions(Bundle)
+     * @see #getUserRestrictions()
+     * @hide
+     */
+    public static final String DISALLOW_RECORD_AUDIO = "no_record_audio";
+
+    /**
      * Application restriction key that is used to indicate the pending arrival
      * of real restrictions for the app.
      *
@@ -688,9 +698,11 @@
      */
     @Deprecated
     public void setUserRestriction(String key, boolean value, UserHandle userHandle) {
-        Bundle bundle = getUserRestrictions(userHandle);
-        bundle.putBoolean(key, value);
-        setUserRestrictions(bundle, userHandle);
+        try {
+            mService.setUserRestriction(key, value, userHandle.getIdentifier());
+        } catch (RemoteException re) {
+            Log.w(TAG, "Could not set user restriction", re);
+        }
     }
 
     /**
@@ -744,7 +756,7 @@
      * @see #getSerialNumberForUser(UserHandle)
      */
     public UserHandle getUserForSerialNumber(long serialNumber) {
-        int ident = getUserHandle((int)serialNumber);
+        int ident = getUserHandle((int) serialNumber);
         return ident >= 0 ? new UserHandle(ident) : null;
     }
 
@@ -1252,49 +1264,10 @@
      * apps and requires the MANAGE_USERS permission.
      * @param newPin the PIN to use for challenge dialogs.
      * @return Returns true if the challenge PIN was set successfully.
+     * @deprecated The restrictions PIN functionality is no longer provided by the system.
+     * This method is preserved for backwards compatibility reasons and always returns false.
      */
     public boolean setRestrictionsChallenge(String newPin) {
-        try {
-            return mService.setRestrictionsChallenge(newPin);
-        } catch (RemoteException re) {
-            Log.w(TAG, "Could not change restrictions pin");
-        }
-        return false;
-    }
-
-    /**
-     * @hide
-     * @param pin The PIN to verify, or null to get the number of milliseconds to wait for before
-     * allowing the user to enter the PIN.
-     * @return Returns a positive number (including zero) for how many milliseconds before
-     * you can accept another PIN, when the input is null or the input doesn't match the saved PIN.
-     * Returns {@link #PIN_VERIFICATION_SUCCESS} if the input matches the saved PIN. Returns
-     * {@link #PIN_VERIFICATION_FAILED_NOT_SET} if there is no PIN set.
-     */
-    public int checkRestrictionsChallenge(String pin) {
-        try {
-            return mService.checkRestrictionsChallenge(pin);
-        } catch (RemoteException re) {
-            Log.w(TAG, "Could not check restrictions pin");
-        }
-        return PIN_VERIFICATION_FAILED_INCORRECT;
-    }
-
-    /**
-     * @hide
-     * Checks whether the user has restrictions that are PIN-protected. An application that
-     * participates in restrictions can check if the owner has requested a PIN challenge for
-     * any restricted operations. If there is a PIN in effect, the application should launch
-     * the PIN challenge activity {@link android.content.Intent#ACTION_RESTRICTIONS_CHALLENGE}.
-     * @see android.content.Intent#ACTION_RESTRICTIONS_CHALLENGE
-     * @return whether a restrictions PIN is in effect.
-     */
-    public boolean hasRestrictionsChallenge() {
-        try {
-            return mService.hasRestrictionsChallenge();
-        } catch (RemoteException re) {
-            Log.w(TAG, "Could not change restrictions pin");
-        }
         return false;
     }
 
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 50e7d1c4..3fdabee 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -584,7 +584,7 @@
         // Nickname always takes precedence when defined
         if (!TextUtils.isEmpty(vol.fsUuid)) {
             final VolumeRecord rec = findRecordByUuid(vol.fsUuid);
-            if (!TextUtils.isEmpty(rec.nickname)) {
+            if (rec != null && !TextUtils.isEmpty(rec.nickname)) {
                 return rec.nickname;
             }
         }
diff --git a/core/java/android/preference/GenericInflater.java b/core/java/android/preference/GenericInflater.java
index 918933b..3319e64 100644
--- a/core/java/android/preference/GenericInflater.java
+++ b/core/java/android/preference/GenericInflater.java
@@ -376,6 +376,7 @@
                 Class clazz = mContext.getClassLoader().loadClass(
                         prefix != null ? (prefix + name) : name);
                 constructor = clazz.getConstructor(mConstructorSignature);
+                constructor.setAccessible(true);
                 sConstructorMap.put(name, constructor);
             }
 
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 396cf19..e07e846 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -9062,5 +9062,15 @@
          */
         public static final Uri CONTENT_URI = Uri.withAppendedPath(METADATA_AUTHORITY_URI,
                 "metadata_sync");
+
+        /**
+         * The MIME type of {@link #CONTENT_URI} providing a directory of contact metadata
+         */
+        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_metadata";
+
+        /**
+         * The MIME type of a {@link #CONTENT_URI} subdirectory of a single contact metadata.
+         */
+        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_metadata";
     }
 }
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 293cf6f..dc70d7b 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -324,23 +324,7 @@
             "android.settings.BLUETOOTH_SETTINGS";
 
     /**
-     * Activity Action: Show settings to allow configuration of Wifi Displays.
-     * <p>
-     * In some cases, a matching Activity may not exist, so ensure you
-     * safeguard against this.
-     * <p>
-     * Input: Nothing.
-     * <p>
-     * Output: Nothing.
-     * @hide
-     */
-    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
-    public static final String ACTION_WIFI_DISPLAY_SETTINGS =
-            "android.settings.WIFI_DISPLAY_SETTINGS";
-
-    /**
-     * Activity Action: Show settings to allow configuration of
-     * {@link android.media.routing.MediaRouteService media route providers}.
+     * Activity Action: Show settings to allow configuration of cast endpoints.
      * <p>
      * In some cases, a matching Activity may not exist, so ensure you
      * safeguard against this.
@@ -825,6 +809,18 @@
             = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS";
 
     /**
+     * Activity Action: Show Do Not Disturb access settings.
+     * <p>
+     * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
+     * <p>
+     * Input: Nothing.
+     * <p>
+     * Output: Nothing.
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_ZEN_ACCESS_SETTINGS = "android.settings.ZEN_ACCESS_SETTINGS";
+
+    /**
      * @hide
      */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
@@ -5951,6 +5947,12 @@
                 "wireless_charging_started_sound";
 
         /**
+         * Whether to play a sound for charging events.
+         * @hide
+         */
+        public static final String CHARGING_SOUNDS_ENABLED = "charging_sounds_enabled";
+
+        /**
          * Whether we keep the device on while the device is plugged in.
          * Supported values are:
          * <ul>
@@ -6166,6 +6168,17 @@
         */
        public static final String MOBILE_DATA = "mobile_data";
 
+       /**
+        * Whether the mobile data connection should remain active even when higher
+        * priority networks like WiFi are active, to help make network switching faster.
+        *
+        * See ConnectivityService for more info.
+        *
+        * (0 = disabled, 1 = enabled)
+        * @hide
+        */
+       public static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
+
        /** {@hide} */
        public static final String NETSTATS_ENABLED = "netstats_enabled";
        /** {@hide} */
diff --git a/core/java/android/security/IKeystoreService.aidl b/core/java/android/security/IKeystoreService.aidl
index 579cdbe..4809050 100644
--- a/core/java/android/security/IKeystoreService.aidl
+++ b/core/java/android/security/IKeystoreService.aidl
@@ -37,9 +37,9 @@
     int exist(String name, int uid);
     String[] saw(String namePrefix, int uid);
     int reset();
-    int password(String password);
+    int onUserPasswordChanged(int userId, String newPassword);
     int lock();
-    int unlock(String password);
+    int unlock(int userId, String userPassword);
     int zero();
     int generate(String name, int uid, int keyType, int keySize, int flags,
         in KeystoreArguments args);
diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java
index d8834fe..0e2b8ba 100644
--- a/core/java/android/security/keymaster/KeymasterDefs.java
+++ b/core/java/android/security/keymaster/KeymasterDefs.java
@@ -238,6 +238,8 @@
         sErrorCodeToString.put(KM_ERROR_UNSUPPORTED_EC_FIELD, "Unsupported EC field");
         sErrorCodeToString.put(KM_ERROR_MISSING_NONCE, "Required IV missing");
         sErrorCodeToString.put(KM_ERROR_INVALID_NONCE, "Invalid IV");
+        sErrorCodeToString.put(KM_ERROR_CALLER_NONCE_PROHIBITED,
+                "Caller-provided IV not permitted");
         sErrorCodeToString.put(KM_ERROR_UNIMPLEMENTED, "Not implemented");
         sErrorCodeToString.put(KM_ERROR_UNKNOWN_ERROR, "Unknown error");
     }
diff --git a/core/java/android/service/carrier/CarrierMessagingService.java b/core/java/android/service/carrier/CarrierMessagingService.java
index 0592a84..d7bf10c 100644
--- a/core/java/android/service/carrier/CarrierMessagingService.java
+++ b/core/java/android/service/carrier/CarrierMessagingService.java
@@ -80,6 +80,11 @@
      */
     public static final int DOWNLOAD_STATUS_ERROR = 2;
 
+    /**
+     * Flag to request SMS delivery status report.
+     */
+    public static final int SEND_FLAG_REQUEST_DELIVERY_STATUS = 1;
+
     private final ICarrierMessagingWrapper mWrapper = new ICarrierMessagingWrapper();
 
     /**
@@ -103,12 +108,14 @@
 
     /**
      * Override this method to intercept text SMSs sent from the device.
+     * @deprecated Override {@link #onSendTextSms} below instead.
      *
      * @param text the text to send
      * @param subId SMS subscription ID of the SIM
      * @param destAddress phone number of the recipient of the message
      * @param callback result callback. Call with a {@link SendSmsResult}.
      */
+    @Deprecated
     public void onSendTextSms(
             @NonNull String text, int subId, @NonNull String destAddress,
             @NonNull ResultCallback<SendSmsResult> callback) {
@@ -120,20 +127,78 @@
     }
 
     /**
+     * Override this method to intercept text SMSs sent from the device.
+     *
+     * @param text the text to send
+     * @param subId SMS subscription ID of the SIM
+     * @param destAddress phone number of the recipient of the message
+     * @param sendSmsFlag Flag for sending SMS. Acceptable values are 0 and
+     *        {@link #SEND_FLAG_REQUEST_DELIVERY_STATUS}.
+     * @param callback result callback. Call with a {@link SendSmsResult}.
+     */
+    public void onSendTextSms(
+            @NonNull String text, int subId, @NonNull String destAddress,
+            int sendSmsFlag, @NonNull ResultCallback<SendSmsResult> callback) {
+        // optional
+        onSendTextSms(text, subId, destAddress, callback);
+    }
+
+    /**
+     * Override this method to intercept binary SMSs sent from the device.
+     * @deprecated Override {@link #onSendDataSms} below instead.
+     *
+     * @param data the binary content
+     * @param subId SMS subscription ID of the SIM
+     * @param destAddress phone number of the recipient of the message
+     * @param destPort the destination port
+     * @param callback result callback. Call with a {@link SendSmsResult}.
+     */
+    @Deprecated
+    public void onSendDataSms(@NonNull byte[] data, int subId,
+            @NonNull String destAddress, int destPort,
+            @NonNull ResultCallback<SendSmsResult> callback) {
+        // optional
+        try {
+            callback.onReceiveResult(new SendSmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, 0));
+        } catch (RemoteException ex) {
+        }
+    }
+
+    /**
      * Override this method to intercept binary SMSs sent from the device.
      *
      * @param data the binary content
      * @param subId SMS subscription ID of the SIM
      * @param destAddress phone number of the recipient of the message
      * @param destPort the destination port
+     * @param sendSmsFlag Flag for sending SMS. Acceptable values are 0 and
+     *        {@link #SEND_FLAG_REQUEST_DELIVERY_STATUS}.
      * @param callback result callback. Call with a {@link SendSmsResult}.
      */
     public void onSendDataSms(@NonNull byte[] data, int subId,
-            @NonNull String destAddress, int destPort,
+            @NonNull String destAddress, int destPort, int sendSmsFlag,
             @NonNull ResultCallback<SendSmsResult> callback) {
         // optional
+        onSendDataSms(data, subId, destAddress, destPort, callback);
+    }
+
+    /**
+     * Override this method to intercept long SMSs sent from the device.
+     * @deprecated Override {@link #onSendMultipartTextSms} below instead.
+     *
+     * @param parts a {@link List} of the message parts
+     * @param subId SMS subscription ID of the SIM
+     * @param destAddress phone number of the recipient of the message
+     * @param callback result callback. Call with a {@link SendMultipartSmsResult}.
+     */
+    @Deprecated
+    public void onSendMultipartTextSms(@NonNull List<String> parts,
+            int subId, @NonNull String destAddress,
+            @NonNull ResultCallback<SendMultipartSmsResult> callback) {
+        // optional
         try {
-            callback.onReceiveResult(new SendSmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, 0));
+            callback.onReceiveResult(
+                    new SendMultipartSmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, null));
         } catch (RemoteException ex) {
         }
     }
@@ -144,17 +209,15 @@
      * @param parts a {@link List} of the message parts
      * @param subId SMS subscription ID of the SIM
      * @param destAddress phone number of the recipient of the message
+     * @param sendSmsFlag Flag for sending SMS. Acceptable values are 0 and
+     *        {@link #SEND_FLAG_REQUEST_DELIVERY_STATUS}.
      * @param callback result callback. Call with a {@link SendMultipartSmsResult}.
      */
     public void onSendMultipartTextSms(@NonNull List<String> parts,
-            int subId, @NonNull String destAddress,
+            int subId, @NonNull String destAddress, int sendSmsFlag,
             @NonNull ResultCallback<SendMultipartSmsResult> callback) {
         // optional
-        try {
-            callback.onReceiveResult(
-                    new SendMultipartSmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, null));
-        } catch (RemoteException ex) {
-        }
+        onSendMultipartTextSms(parts, subId, destAddress, callback);
     }
 
     /**
@@ -355,8 +418,9 @@
 
         @Override
         public void sendTextSms(String text, int subId, String destAddress,
-                                final ICarrierMessagingCallback callback) {
-            onSendTextSms(text, subId, destAddress, new ResultCallback<SendSmsResult>() {
+                int sendSmsFlag, final ICarrierMessagingCallback callback) {
+            onSendTextSms(text, subId, destAddress, sendSmsFlag,
+                    new ResultCallback<SendSmsResult>() {
                     @Override
                     public void onReceiveResult(final SendSmsResult result) throws RemoteException {
                         callback.onSendSmsComplete(result.getSendStatus(), result.getMessageRef());
@@ -366,8 +430,9 @@
 
         @Override
         public void sendDataSms(byte[] data, int subId, String destAddress, int destPort,
-                                final ICarrierMessagingCallback callback) {
-            onSendDataSms(data, subId, destAddress, destPort, new ResultCallback<SendSmsResult>() {
+                int sendSmsFlag, final ICarrierMessagingCallback callback) {
+            onSendDataSms(data, subId, destAddress, destPort, sendSmsFlag,
+                    new ResultCallback<SendSmsResult>() {
                     @Override
                     public void onReceiveResult(final SendSmsResult result) throws RemoteException {
                         callback.onSendSmsComplete(result.getSendStatus(), result.getMessageRef());
@@ -377,8 +442,8 @@
 
         @Override
         public void sendMultipartTextSms(List<String> parts, int subId, String destAddress,
-                                         final ICarrierMessagingCallback callback) {
-                onSendMultipartTextSms(parts, subId, destAddress,
+                int sendSmsFlag, final ICarrierMessagingCallback callback) {
+            onSendMultipartTextSms(parts, subId, destAddress, sendSmsFlag,
                         new ResultCallback<SendMultipartSmsResult>() {
                                 @Override
                                 public void onReceiveResult(final SendMultipartSmsResult result)
diff --git a/core/java/android/service/carrier/ICarrierMessagingService.aidl b/core/java/android/service/carrier/ICarrierMessagingService.aidl
index 40a9047..2d96c3d 100644
--- a/core/java/android/service/carrier/ICarrierMessagingService.aidl
+++ b/core/java/android/service/carrier/ICarrierMessagingService.aidl
@@ -48,9 +48,10 @@
      * @param text the text to send
      * @param subId SMS subscription ID of the SIM
      * @param destAddress phone number of the recipient of the message
+     * @param sendSmsFlag flag for sending SMS
      * @param callback the callback to notify upon completion
      */
-    void sendTextSms(String text, int subId, String destAddress,
+    void sendTextSms(String text, int subId, String destAddress, int sendSmsFlag,
             in ICarrierMessagingCallback callback);
 
     /**
@@ -62,10 +63,11 @@
      * @param subId SMS subscription ID of the SIM
      * @param destAddress phone number of the recipient of the message
      * @param destPort port number of the recipient of the message
+     * @param sendSmsFlag flag for sending SMS
      * @param callback the callback to notify upon completion
      */
     void sendDataSms(in byte[] data, int subId, String destAddress, int destPort,
-            in ICarrierMessagingCallback callback);
+            int sendSmsFlag, in ICarrierMessagingCallback callback);
 
     /**
      * Request sending a new multi-part text SMS from the device.
@@ -75,10 +77,11 @@
      * @param parts the parts of the multi-part text SMS to send
      * @param subId SMS subscription ID of the SIM
      * @param destAddress phone number of the recipient of the message
+     * @param sendSmsFlag flag for sending SMS
      * @param callback the callback to notify upon completion
      */
     void sendMultipartTextSms(in List<String> parts, int subId, String destAddress,
-            in ICarrierMessagingCallback callback);
+            int sendSmsFlag, in ICarrierMessagingCallback callback);
 
     /**
      * Request sending a new MMS PDU from the device.
diff --git a/core/java/android/service/chooser/ChooserTarget.java b/core/java/android/service/chooser/ChooserTarget.java
index f0ca276..4c94ee7 100644
--- a/core/java/android/service/chooser/ChooserTarget.java
+++ b/core/java/android/service/chooser/ChooserTarget.java
@@ -58,12 +58,6 @@
     private IntentSender mIntentSender;
 
     /**
-     * A raw intent provided in lieu of an IntentSender. Will be filled in and sent
-     * by {@link #sendIntent(Context, Intent)}.
-     */
-    private Intent mIntent;
-
-    /**
      * The score given to this item. It can be normalized.
      */
     private float mScore;
@@ -146,43 +140,6 @@
         mIntentSender = intentSender;
     }
 
-    /**
-     * Construct a deep link target for presentation by a chooser UI.
-     *
-     * <p>A target is composed of a title and an icon for presentation to the user.
-     * The UI presenting this target may truncate the title if it is too long to be presented
-     * in the available space, as well as crop, resize or overlay the supplied icon.</p>
-     *
-     * <p>The creator of a target may supply a ranking score. This score is assumed to be relative
-     * to the other targets supplied by the same
-     * {@link ChooserTargetService#onGetChooserTargets(ComponentName, IntentFilter) query}.
-     * Scores should be in the range from 0.0f (unlikely match) to 1.0f (very relevant match).
-     * Scores for a set of targets do not need to sum to 1.</p>
-     *
-     * <p>Before being sent, the Intent supplied will be
-     * {@link Intent#fillIn(Intent, int) filled in} by the Intent originally supplied
-     * to the chooser.</p>
-     *
-     * <p>Take care not to place custom {@link android.os.Parcelable} types into
-     * the Intent as extras, as the system will not be able to unparcel it to merge
-     * additional extras.</p>
-     *
-     * @param title title of this target that will be shown to a user
-     * @param icon icon to represent this target
-     * @param score ranking score for this target between 0.0f and 1.0f, inclusive
-     * @param intent Intent to fill in and send if the user chooses this target
-     */
-    public ChooserTarget(CharSequence title, Bitmap icon, float score, Intent intent) {
-        mTitle = title;
-        mIcon = icon;
-        if (score > 1.f || score < 0.f) {
-            throw new IllegalArgumentException("Score " + score + " out of range; "
-                    + "must be between 0.0f and 1.0f");
-        }
-        mScore = score;
-        mIntent = intent;
-    }
-
     ChooserTarget(Parcel in) {
         mTitle = in.readCharSequence();
         if (in.readInt() != 0) {
@@ -192,9 +149,6 @@
         }
         mScore = in.readFloat();
         mIntentSender = IntentSender.readIntentSenderOrNullFromParcel(in);
-        if (in.readInt() != 0) {
-            mIntent = Intent.CREATOR.createFromParcel(in);
-        }
     }
 
     /**
@@ -241,18 +195,6 @@
     }
 
     /**
-     * Returns the Intent supplied by the ChooserTarget's creator.
-     * This may be null if the creator specified an IntentSender or PendingIntent instead.
-     *
-     * <p>To fill in and send the intent, see {@link #sendIntent(Context, Intent)}.</p>
-     *
-     * @return the Intent supplied by the ChooserTarget's creator
-     */
-    public Intent getIntent() {
-        return mIntent;
-    }
-
-    /**
      * Fill in the IntentSender supplied by the ChooserTarget's creator and send it.
      *
      * @param context the sending Context; generally the Activity presenting the chooser UI
@@ -272,91 +214,8 @@
                 Log.e(TAG, "sendIntent " + this + " failed", e);
                 return false;
             }
-        } else if (mIntent != null) {
-            try {
-                final Intent toSend = new Intent(mIntent);
-                toSend.fillIn(fillInIntent, 0);
-                context.startActivity(toSend);
-                return true;
-            } catch (Exception e) {
-                Log.e(TAG, "sendIntent " + this + " failed", e);
-                return false;
-            }
         } else {
-            Log.e(TAG, "sendIntent " + this + " failed - no IntentSender or Intent to send");
-            return false;
-        }
-    }
-
-    /**
-     * Same as {@link #sendIntent(Context, Intent)}, but offers a userId field to use
-     * for launching the {@link #getIntent() intent} using
-     * {@link Activity#startActivityAsCaller(Intent, Bundle, int)} if the
-     * {@link #getIntentSender() IntentSender} is not present. If the IntentSender is present,
-     * it will be invoked as usual with its own calling identity.
-     *
-     * @hide internal use only.
-     */
-    public boolean sendIntentAsCaller(Activity context, Intent fillInIntent, int userId) {
-        if (fillInIntent != null) {
-            fillInIntent.migrateExtraStreamToClipData();
-            fillInIntent.prepareToLeaveProcess();
-        }
-        if (mIntentSender != null) {
-            try {
-                mIntentSender.sendIntent(context, 0, fillInIntent, null, null);
-                return true;
-            } catch (IntentSender.SendIntentException e) {
-                Log.e(TAG, "sendIntent " + this + " failed", e);
-                return false;
-            }
-        } else if (mIntent != null) {
-            try {
-                final Intent toSend = new Intent(mIntent);
-                toSend.fillIn(fillInIntent, 0);
-                context.startActivityAsCaller(toSend, null, userId);
-                return true;
-            } catch (Exception e) {
-                Log.e(TAG, "sendIntent " + this + " failed", e);
-                return false;
-            }
-        } else {
-            Log.e(TAG, "sendIntent " + this + " failed - no IntentSender or Intent to send");
-            return false;
-        }
-    }
-
-    /**
-     * The UserHandle is only used if we're launching a raw intent. The IntentSender will be
-     * launched with its associated identity.
-     *
-     * @hide Internal use only
-     */
-    public boolean sendIntentAsUser(Activity context, Intent fillInIntent, UserHandle user) {
-        if (fillInIntent != null) {
-            fillInIntent.migrateExtraStreamToClipData();
-            fillInIntent.prepareToLeaveProcess();
-        }
-        if (mIntentSender != null) {
-            try {
-                mIntentSender.sendIntent(context, 0, fillInIntent, null, null);
-                return true;
-            } catch (IntentSender.SendIntentException e) {
-                Log.e(TAG, "sendIntent " + this + " failed", e);
-                return false;
-            }
-        } else if (mIntent != null) {
-            try {
-                final Intent toSend = new Intent(mIntent);
-                toSend.fillIn(fillInIntent, 0);
-                context.startActivityAsUser(toSend, user);
-                return true;
-            } catch (Exception e) {
-                Log.e(TAG, "sendIntent " + this + " failed", e);
-                return false;
-            }
-        } else {
-            Log.e(TAG, "sendIntent " + this + " failed - no IntentSender or Intent to send");
+            Log.e(TAG, "sendIntent " + this + " failed - no IntentSender to send");
             return false;
         }
     }
@@ -364,7 +223,7 @@
     @Override
     public String toString() {
         return "ChooserTarget{"
-                + (mIntentSender != null ? mIntentSender.getCreatorPackage() : mIntent)
+                + (mIntentSender != null ? mIntentSender.getCreatorPackage() : null)
                 + ", "
                 + "'" + mTitle
                 + "', " + mScore + "}";
@@ -386,10 +245,6 @@
         }
         dest.writeFloat(mScore);
         IntentSender.writeIntentSenderOrNullToParcel(mIntentSender, dest);
-        dest.writeInt(mIntent != null ? 1 : 0);
-        if (mIntent != null) {
-            mIntent.writeToParcel(dest, 0);
-        }
     }
 
     public static final Creator<ChooserTarget> CREATOR
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java
index 29aaf30..0171869 100644
--- a/core/java/android/service/dreams/DreamService.java
+++ b/core/java/android/service/dreams/DreamService.java
@@ -40,7 +40,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.MotionEvent;
-import android.view.PhoneWindow;
+import com.android.internal.policy.PhoneWindow;
 import android.view.SearchEvent;
 import android.view.View;
 import android.view.ViewGroup;
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 35b8819..7956a3f 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -21,7 +21,7 @@
 import android.app.INotificationManager;
 import android.app.Notification;
 import android.app.Notification.Builder;
-import android.app.NotificationManager.Policy;
+import android.app.NotificationManager;
 import android.app.Service;
 import android.content.ComponentName;
 import android.content.Context;
@@ -64,25 +64,29 @@
      * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
      *     Normal interruption filter.
      */
-    public static final int INTERRUPTION_FILTER_ALL = 1;
+    public static final int INTERRUPTION_FILTER_ALL
+            = NotificationManager.INTERRUPTION_FILTER_ALL;
 
     /**
      * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
      *     Priority interruption filter.
      */
-    public static final int INTERRUPTION_FILTER_PRIORITY = 2;
+    public static final int INTERRUPTION_FILTER_PRIORITY
+            = NotificationManager.INTERRUPTION_FILTER_PRIORITY;
 
     /**
      * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
      *     No interruptions filter.
      */
-    public static final int INTERRUPTION_FILTER_NONE = 3;
+    public static final int INTERRUPTION_FILTER_NONE
+            = NotificationManager.INTERRUPTION_FILTER_NONE;
 
     /**
      * {@link #getCurrentInterruptionFilter() Interruption filter} constant -
      *     Alarms only interruption filter.
      */
-    public static final int INTERRUPTION_FILTER_ALARMS = 4;
+    public static final int INTERRUPTION_FILTER_ALARMS
+            = NotificationManager.INTERRUPTION_FILTER_ALARMS;
 
     /** {@link #getCurrentInterruptionFilter() Interruption filter} constant - returned when
      * the value is unavailable for any reason.  For example, before the notification listener
@@ -90,7 +94,8 @@
      *
      * {@see #onListenerConnected()}
      */
-    public static final int INTERRUPTION_FILTER_UNKNOWN = 0;
+    public static final int INTERRUPTION_FILTER_UNKNOWN
+            = NotificationManager.INTERRUPTION_FILTER_UNKNOWN;
 
     /** {@link #getCurrentListenerHints() Listener hints} constant - the primary device UI
      * should disable notification sound, vibrating and other visual or aural effects.
@@ -516,22 +521,6 @@
     }
 
     /**
-     * Gets the notification policy token associated with this listener.
-     *
-     * <p>
-     * Returns null if this listener is not currently active.
-     */
-    public final Policy.Token getNotificationPolicyToken() {
-        if (!isBound()) return null;
-        try {
-            return getNotificationInterface().getPolicyTokenFromListener(mWrapper);
-        } catch (android.os.RemoteException ex) {
-            Log.v(TAG, "Unable to contact notification manager", ex);
-            return null;
-        }
-    }
-
-    /**
      * Sets the desired {@link #getCurrentListenerHints() listener hints}.
      *
      * <p>
diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java
index f09f4d2..599ac74 100644
--- a/core/java/android/service/notification/ZenModeConfig.java
+++ b/core/java/android/service/notification/ZenModeConfig.java
@@ -55,6 +55,7 @@
     public static final int SOURCE_CONTACT = 1;
     public static final int SOURCE_STAR = 2;
     public static final int MAX_SOURCE = SOURCE_STAR;
+    private static final int DEFAULT_SOURCE = SOURCE_CONTACT;
 
     public static final int[] ALL_DAYS = { Calendar.SUNDAY, Calendar.MONDAY, Calendar.TUESDAY,
             Calendar.WEDNESDAY, Calendar.THURSDAY, Calendar.FRIDAY, Calendar.SATURDAY };
@@ -67,6 +68,8 @@
     private static final int MINUTES_MS = 60 * SECONDS_MS;
     private static final int ZERO_VALUE_MS = 10 * SECONDS_MS;
 
+    private static final boolean DEFAULT_ALLOW_CALLS = true;
+    private static final boolean DEFAULT_ALLOW_MESSAGES = false;
     private static final boolean DEFAULT_ALLOW_REMINDERS = true;
     private static final boolean DEFAULT_ALLOW_EVENTS = true;
     private static final boolean DEFAULT_ALLOW_REPEAT_CALLERS = false;
@@ -79,6 +82,8 @@
     private static final String ALLOW_ATT_REPEAT_CALLERS = "repeatCallers";
     private static final String ALLOW_ATT_MESSAGES = "messages";
     private static final String ALLOW_ATT_FROM = "from";
+    private static final String ALLOW_ATT_CALLS_FROM = "callsFrom";
+    private static final String ALLOW_ATT_MESSAGES_FROM = "messagesFrom";
     private static final String ALLOW_ATT_REMINDERS = "reminders";
     private static final String ALLOW_ATT_EVENTS = "events";
 
@@ -103,12 +108,13 @@
     private static final String RULE_ATT_ZEN = "zen";
     private static final String RULE_ATT_CONDITION_ID = "conditionId";
 
-    public boolean allowCalls;
+    public boolean allowCalls = DEFAULT_ALLOW_CALLS;
     public boolean allowRepeatCallers = DEFAULT_ALLOW_REPEAT_CALLERS;
-    public boolean allowMessages;
+    public boolean allowMessages = DEFAULT_ALLOW_MESSAGES;
     public boolean allowReminders = DEFAULT_ALLOW_REMINDERS;
     public boolean allowEvents = DEFAULT_ALLOW_EVENTS;
-    public int allowFrom = SOURCE_ANYONE;
+    public int allowCallsFrom = DEFAULT_SOURCE;
+    public int allowMessagesFrom = DEFAULT_SOURCE;
 
     public ZenRule manualRule;
     public ArrayMap<String, ZenRule> automaticRules = new ArrayMap<>();
@@ -121,7 +127,8 @@
         allowMessages = source.readInt() == 1;
         allowReminders = source.readInt() == 1;
         allowEvents = source.readInt() == 1;
-        allowFrom = source.readInt();
+        allowCallsFrom = source.readInt();
+        allowMessagesFrom = source.readInt();
         manualRule = source.readParcelable(null);
         final int len = source.readInt();
         if (len > 0) {
@@ -142,7 +149,8 @@
         dest.writeInt(allowMessages ? 1 : 0);
         dest.writeInt(allowReminders ? 1 : 0);
         dest.writeInt(allowEvents ? 1 : 0);
-        dest.writeInt(allowFrom);
+        dest.writeInt(allowCallsFrom);
+        dest.writeInt(allowMessagesFrom);
         dest.writeParcelable(manualRule, 0);
         if (!automaticRules.isEmpty()) {
             final int len = automaticRules.size();
@@ -166,7 +174,8 @@
             .append("allowCalls=").append(allowCalls)
             .append(",allowRepeatCallers=").append(allowRepeatCallers)
             .append(",allowMessages=").append(allowMessages)
-            .append(",allowFrom=").append(sourceToString(allowFrom))
+            .append(",allowCallsFrom=").append(sourceToString(allowCallsFrom))
+            .append(",allowMessagesFrom=").append(sourceToString(allowMessagesFrom))
             .append(",allowReminders=").append(allowReminders)
             .append(",allowEvents=").append(allowEvents)
             .append(",automaticRules=").append(automaticRules)
@@ -234,7 +243,8 @@
         return other.allowCalls == allowCalls
                 && other.allowRepeatCallers == allowRepeatCallers
                 && other.allowMessages == allowMessages
-                && other.allowFrom == allowFrom
+                && other.allowCallsFrom == allowCallsFrom
+                && other.allowMessagesFrom == allowMessagesFrom
                 && other.allowReminders == allowReminders
                 && other.allowEvents == allowEvents
                 && Objects.equals(other.automaticRules, automaticRules)
@@ -243,8 +253,8 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(allowCalls, allowRepeatCallers, allowMessages, allowFrom,
-                allowReminders, allowEvents, automaticRules, manualRule);
+        return Objects.hash(allowCalls, allowRepeatCallers, allowMessages, allowCallsFrom,
+                allowMessagesFrom, allowReminders, allowEvents, automaticRules, manualRule);
     }
 
     private static String toDayList(int[] days) {
@@ -314,9 +324,19 @@
                     rt.allowReminders = safeBoolean(parser, ALLOW_ATT_REMINDERS,
                             DEFAULT_ALLOW_REMINDERS);
                     rt.allowEvents = safeBoolean(parser, ALLOW_ATT_EVENTS, DEFAULT_ALLOW_EVENTS);
-                    rt.allowFrom = safeInt(parser, ALLOW_ATT_FROM, SOURCE_ANYONE);
-                    if (rt.allowFrom < SOURCE_ANYONE || rt.allowFrom > MAX_SOURCE) {
-                        throw new IndexOutOfBoundsException("bad source in config:" + rt.allowFrom);
+                    final int from = safeInt(parser, ALLOW_ATT_FROM, -1);
+                    final int callsFrom = safeInt(parser, ALLOW_ATT_CALLS_FROM, -1);
+                    final int messagesFrom = safeInt(parser, ALLOW_ATT_MESSAGES_FROM, -1);
+                    if (isValidSource(callsFrom) && isValidSource(messagesFrom)) {
+                        rt.allowCallsFrom = callsFrom;
+                        rt.allowMessagesFrom = messagesFrom;
+                    } else if (isValidSource(from)) {
+                        Slog.i(TAG, "Migrating existing shared 'from': " + sourceToString(from));
+                        rt.allowCallsFrom = from;
+                        rt.allowMessagesFrom = from;
+                    } else {
+                        rt.allowCallsFrom = DEFAULT_SOURCE;
+                        rt.allowMessagesFrom = DEFAULT_SOURCE;
                     }
                 } else if (MANUAL_TAG.equals(tag)) {
                     rt.manualRule = readRuleXml(parser, false /*conditionRequired*/);
@@ -342,7 +362,8 @@
         out.attribute(null, ALLOW_ATT_MESSAGES, Boolean.toString(allowMessages));
         out.attribute(null, ALLOW_ATT_REMINDERS, Boolean.toString(allowReminders));
         out.attribute(null, ALLOW_ATT_EVENTS, Boolean.toString(allowEvents));
-        out.attribute(null, ALLOW_ATT_FROM, Integer.toString(allowFrom));
+        out.attribute(null, ALLOW_ATT_CALLS_FROM, Integer.toString(allowCallsFrom));
+        out.attribute(null, ALLOW_ATT_MESSAGES_FROM, Integer.toString(allowMessagesFrom));
         out.endTag(null, ALLOW_TAG);
 
         if (manualRule != null) {
@@ -432,6 +453,10 @@
         return val >= 0 && val < 60;
     }
 
+    private static boolean isValidSource(int source) {
+        return source >= SOURCE_ANYONE && source <= MAX_SOURCE;
+    }
+
     private static boolean safeBoolean(XmlPullParser parser, String att, boolean defValue) {
         final String val = parser.getAttributeValue(null, att);
         if (TextUtils.isEmpty(val)) return defValue;
@@ -494,7 +519,8 @@
 
     public Policy toNotificationPolicy() {
         int priorityCategories = 0;
-        int prioritySenders = Policy.PRIORITY_SENDERS_ANY;
+        int priorityCallSenders = Policy.PRIORITY_SENDERS_CONTACTS;
+        int priorityMessageSenders = Policy.PRIORITY_SENDERS_CONTACTS;
         if (allowCalls) {
             priorityCategories |= Policy.PRIORITY_CATEGORY_CALLS;
         }
@@ -510,18 +536,27 @@
         if (allowRepeatCallers) {
             priorityCategories |= Policy.PRIORITY_CATEGORY_REPEAT_CALLERS;
         }
-        switch (allowFrom) {
-            case SOURCE_ANYONE:
-                prioritySenders = Policy.PRIORITY_SENDERS_ANY;
-                break;
-            case SOURCE_CONTACT:
-                prioritySenders = Policy.PRIORITY_SENDERS_CONTACTS;
-                break;
-            case SOURCE_STAR:
-                prioritySenders = Policy.PRIORITY_SENDERS_STARRED;
-                break;
+        priorityCallSenders = sourceToPrioritySenders(allowCallsFrom, priorityCallSenders);
+        priorityMessageSenders = sourceToPrioritySenders(allowMessagesFrom, priorityMessageSenders);
+        return new Policy(priorityCategories, priorityCallSenders, priorityMessageSenders);
+    }
+
+    private static int sourceToPrioritySenders(int source, int def) {
+        switch (source) {
+            case SOURCE_ANYONE: return Policy.PRIORITY_SENDERS_ANY;
+            case SOURCE_CONTACT: return Policy.PRIORITY_SENDERS_CONTACTS;
+            case SOURCE_STAR: return Policy.PRIORITY_SENDERS_STARRED;
+            default: return def;
         }
-        return new Policy(priorityCategories, prioritySenders);
+    }
+
+    private static int prioritySendersToSource(int prioritySenders, int def) {
+        switch (prioritySenders) {
+            case Policy.PRIORITY_SENDERS_CONTACTS: return SOURCE_CONTACT;
+            case Policy.PRIORITY_SENDERS_STARRED: return SOURCE_STAR;
+            case Policy.PRIORITY_SENDERS_ANY: return SOURCE_ANYONE;
+            default: return def;
+        }
     }
 
     public void applyNotificationPolicy(Policy policy) {
@@ -532,17 +567,9 @@
         allowReminders = (policy.priorityCategories & Policy.PRIORITY_CATEGORY_REMINDERS) != 0;
         allowRepeatCallers = (policy.priorityCategories & Policy.PRIORITY_CATEGORY_REPEAT_CALLERS)
                 != 0;
-        switch (policy.prioritySenders) {
-            case Policy.PRIORITY_SENDERS_CONTACTS:
-                allowFrom = SOURCE_CONTACT;
-                break;
-            case Policy.PRIORITY_SENDERS_STARRED:
-                allowFrom = SOURCE_STAR;
-                break;
-            default:
-                allowFrom = SOURCE_ANYONE;
-                break;
-        }
+        allowCallsFrom = prioritySendersToSource(policy.priorityCallSenders, allowCallsFrom);
+        allowMessagesFrom = prioritySendersToSource(policy.priorityMessageSenders,
+                allowMessagesFrom);
     }
 
     public static Condition toTimeCondition(Context context, int minutesFromNow, int userHandle) {
@@ -692,7 +719,6 @@
                 .authority(SYSTEM_AUTHORITY)
                 .appendPath(EVENT_PATH)
                 .appendQueryParameter("calendar", Long.toString(event.calendar))
-                .appendQueryParameter("attendance", Integer.toString(event.attendance))
                 .appendQueryParameter("reply", Integer.toString(event.reply))
                 .build();
     }
@@ -709,23 +735,20 @@
                 && conditionId.getPathSegments().get(0).equals(EVENT_PATH);
         if (!isEvent) return null;
         final EventInfo rt = new EventInfo();
-        rt.calendar = tryParseLong(conditionId.getQueryParameter("calendar"), 0L);
-        rt.attendance = tryParseInt(conditionId.getQueryParameter("attendance"), 0);
+        rt.calendar = tryParseLong(conditionId.getQueryParameter("calendar"),
+                EventInfo.ANY_CALENDAR);
         rt.reply = tryParseInt(conditionId.getQueryParameter("reply"), 0);
         return rt;
     }
 
     public static class EventInfo {
-        public static final int ATTENDANCE_REQUIRED_OR_OPTIONAL = 0;
-        public static final int ATTENDANCE_REQUIRED = 1;
-        public static final int ATTENDANCE_OPTIONAL = 2;
+        public static final long ANY_CALENDAR = 0;
 
-        public static final int REPLY_ANY = 0;
-        public static final int REPLY_ANY_EXCEPT_NO = 1;
+        public static final int REPLY_ANY_EXCEPT_NO = 0;
+        public static final int REPLY_YES_OR_MAYBE = 1;
         public static final int REPLY_YES = 2;
 
-        public long calendar;  // CalendarContract.Calendars._ID, or 0 for any
-        public int attendance;
+        public long calendar = ANY_CALENDAR;  // CalendarContract.Calendars._ID, or ANY_CALENDAR
         public int reply;
 
         @Override
@@ -738,14 +761,12 @@
             if (!(o instanceof EventInfo)) return false;
             final EventInfo other = (EventInfo) o;
             return calendar == other.calendar
-                    && attendance == other.attendance
                     && reply == other.reply;
         }
 
         public EventInfo copy() {
             final EventInfo rt = new EventInfo();
             rt.calendar = calendar;
-            rt.attendance = attendance;
             rt.reply = reply;
             return rt;
         }
diff --git a/core/java/android/service/voice/IVoiceInteractionService.aidl b/core/java/android/service/voice/IVoiceInteractionService.aidl
index e8265a2..e3d68a6 100644
--- a/core/java/android/service/voice/IVoiceInteractionService.aidl
+++ b/core/java/android/service/voice/IVoiceInteractionService.aidl
@@ -23,4 +23,5 @@
     void ready();
     void soundModelsChanged();
     void shutdown();
+    void launchVoiceAssistFromKeyguard();
 }
diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java
index fee0c75..8c89ddb 100644
--- a/core/java/android/service/voice/VoiceInteractionService.java
+++ b/core/java/android/service/voice/VoiceInteractionService.java
@@ -98,6 +98,10 @@
         @Override public void soundModelsChanged() {
             mHandler.sendEmptyMessage(MSG_SOUND_MODELS_CHANGED);
         }
+        @Override
+        public void launchVoiceAssistFromKeyguard() throws RemoteException {
+            mHandler.sendEmptyMessage(MSG_LAUNCH_VOICE_ASSIST_FROM_KEYGUARD);
+        }
     };
 
     MyHandler mHandler;
@@ -113,6 +117,7 @@
     static final int MSG_READY = 1;
     static final int MSG_SHUTDOWN = 2;
     static final int MSG_SOUND_MODELS_CHANGED = 3;
+    static final int MSG_LAUNCH_VOICE_ASSIST_FROM_KEYGUARD = 4;
 
     class MyHandler extends Handler {
         @Override
@@ -127,6 +132,9 @@
                 case MSG_SOUND_MODELS_CHANGED:
                     onSoundModelsChangedInternal();
                     break;
+                case MSG_LAUNCH_VOICE_ASSIST_FROM_KEYGUARD:
+                    onLaunchVoiceAssistFromKeyguard();
+                    break;
                 default:
                     super.handleMessage(msg);
             }
@@ -134,6 +142,19 @@
     }
 
     /**
+     * Called when a user has activated an affordance to launch voice assist from the Keyguard.
+     *
+     * <p>This method will only be called if the VoiceInteractionService has set
+     * {@link android.R.attr#supportsLaunchVoiceAssistFromKeyguard} and the Keyguard is showing.</p>
+     *
+     * <p>A valid implementation must start a new activity that should use {@link
+     * android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED} to display
+     * on top of the lock screen.</p>
+     */
+    public void onLaunchVoiceAssistFromKeyguard() {
+    }
+
+    /**
      * Check whether the given service component is the currently active
      * VoiceInteractionService.
      */
diff --git a/core/java/android/service/voice/VoiceInteractionServiceInfo.java b/core/java/android/service/voice/VoiceInteractionServiceInfo.java
index 4bc97c9..463eb5b 100644
--- a/core/java/android/service/voice/VoiceInteractionServiceInfo.java
+++ b/core/java/android/service/voice/VoiceInteractionServiceInfo.java
@@ -43,7 +43,8 @@
     private String mSessionService;
     private String mRecognitionService;
     private String mSettingsActivity;
-    private boolean mSupportsAssistGesture;
+    private boolean mSupportsAssist;
+    private boolean mSupportsLaunchFromKeyguard;
 
     public VoiceInteractionServiceInfo(PackageManager pm, ComponentName comp)
             throws PackageManager.NameNotFoundException {
@@ -95,8 +96,11 @@
                     com.android.internal.R.styleable.VoiceInteractionService_recognitionService);
             mSettingsActivity = array.getString(
                     com.android.internal.R.styleable.VoiceInteractionService_settingsActivity);
-            mSupportsAssistGesture = array.getBoolean(
-                    com.android.internal.R.styleable.VoiceInteractionService_supportsAssistGesture,
+            mSupportsAssist = array.getBoolean(
+                    com.android.internal.R.styleable.VoiceInteractionService_supportsAssist,
+                    false);
+            mSupportsLaunchFromKeyguard = array.getBoolean(com.android.internal.
+                    R.styleable.VoiceInteractionService_supportsLaunchVoiceAssistFromKeyguard,
                     false);
             array.recycle();
             if (mSessionService == null) {
@@ -145,7 +149,11 @@
         return mSettingsActivity;
     }
 
-    public boolean getSupportsAssistGesture() {
-        return mSupportsAssistGesture;
+    public boolean getSupportsAssist() {
+        return mSupportsAssist;
+    }
+
+    public boolean getSupportsLaunchFromKeyguard() {
+        return mSupportsLaunchFromKeyguard;
     }
 }
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index cf29310..3eeb04a 100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -1481,14 +1481,8 @@
                 // interface).
 
                 // Sanitize locale using isLanguageAvailable.
-                int result = service.isLanguageAvailable( language, country, variant);
-                if (result >= LANG_AVAILABLE){
-                    if (result < LANG_COUNTRY_VAR_AVAILABLE) {
-                        variant = "";
-                        if (result < LANG_COUNTRY_AVAILABLE) {
-                            country = "";
-                        }
-                    }
+                int result = service.isLanguageAvailable(language, country, variant);
+                if (result >= LANG_AVAILABLE) {
                     // Get the default voice for the locale.
                     String voiceName = service.getDefaultVoiceNameFor(language, country, variant);
                     if (TextUtils.isEmpty(voiceName)) {
@@ -1502,10 +1496,28 @@
                         return LANG_NOT_SUPPORTED;
                     }
 
+                    // Set the language/country/variant of the voice, so #getLanguage will return
+                    // the currently set voice locale when called.
+                    Voice voice = getVoice(service, voiceName);
+                    String voiceLanguage = "";
+                    try {
+                        voiceLanguage = voice.getLocale().getISO3Language();
+                    } catch (MissingResourceException e) {
+                        Log.w(TAG, "Couldn't retrieve ISO 639-2/T language code for locale: " +
+                                voice.getLocale(), e);
+                    }
+
+                    String voiceCountry = "";
+                    try {
+                        voiceCountry = voice.getLocale().getISO3Country();
+                    } catch (MissingResourceException e) {
+                        Log.w(TAG, "Couldn't retrieve ISO 3166 country code for locale: " +
+                                voice.getLocale(), e);
+                    }
                     mParams.putString(Engine.KEY_PARAM_VOICE_NAME, voiceName);
-                    mParams.putString(Engine.KEY_PARAM_LANGUAGE, language);
-                    mParams.putString(Engine.KEY_PARAM_COUNTRY, country);
-                    mParams.putString(Engine.KEY_PARAM_VARIANT, variant);
+                    mParams.putString(Engine.KEY_PARAM_LANGUAGE, voiceLanguage);
+                    mParams.putString(Engine.KEY_PARAM_COUNTRY, voiceCountry);
+                    mParams.putString(Engine.KEY_PARAM_VARIANT, voice.getLocale().getVariant());
                 }
                 return result;
             }
@@ -1654,20 +1666,32 @@
                 if (TextUtils.isEmpty(voiceName)) {
                     return null;
                 }
-                List<Voice> voices = service.getVoices();
-                if (voices == null) {
-                    return null;
-                }
-                for (Voice voice : voices) {
-                    if (voice.getName().equals(voiceName)) {
-                        return voice;
-                    }
-                }
-                return null;
+                return getVoice(service, voiceName);
             }
         }, null, "getVoice");
     }
 
+
+    /**
+     * Returns a Voice instance of the voice with the given voice name.
+     *
+     * @return Voice instance with the given voice name, or {@code null} if not set or on error.
+     *
+     * @see Voice
+     */
+    private Voice getVoice(ITextToSpeechService service, String voiceName) throws RemoteException {
+        List<Voice> voices = service.getVoices();
+        if (voices == null) {
+            return null;
+        }
+        for (Voice voice : voices) {
+            if (voice.getName().equals(voiceName)) {
+                return voice;
+            }
+        }
+        return null;
+    }
+
     /**
      * Returns a Voice instance that's the default voice for the default Text-to-speech language.
      * @return The default voice instance for the default language, or {@code null} if not set or
@@ -1690,14 +1714,7 @@
 
                 // Sanitize the locale using isLanguageAvailable.
                 int result = service.isLanguageAvailable(language, country, variant);
-                if (result >= LANG_AVAILABLE){
-                    if (result < LANG_COUNTRY_VAR_AVAILABLE) {
-                        variant = "";
-                        if (result < LANG_COUNTRY_AVAILABLE) {
-                            country = "";
-                        }
-                    }
-                } else {
+                if (result < LANG_AVAILABLE) {
                     // The default language is not supported.
                     return null;
                 }
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index 239b386..fc65f63 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -283,15 +283,14 @@
 
         if (reflowed == null) {
             reflowed = new StaticLayout(null);
-            b = StaticLayout.Builder.obtain(text, where, where + after, getWidth());
+            b = StaticLayout.Builder.obtain(text, where, where + after, getPaint(), getWidth());
         }
 
         b.setText(text, where, where + after)
                 .setPaint(getPaint())
                 .setWidth(getWidth())
                 .setTextDir(getTextDirectionHeuristic())
-                .setSpacingMult(getSpacingMultiplier())
-                .setSpacingAdd(getSpacingAdd())
+                .setLineSpacing(getSpacingAdd(), getSpacingMultiplier())
                 .setEllipsizedWidth(mEllipsizedWidth)
                 .setEllipsize(mEllipsizeAt)
                 .setBreakStrategy(mBreakStrategy);
diff --git a/core/java/android/text/Html.java b/core/java/android/text/Html.java
index 7bebbfb..a55a08c 100644
--- a/core/java/android/text/Html.java
+++ b/core/java/android/text/Html.java
@@ -278,7 +278,7 @@
                 if (style[j] instanceof TypefaceSpan) {
                     String s = ((TypefaceSpan) style[j]).getFamily();
 
-                    if (s.equals("monospace")) {
+                    if ("monospace".equals(s)) {
                         out.append("<tt>");
                     }
                 }
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 67794b1..59c7c6d 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -16,6 +16,7 @@
 
 package android.text;
 
+import android.annotation.Nullable;
 import android.graphics.Paint;
 import android.text.style.LeadingMarginSpan;
 import android.text.style.LeadingMarginSpan.LeadingMarginSpan2;
@@ -46,18 +47,31 @@
     static final String TAG = "StaticLayout";
 
     /**
-     * Builder for static layouts. It would be better if this were a public
-     * API (as it would offer much greater flexibility for adding new options)
-     * but for the time being it's just internal.
-     *
-     * @hide
+     * Builder for static layouts. The builder is a newer pattern for constructing
+     * StaticLayout objects and should be preferred over the constructors,
+     * particularly to access newer features. To build a static layout, first
+     * call {@link #obtain} with the required arguments (text, paint, and width),
+     * then call setters for optional parameters, and finally {@link #build}
+     * to build the StaticLayout object. Parameters not explicitly set will get
+     * default values.
      */
     public final static class Builder {
         private Builder() {
             mNativePtr = nNewBuilder();
         }
 
-        public static Builder obtain(CharSequence source, int start, int end, int width) {
+        /**
+         * Obtain a builder for constructing StaticLayout objects
+         *
+         * @param source The text to be laid out, optionally with spans
+         * @param start The index of the start of the text
+         * @param end The index + 1 of the end of the text
+         * @param paint The base paint used for layout
+         * @param width The width in pixels
+         * @return a builder object used for constructing the StaticLayout
+         */
+        public static Builder obtain(CharSequence source, int start, int end, TextPaint paint,
+                int width) {
             Builder b = sPool.acquire();
             if (b == null) {
                 b = new Builder();
@@ -67,6 +81,7 @@
             b.mText = source;
             b.mStart = start;
             b.mEnd = end;
+            b.mPaint = paint;
             b.mWidth = width;
             b.mAlignment = Alignment.ALIGN_NORMAL;
             b.mTextDir = TextDirectionHeuristics.FIRSTSTRONG_LTR;
@@ -76,6 +91,7 @@
             b.mEllipsizedWidth = width;
             b.mEllipsize = null;
             b.mMaxLines = Integer.MAX_VALUE;
+            b.mBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
 
             b.mMeasuredText = MeasuredText.obtain();
             return b;
@@ -85,6 +101,8 @@
             b.mPaint = null;
             b.mText = null;
             MeasuredText.recycle(b.mMeasuredText);
+            b.mMeasuredText = null;
+            nFinishBuilder(b.mNativePtr);
             sPool.release(b);
         }
 
@@ -98,6 +116,18 @@
             return setText(source, 0, source.length());
         }
 
+        /**
+         * Set the text. Only useful when re-using the builder, which is done for
+         * the internal implementation of {@link DynamicLayout} but not as part
+         * of normal {@link StaticLayout} usage.
+         *
+         * @param source The text to be laid out, optionally with spans
+         * @param start The index of the start of the text
+         * @param end The index + 1 of the end of the text
+         * @return this builder, useful for chaining
+         *
+         * @hide
+         */
         public Builder setText(CharSequence source, int start, int end) {
             mText = source;
             mStart = start;
@@ -105,11 +135,27 @@
             return this;
         }
 
+        /**
+         * Set the paint. Internal for reuse cases only.
+         *
+         * @param paint The base paint used for layout
+         * @return this builder, useful for chaining
+         *
+         * @hide
+         */
         public Builder setPaint(TextPaint paint) {
             mPaint = paint;
             return this;
         }
 
+        /**
+         * Set the width. Internal for reuse cases only.
+         *
+         * @param width The width in pixels
+         * @return this builder, useful for chaining
+         *
+         * @hide
+         */
         public Builder setWidth(int width) {
             mWidth = width;
             if (mEllipsize == null) {
@@ -118,53 +164,126 @@
             return this;
         }
 
+        /**
+         * Set the alignment. The default is {@link Layout.Alignment#ALIGN_NORMAL}.
+         *
+         * @param alignment Alignment for the resulting {@link StaticLayout}
+         * @return this builder, useful for chaining
+         */
         public Builder setAlignment(Alignment alignment) {
             mAlignment = alignment;
             return this;
         }
 
+        /**
+         * Set the text direction heuristic. The text direction heuristic is used to
+         * resolve text direction based per-paragraph based on the input text. The default is
+         * {@link TextDirectionHeuristics#FIRSTSTRONG_LTR}.
+         *
+         * @param textDir text direction heuristic for resolving BiDi behavior.
+         * @return this builder, useful for chaining
+         */
         public Builder setTextDir(TextDirectionHeuristic textDir) {
             mTextDir = textDir;
             return this;
         }
 
-        // TODO: combine the following, as they're almost always set together?
-        public Builder setSpacingMult(float spacingMult) {
+        /**
+         * Set line spacing parameters. The default is 0.0 for {@code spacingAdd}
+         * and 1.0 for {@code spacingMult}.
+         *
+         * @param spacingAdd line spacing add
+         * @param spacingMult line spacing multiplier
+         * @return this builder, useful for chaining
+         * @see android.widget.TextView#setLineSpacing
+         */
+        public Builder setLineSpacing(float spacingAdd, float spacingMult) {
+            mSpacingAdd = spacingAdd;
             mSpacingMult = spacingMult;
             return this;
         }
 
-        public Builder setSpacingAdd(float spacingAdd) {
-            mSpacingAdd = spacingAdd;
-            return this;
-        }
-
+        /**
+         * Set whether to include extra space beyond font ascent and descent (which is
+         * needed to avoid clipping in some languages, such as Arabic and Kannada). The
+         * default is {@code true}.
+         *
+         * @param includePad whether to include padding
+         * @return this builder, useful for chaining
+         * @see android.widget.TextView#setIncludeFontPadding
+         */
         public Builder setIncludePad(boolean includePad) {
             mIncludePad = includePad;
             return this;
         }
 
-        // TODO: combine the following?
+        /**
+         * Set the width as used for ellipsizing purposes, if it differs from the
+         * normal layout width. The default is the {@code width}
+         * passed to {@link #obtain}.
+         *
+         * @param ellipsizedWidth width used for ellipsizing, in pixels
+         * @return this builder, useful for chaining
+         * @see android.widget.TextView#setEllipsize
+         */
         public Builder setEllipsizedWidth(int ellipsizedWidth) {
             mEllipsizedWidth = ellipsizedWidth;
             return this;
         }
 
-        public Builder setEllipsize(TextUtils.TruncateAt ellipsize) {
+        /**
+         * Set ellipsizing on the layout. Causes words that are longer than the view
+         * is wide, or exceeding the number of lines (see #setMaxLines) in the case
+         * of {@link android.text.TextUtils.TruncateAt#END} or
+         * {@link android.text.TextUtils.TruncateAt#MARQUEE}, to be ellipsized instead
+         * of broken. The default is
+         * {@code null}, indicating no ellipsis is to be applied.
+         *
+         * @param ellipsize type of ellipsis behavior
+         * @return this builder, useful for chaining
+         * @see android.widget.TextView#setEllipsize
+         */
+        public Builder setEllipsize(@Nullable TextUtils.TruncateAt ellipsize) {
             mEllipsize = ellipsize;
             return this;
         }
 
+        /**
+         * Set maximum number of lines. This is particularly useful in the case of
+         * ellipsizing, where it changes the layout of the last line. The default is
+         * unlimited.
+         *
+         * @param maxLines maximum number of lines in the layout
+         * @return this builder, useful for chaining
+         * @see android.widget.TextView#setMaxLines
+         */
         public Builder setMaxLines(int maxLines) {
             mMaxLines = maxLines;
             return this;
         }
 
+        /**
+         * Set break strategy, useful for selecting high quality or balanced paragraph
+         * layout options. The default is {@link Layout#BREAK_STRATEGY_SIMPLE}.
+         *
+         * @param breakStrategy break strategy for paragraph layout
+         * @return this builder, useful for chaining
+         * @see android.widget.TextView#setBreakStrategy
+         */
         public Builder setBreakStrategy(@BreakStrategy int breakStrategy) {
             mBreakStrategy = breakStrategy;
             return this;
         }
 
+        /**
+         * Set indents. Arguments are arrays holding an indent amount, one per line, measured in
+         * pixels. For lines past the last element in the array, the last element repeats.
+         *
+         * @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) {
             int leftLen = leftIndents == null ? 0 : leftIndents.length;
             int rightLen = rightIndents == null ? 0 : rightIndents.length;
@@ -218,6 +337,15 @@
             nAddReplacementRun(mNativePtr, start, end, width);
         }
 
+        /**
+         * Build the {@link StaticLayout} after options have been set.
+         *
+         * <p>Note: the builder object must not be reused in any way after calling this
+         * method. Setting parameters after calling this method, or calling it a second
+         * time on the same builder object, will likely lead to unexpected results.
+         *
+         * @return the newly constructed {@link StaticLayout} object
+         */
         public StaticLayout build() {
             StaticLayout result = new StaticLayout(this);
             Builder.recycle(this);
@@ -327,12 +455,10 @@
                     : new Ellipsizer(source),
               paint, outerwidth, align, textDir, spacingmult, spacingadd);
 
-        Builder b = Builder.obtain(source, bufstart, bufend, outerwidth)
-            .setPaint(paint)
+        Builder b = Builder.obtain(source, bufstart, bufend, paint, outerwidth)
             .setAlignment(align)
             .setTextDir(textDir)
-            .setSpacingMult(spacingmult)
-            .setSpacingAdd(spacingadd)
+            .setLineSpacing(spacingadd, spacingmult)
             .setIncludePad(includepad)
             .setEllipsizedWidth(ellipsizedWidth)
             .setEllipsize(ellipsize)
diff --git a/core/java/android/text/method/WordIterator.java b/core/java/android/text/method/WordIterator.java
index 11226a9..c4dc5ed 100644
--- a/core/java/android/text/method/WordIterator.java
+++ b/core/java/android/text/method/WordIterator.java
@@ -95,6 +95,45 @@
         } while (true);
     }
 
+    /** {@inheritDoc} */
+    public boolean isBoundary(int offset) {
+        int shiftedOffset = offset - mOffsetShift;
+        checkOffsetIsValid(shiftedOffset);
+        return mIterator.isBoundary(shiftedOffset);
+    }
+
+    /**
+     * Returns the position of next boundary after the given offset. Returns
+     * {@code DONE} if there is no boundary after the given offset.
+     *
+     * @param offset the given start position to search from.
+     * @return the position of the last boundary preceding the given offset.
+     */
+    public int nextBoundary(int offset) {
+        int shiftedOffset = offset - mOffsetShift;
+        shiftedOffset = mIterator.following(shiftedOffset);
+        if (shiftedOffset == BreakIterator.DONE) {
+            return BreakIterator.DONE;
+        }
+        return shiftedOffset + mOffsetShift;
+    }
+
+    /**
+     * Returns the position of boundary preceding the given offset or
+     * {@code DONE} if the given offset specifies the starting position.
+     *
+     * @param offset the given start position to search from.
+     * @return the position of the last boundary preceding the given offset.
+     */
+    public int prevBoundary(int offset) {
+        int shiftedOffset = offset - mOffsetShift;
+        shiftedOffset = mIterator.preceding(shiftedOffset);
+        if (shiftedOffset == BreakIterator.DONE) {
+            return BreakIterator.DONE;
+        }
+        return shiftedOffset + mOffsetShift;
+    }
+
     /** If <code>offset</code> is within a word, returns the index of the first character of that
      * word, otherwise returns BreakIterator.DONE.
      *
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java
index c942042..1b25505 100644
--- a/core/java/android/transition/Transition.java
+++ b/core/java/android/transition/Transition.java
@@ -792,6 +792,9 @@
      * views are ignored and only the ids are used).
      */
     boolean isValidTarget(View target) {
+        if (target == null) {
+            return false;
+        }
         int targetId = target.getId();
         if (mTargetIdExcludes != null && mTargetIdExcludes.contains(targetId)) {
             return false;
@@ -1636,6 +1639,7 @@
         for (int i = 0; i < count; i++) {
             TransitionValues values = lookIn.get(i);
             if (values == null) {
+                // Null values are always added to the end of the list, so we know to stop now.
                 return null;
             }
             if (values.view == view) {
@@ -1739,6 +1743,9 @@
                     View oldView = oldInfo.view;
                     TransitionValues startValues = getTransitionValues(oldView, true);
                     TransitionValues endValues = getMatchedTransitionValues(oldView, true);
+                    if (startValues == null && endValues == null) {
+                        endValues = mEndValues.viewValues.get(oldView);
+                    }
                     boolean cancel = (startValues != null || endValues != null) &&
                             oldInfo.transition.areValuesChanged(oldValues, endValues);
                     if (cancel) {
diff --git a/core/java/android/transition/TransitionInflater.java b/core/java/android/transition/TransitionInflater.java
index ca37d49..cbf76bc 100644
--- a/core/java/android/transition/TransitionInflater.java
+++ b/core/java/android/transition/TransitionInflater.java
@@ -211,10 +211,10 @@
                             .asSubclass(expectedType);
                     if (c != null) {
                         constructor = c.getConstructor(sConstructorSignature);
+                        constructor.setAccessible(true);
                         sConstructors.put(className, constructor);
                     }
                 }
-                constructor.setAccessible(true);
                 return constructor.newInstance(mContext, attrs);
             }
         } catch (InstantiationException e) {
diff --git a/core/java/android/transition/Visibility.java b/core/java/android/transition/Visibility.java
index cd68fd1..ed7fd86 100644
--- a/core/java/android/transition/Visibility.java
+++ b/core/java/android/transition/Visibility.java
@@ -19,12 +19,17 @@
 import com.android.internal.R;
 
 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
  * start and end scenes. Visibility is determined not just by the
@@ -286,6 +291,12 @@
                 return null;
             }
         }
+        final boolean isForcedVisibility = mForcedStartVisibility != -1 ||
+                mForcedEndVisibility != -1;
+        if (isForcedVisibility) {
+            // Make sure that we reverse the effect of onDisappear's setTransitionAlpha(0)
+            endValues.view.setTransitionAlpha(1);
+        }
         return onAppear(sceneRoot, endValues.view, startValues, endValues);
     }
 
@@ -418,9 +429,9 @@
                 sceneRoot.getOverlay().remove(overlayView);
             } else {
                 final View finalOverlayView = overlayView;
-                animator.addListener(new AnimatorListenerAdapter() {
+                addListener(new TransitionListenerAdapter() {
                     @Override
-                    public void onAnimationEnd(Animator animation) {
+                    public void onTransitionEnd(Transition transition) {
                         finalSceneRoot.getOverlay().remove(finalOverlayView);
                     }
                 });
@@ -438,40 +449,10 @@
             }
             Animator animator = onDisappear(sceneRoot, viewToKeep, startValues, endValues);
             if (animator != null) {
-                final View finalViewToKeep = viewToKeep;
-                animator.addListener(new AnimatorListenerAdapter() {
-                    boolean mCanceled = false;
-
-                    @Override
-                    public void onAnimationPause(Animator animation) {
-                        if (!mCanceled && !isForcedVisibility) {
-                            finalViewToKeep.setVisibility(finalVisibility);
-                        }
-                    }
-
-                    @Override
-                    public void onAnimationResume(Animator animation) {
-                        if (!mCanceled && !isForcedVisibility) {
-                            finalViewToKeep.setVisibility(View.VISIBLE);
-                        }
-                    }
-
-                    @Override
-                    public void onAnimationCancel(Animator animation) {
-                        mCanceled = true;
-                    }
-
-                    @Override
-                    public void onAnimationEnd(Animator animation) {
-                        if (!mCanceled) {
-                            if (isForcedVisibility) {
-                                finalViewToKeep.setTransitionAlpha(0);
-                            } else {
-                                finalViewToKeep.setVisibility(finalVisibility);
-                            }
-                        }
-                    }
-                });
+                DisappearListener disappearListener = new DisappearListener(viewToKeep,
+                        finalVisibility, isForcedVisibility);
+                animator.addListener(disappearListener);
+                addListener(disappearListener);
             } else if (!isForcedVisibility) {
                 viewToKeep.setVisibility(originalVisibility);
             }
@@ -517,4 +498,68 @@
             TransitionValues endValues) {
         return null;
     }
+
+    private static class DisappearListener
+            extends TransitionListenerAdapter implements AnimatorListener, AnimatorPauseListener {
+        private final boolean mIsForcedVisibility;
+        private final View mView;
+        private final int mFinalVisibility;
+
+        boolean mCanceled = false;
+
+        public DisappearListener(View view, int finalVisibility, boolean isForcedVisibility) {
+            this.mView = view;
+            this.mIsForcedVisibility = isForcedVisibility;
+            this.mFinalVisibility = finalVisibility;
+        }
+
+        @Override
+        public void onAnimationPause(Animator animation) {
+            if (!mCanceled && !mIsForcedVisibility) {
+                mView.setVisibility(mFinalVisibility);
+            }
+        }
+
+        @Override
+        public void onAnimationResume(Animator animation) {
+            if (!mCanceled && !mIsForcedVisibility) {
+                mView.setVisibility(View.VISIBLE);
+            }
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            mCanceled = true;
+        }
+
+        @Override
+        public void onAnimationRepeat(Animator animation) {
+
+        }
+
+        @Override
+        public void onAnimationStart(Animator animation) {
+
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            hideViewWhenNotCanceled();
+        }
+
+        @Override
+        public void onTransitionEnd(Transition transition) {
+            hideViewWhenNotCanceled();
+        }
+
+        private void hideViewWhenNotCanceled() {
+            if (!mCanceled) {
+                if (mIsForcedVisibility) {
+                    mView.setTransitionAlpha(0);
+                } else {
+                    mView.setVisibility(mFinalVisibility);
+                }
+            }
+        }
+    }
 }
diff --git a/core/java/android/util/FloatMath.java b/core/java/android/util/FloatMath.java
index 8f488af..bb7d15f 100644
--- a/core/java/android/util/FloatMath.java
+++ b/core/java/android/util/FloatMath.java
@@ -25,6 +25,8 @@
  * {@link java.lang.Math}. {@link java.lang.Math} should be used in
  * preference.
  *
+ * <p>All methods were removed from the public API in version 23.
+ *
  * @deprecated Use {@link java.lang.Math} instead.
  */
 @Deprecated
@@ -39,6 +41,7 @@
      *
      * @param value to be converted
      * @return the floor of value
+     * @removed
      */
     public static float floor(float value) {
         return (float) Math.floor(value);
@@ -50,6 +53,7 @@
      *
      * @param value to be converted
      * @return the ceiling of value
+     * @removed
      */
     public static float ceil(float value) {
         return (float) Math.ceil(value);
@@ -60,6 +64,7 @@
      *
      * @param angle to compute the cosine of, in radians
      * @return the sine of angle
+     * @removed
      */
     public static float sin(float angle) {
         return (float) Math.sin(angle);
@@ -70,6 +75,7 @@
      *
      * @param angle to compute the cosine of, in radians
      * @return the cosine of angle
+     * @removed
      */
     public static float cos(float angle) {
         return (float) Math.cos(angle);
@@ -81,6 +87,7 @@
      *
      * @param value to compute sqrt of
      * @return the square root of value
+     * @removed
      */
     public static float sqrt(float value) {
         return (float) Math.sqrt(value);
@@ -92,6 +99,7 @@
      *
      * @param value to compute the exponential of
      * @return the exponential of value
+     * @removed
      */
     public static float exp(float value) {
         return (float) Math.exp(value);
@@ -104,6 +112,7 @@
      * @param x the base of the operation.
      * @param y the exponent of the operation.
      * @return {@code x} to the power of {@code y}.
+     * @removed
      */
     public static float pow(float x, float y) {
         return (float) Math.pow(x, y);
@@ -116,6 +125,7 @@
      * @param x a float number
      * @param y a float number
      * @return the hypotenuse
+     * @removed
      */
     public static float hypot(float x, float y) {
         return (float) Math.hypot(x, y);
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 68ad782..3781d40 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -586,7 +586,7 @@
         }
     }
 
-    private void perfromAccessibilityActionUiThread(Message message) {
+    private void performAccessibilityActionUiThread(Message message) {
         final int flags = message.arg1;
         final int accessibilityViewId = message.arg2;
 
@@ -602,7 +602,8 @@
 
         boolean succeeded = false;
         try {
-            if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
+            if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null ||
+                    mViewRootImpl.mStopped || mViewRootImpl.mPausedForTransition) {
                 return;
             }
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
@@ -1146,7 +1147,7 @@
                     findAccessibilityNodeInfoByAccessibilityIdUiThread(message);
                 } break;
                 case MSG_PERFORM_ACCESSIBILITY_ACTION: {
-                    perfromAccessibilityActionUiThread(message);
+                    performAccessibilityActionUiThread(message);
                 } break;
                 case MSG_FIND_ACCESSIBILITY_NODE_INFOS_BY_VIEW_ID: {
                     findAccessibilityNodeInfosByViewIdUiThread(message);
diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java
index 9047b1d..ce50091 100644
--- a/core/java/android/view/ContextThemeWrapper.java
+++ b/core/java/android/view/ContextThemeWrapper.java
@@ -87,9 +87,12 @@
         }
     }
     
-    @Override public void setTheme(int resid) {
-        mThemeResource = resid;
-        initializeTheme();
+    @Override
+    public void setTheme(int resid) {
+        if (mThemeResource != resid) {
+            mThemeResource = resid;
+            initializeTheme();
+        }
     }
     
     /** @hide */
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java
index 46dd857..bb761f0 100644
--- a/core/java/android/view/DisplayListCanvas.java
+++ b/core/java/android/view/DisplayListCanvas.java
@@ -93,12 +93,6 @@
 
     private static native long nCreateDisplayListCanvas();
 
-    public static void setProperty(String name, String value) {
-        nSetProperty(name, value);
-    }
-
-    private static native void nSetProperty(String name, String value);
-
     ///////////////////////////////////////////////////////////////////////////
     // Canvas management
     ///////////////////////////////////////////////////////////////////////////
@@ -271,7 +265,7 @@
         Bitmap bitmap = patch.getBitmap();
         throwIfCannotDraw(bitmap);
         final long nativePaint = paint == null ? 0 : paint.getNativeInstance();
-        nDrawPatch(mNativeCanvasWrapper, bitmap.getSkBitmap(), patch.mNativeChunk,
+        nDrawPatch(mNativeCanvasWrapper, bitmap, patch.mNativeChunk,
                 dst.left, dst.top, dst.right, dst.bottom, nativePaint);
     }
 
@@ -281,11 +275,11 @@
         Bitmap bitmap = patch.getBitmap();
         throwIfCannotDraw(bitmap);
         final long nativePaint = paint == null ? 0 : paint.getNativeInstance();
-        nDrawPatch(mNativeCanvasWrapper, bitmap.getSkBitmap(), patch.mNativeChunk,
+        nDrawPatch(mNativeCanvasWrapper, bitmap, patch.mNativeChunk,
                 dst.left, dst.top, dst.right, dst.bottom, nativePaint);
     }
 
-    private static native void nDrawPatch(long renderer, long bitmap, long chunk,
+    private static native void nDrawPatch(long renderer, Bitmap bitmap, long chunk,
             float left, float top, float right, float bottom, long paint);
 
     public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy,
diff --git a/core/java/android/view/GhostView.java b/core/java/android/view/GhostView.java
index d58e7c0..41502b6 100644
--- a/core/java/android/view/GhostView.java
+++ b/core/java/android/view/GhostView.java
@@ -40,8 +40,7 @@
         mView.mGhostView = this;
         final ViewGroup parent = (ViewGroup) mView.getParent();
         setGhostedVisibility(View.INVISIBLE);
-        parent.mRecreateDisplayList = true;
-        parent.getDisplayList();
+        parent.invalidate();
     }
 
     @Override
@@ -49,7 +48,7 @@
         if (canvas instanceof DisplayListCanvas) {
             DisplayListCanvas dlCanvas = (DisplayListCanvas) canvas;
             mView.mRecreateDisplayList = true;
-            RenderNode renderNode = mView.getDisplayList();
+            RenderNode renderNode = mView.updateDisplayListIfDirty();
             if (renderNode.isValid()) {
                 dlCanvas.insertReorderBarrier(); // enable shadow for this rendernode
                 dlCanvas.drawRenderNode(renderNode);
@@ -83,8 +82,7 @@
             mView.mGhostView = null;
             final ViewGroup parent = (ViewGroup) mView.getParent();
             if (parent != null) {
-                parent.mRecreateDisplayList = true;
-                parent.getDisplayList();
+                parent.invalidate();
             }
         }
     }
diff --git a/core/java/android/view/HapticFeedbackConstants.java b/core/java/android/view/HapticFeedbackConstants.java
index cc090ad5..6651b83 100644
--- a/core/java/android/view/HapticFeedbackConstants.java
+++ b/core/java/android/view/HapticFeedbackConstants.java
@@ -52,6 +52,11 @@
     public static final int CALENDAR_DATE = 5;
 
     /**
+     * The user has touched the screen with a stylus and pressed the stylus button.
+     */
+    public static final int STYLUS_BUTTON_PRESS = 6;
+
+    /**
      * This is a private constant.  Feel free to renumber as desired.
      * @hide
      */
diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java
index 457d6ad..37312d0 100644
--- a/core/java/android/view/LayoutInflater.java
+++ b/core/java/android/view/LayoutInflater.java
@@ -590,6 +590,7 @@
                     }
                 }
                 constructor = clazz.getConstructor(mConstructorSignature);
+                constructor.setAccessible(true);
                 sConstructorMap.put(name, constructor);
             } else {
                 // If we have a filter, apply it to cached constructor
@@ -615,7 +616,6 @@
             Object[] args = mConstructorArgs;
             args[1] = attrs;
 
-            constructor.setAccessible(true);
             final View view = constructor.newInstance(args);
             if (view instanceof ViewStub) {
                 // Use the same context when inflating ViewStub later.
@@ -946,25 +946,21 @@
                                 attrs, R.styleable.Include);
                         final int id = a.getResourceId(R.styleable.Include_id, View.NO_ID);
                         final int visibility = a.getInt(R.styleable.Include_visibility, -1);
-                        final boolean hasWidth = a.hasValue(R.styleable.Include_layout_width);
-                        final boolean hasHeight = a.hasValue(R.styleable.Include_layout_height);
                         a.recycle();
 
-                        // We try to load the layout params set in the <include /> tag. If
-                        // they don't exist, we will rely on the layout params set in the
-                        // included XML file.
-                        // During a layoutparams generation, a runtime exception is thrown
-                        // if either layout_width or layout_height is missing. We catch
-                        // this exception and set localParams accordingly: true means we
-                        // successfully loaded layout params from the <include /> tag,
-                        // false means we need to rely on the included layout params.
+                        // We try to load the layout params set in the <include /> tag.
+                        // If the parent can't generate layout params (ex. missing width
+                        // or height for the framework ViewGroups, though this is not
+                        // necessarily true of all ViewGroups) then we expect it to throw
+                        // a runtime exception.
+                        // We catch this exception and set localParams accordingly: true
+                        // means we successfully loaded layout params from the <include>
+                        // tag, false means we need to rely on the included layout params.
                         ViewGroup.LayoutParams params = null;
-                        if (hasWidth && hasHeight) {
-                            try {
-                                params = group.generateLayoutParams(attrs);
-                            } catch (RuntimeException e) {
-                                // Ignore, just fail over to child attrs.
-                            }
+                        try {
+                            params = group.generateLayoutParams(attrs);
+                        } catch (RuntimeException e) {
+                            // Ignore, just fail over to child attrs.
                         }
                         if (params == null) {
                             params = group.generateLayoutParams(childAttrs);
diff --git a/core/java/android/view/MenuInflater.java b/core/java/android/view/MenuInflater.java
index b49a59e..dc8cadf 100644
--- a/core/java/android/view/MenuInflater.java
+++ b/core/java/android/view/MenuInflater.java
@@ -544,6 +544,7 @@
             try {
                 Class<?> clazz = mContext.getClassLoader().loadClass(className);
                 Constructor<?> constructor = clazz.getConstructor(constructorSignature);
+                constructor.setAccessible(true);
                 return (T) constructor.newInstance(arguments);
             } catch (Exception e) {
                 Log.w(LOG_TAG, "Cannot instantiate class: " + className, e);
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index 5e45c8f..5df596a 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -3180,6 +3180,18 @@
         return (getButtonState() & button) == button;
     }
 
+    /**
+     * Checks if a stylus is being used and if the first stylus button is
+     * pressed.
+     *
+     * @return True if the tool is a stylus and if the first stylus button is
+     *         pressed.
+     * @see #BUTTON_SECONDARY
+     */
+    public final boolean isStylusButtonPressed() {
+        return (isButtonPressed(BUTTON_SECONDARY) && getToolType(0) == TOOL_TYPE_STYLUS);
+    }
+
     public static final Parcelable.Creator<MotionEvent> CREATOR
             = new Parcelable.Creator<MotionEvent>() {
         public MotionEvent createFromParcel(Parcel in) {
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index 6db46e9..85b22fb 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -246,6 +246,9 @@
             mSurface = null;
             mLayer = null;
 
+            // Make sure if/when new layer gets re-created, transform matrix will
+            // be re-applied.
+            mMatrixChanged = true;
             mHadSurface = true;
         }
     }
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 87d5d9a..1fd7109 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -17,6 +17,7 @@
 package android.view;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -269,7 +270,7 @@
         view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED)
                 == View.PFLAG_INVALIDATED;
         view.mPrivateFlags &= ~View.PFLAG_INVALIDATED;
-        view.getDisplayList();
+        view.updateDisplayListIfDirty();
         view.mRecreateDisplayList = false;
     }
 
@@ -285,7 +286,7 @@
                 callbacks.onHardwarePreDraw(canvas);
 
                 canvas.insertReorderBarrier();
-                canvas.drawRenderNode(view.getDisplayList());
+                canvas.drawRenderNode(view.updateDisplayListIfDirty());
                 canvas.insertInorderBarrier();
 
                 callbacks.onHardwarePostDraw(canvas);
@@ -360,7 +361,7 @@
     @Override
     boolean copyLayerInto(final HardwareLayer layer, final Bitmap bitmap) {
         return nCopyLayerInto(mNativeProxy,
-                layer.getDeferredLayerUpdater(), bitmap.getSkBitmap());
+                layer.getDeferredLayerUpdater(), bitmap);
     }
 
     @Override
@@ -412,6 +413,13 @@
         nTrimMemory(level);
     }
 
+    public static void overrideProperty(@NonNull String name, @NonNull String value) {
+        if (name == null || value == null) {
+            throw new IllegalArgumentException("name and value must be non-null");
+        }
+        nOverrideProperty(name, value);
+    }
+
     public static void dumpProfileData(byte[] data, FileDescriptor fd) {
         nDumpProfileData(data, fd);
     }
@@ -460,8 +468,6 @@
                     if (buffer != null) {
                         long[] map = atlas.getMap();
                         if (map != null) {
-                            // TODO Remove after fixing b/15425820
-                            validateMap(context, map);
                             nSetAtlas(renderProxy, buffer, map);
                         }
                         // If IAssetAtlas is not the same class as the IBinder
@@ -476,32 +482,6 @@
                 Log.w(LOG_TAG, "Could not acquire atlas", e);
             }
         }
-
-        private static void validateMap(Context context, long[] map) {
-            Log.d("Atlas", "Validating map...");
-            HashSet<Long> preloadedPointers = new HashSet<Long>();
-
-            // We only care about drawables that hold bitmaps
-            final Resources resources = context.getResources();
-            final LongSparseArray<Drawable.ConstantState> drawables = resources.getPreloadedDrawables();
-
-            final int count = drawables.size();
-            ArrayList<Bitmap> tmpList = new ArrayList<Bitmap>();
-            for (int i = 0; i < count; i++) {
-                drawables.valueAt(i).addAtlasableBitmaps(tmpList);
-                for (int j = 0; j < tmpList.size(); j++) {
-                    preloadedPointers.add(tmpList.get(j).getSkBitmap());
-                }
-                tmpList.clear();
-            }
-
-            for (int i = 0; i < map.length; i += 4) {
-                if (!preloadedPointers.contains(map[i])) {
-                    Log.w("Atlas", String.format("Pointer 0x%X, not in getPreloadedDrawables?", map[i]));
-                    map[i] = 0;
-                }
-            }
-        }
     }
 
     static native void setupShadersDiskCache(String cacheFile);
@@ -531,13 +511,14 @@
 
     private static native long nCreateTextureLayer(long nativeProxy);
     private static native void nBuildLayer(long nativeProxy, long node);
-    private static native boolean nCopyLayerInto(long nativeProxy, long layer, long bitmap);
+    private static native boolean nCopyLayerInto(long nativeProxy, long layer, Bitmap bitmap);
     private static native void nPushLayerUpdate(long nativeProxy, long layer);
     private static native void nCancelLayerUpdate(long nativeProxy, long layer);
     private static native void nDetachSurfaceTexture(long nativeProxy, long layer);
 
     private static native void nDestroyHardwareResources(long nativeProxy);
     private static native void nTrimMemory(int level);
+    private static native void nOverrideProperty(String name, String value);
 
     private static native void nFence(long nativeProxy);
     private static native void nStopDrawing(long nativeProxy);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index b5b7f0f..e1f1816 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -28,6 +28,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.Size;
+import android.annotation.UiThread;
 import android.content.ClipData;
 import android.content.Context;
 import android.content.ContextWrapper;
@@ -632,7 +633,6 @@
  * </p>
  *
  * @attr ref android.R.styleable#View_alpha
- * @attr ref android.R.styleable#View_assistBlocked
  * @attr ref android.R.styleable#View_background
  * @attr ref android.R.styleable#View_clickable
  * @attr ref android.R.styleable#View_contentDescription
@@ -700,6 +700,7 @@
  *
  * @see android.view.ViewGroup
  */
+@UiThread
 public class View implements Drawable.Callback, KeyEvent.Callback,
         AccessibilityEventSource {
     private static final boolean DBG = false;
@@ -987,6 +988,17 @@
      */
     static final int DUPLICATE_PARENT_STATE = 0x00400000;
 
+    /**
+     * <p>
+     * Indicates this view can be stylus button pressed. When stylus button
+     * pressable, a View reacts to stylus button presses by notifiying
+     * the OnStylusButtonPressListener.
+     * </p>
+     * {@hide}
+     */
+    static final int STYLUS_BUTTON_PRESSABLE = 0x00800000;
+
+
     /** @hide */
     @IntDef({
         SCROLLBARS_INSIDE_OVERLAY,
@@ -2382,12 +2394,145 @@
      */
     static final int PFLAG3_NESTED_SCROLLING_ENABLED = 0x80;
 
+    /**
+     * Flag indicating that the bottom scroll indicator should be displayed
+     * when this view can scroll up.
+     */
+    static final int PFLAG3_SCROLL_INDICATOR_TOP = 0x0100;
+
+    /**
+     * Flag indicating that the bottom scroll indicator should be displayed
+     * when this view can scroll down.
+     */
+    static final int PFLAG3_SCROLL_INDICATOR_BOTTOM = 0x0200;
+
+    /**
+     * Flag indicating that the left scroll indicator should be displayed
+     * when this view can scroll left.
+     */
+    static final int PFLAG3_SCROLL_INDICATOR_LEFT = 0x0400;
+
+    /**
+     * Flag indicating that the right scroll indicator should be displayed
+     * when this view can scroll right.
+     */
+    static final int PFLAG3_SCROLL_INDICATOR_RIGHT = 0x0800;
+
+    /**
+     * Flag indicating that the start scroll indicator should be displayed
+     * when this view can scroll in the start direction.
+     */
+    static final int PFLAG3_SCROLL_INDICATOR_START = 0x1000;
+
+    /**
+     * Flag indicating that the end scroll indicator should be displayed
+     * when this view can scroll in the end direction.
+     */
+    static final int PFLAG3_SCROLL_INDICATOR_END = 0x2000;
+
     /* End of masks for mPrivateFlags3 */
 
     static final int DRAG_MASK = PFLAG2_DRAG_CAN_ACCEPT | PFLAG2_DRAG_HOVERED;
 
+    static final int SCROLL_INDICATORS_NONE = 0x0000;
+
     /**
-     * <p>Indicates that we are allowing {@link android.view.ViewAssistStructure} to traverse
+     * Mask for use with setFlags indicating bits used for indicating which
+     * scroll indicators are enabled.
+     */
+    static final int SCROLL_INDICATORS_PFLAG3_MASK = PFLAG3_SCROLL_INDICATOR_TOP
+            | PFLAG3_SCROLL_INDICATOR_BOTTOM | PFLAG3_SCROLL_INDICATOR_LEFT
+            | PFLAG3_SCROLL_INDICATOR_RIGHT | PFLAG3_SCROLL_INDICATOR_START
+            | PFLAG3_SCROLL_INDICATOR_END;
+
+    /**
+     * Left-shift required to translate between public scroll indicator flags
+     * and internal PFLAGS3 flags. When used as a right-shift, translates
+     * PFLAGS3 flags to public flags.
+     */
+    static final int SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT = 8;
+
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(flag = true,
+            value = {
+                    SCROLL_INDICATOR_TOP,
+                    SCROLL_INDICATOR_BOTTOM,
+                    SCROLL_INDICATOR_LEFT,
+                    SCROLL_INDICATOR_RIGHT,
+                    SCROLL_INDICATOR_START,
+                    SCROLL_INDICATOR_END,
+            })
+    public @interface ScrollIndicators {}
+
+    /**
+     * Scroll indicator direction for the top edge of the view.
+     *
+     * @see #setScrollIndicators(int)
+     * @see #setScrollIndicators(int, int)
+     * @see #getScrollIndicators()
+     */
+    public static final int SCROLL_INDICATOR_TOP =
+            PFLAG3_SCROLL_INDICATOR_TOP >> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+
+    /**
+     * Scroll indicator direction for the bottom edge of the view.
+     *
+     * @see #setScrollIndicators(int)
+     * @see #setScrollIndicators(int, int)
+     * @see #getScrollIndicators()
+     */
+    public static final int SCROLL_INDICATOR_BOTTOM =
+            PFLAG3_SCROLL_INDICATOR_BOTTOM >> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+
+    /**
+     * Scroll indicator direction for the left edge of the view.
+     *
+     * @see #setScrollIndicators(int)
+     * @see #setScrollIndicators(int, int)
+     * @see #getScrollIndicators()
+     */
+    public static final int SCROLL_INDICATOR_LEFT =
+            PFLAG3_SCROLL_INDICATOR_LEFT >> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+
+    /**
+     * Scroll indicator direction for the right edge of the view.
+     *
+     * @see #setScrollIndicators(int)
+     * @see #setScrollIndicators(int, int)
+     * @see #getScrollIndicators()
+     */
+    public static final int SCROLL_INDICATOR_RIGHT =
+            PFLAG3_SCROLL_INDICATOR_RIGHT >> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+
+    /**
+     * Scroll indicator direction for the starting edge of the view.
+     * <p>
+     * Resolved according to the view's layout direction, see
+     * {@link #getLayoutDirection()} for more information.
+     *
+     * @see #setScrollIndicators(int)
+     * @see #setScrollIndicators(int, int)
+     * @see #getScrollIndicators()
+     */
+    public static final int SCROLL_INDICATOR_START =
+            PFLAG3_SCROLL_INDICATOR_START >> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+
+    /**
+     * Scroll indicator direction for the ending edge of the view.
+     * <p>
+     * Resolved according to the view's layout direction, see
+     * {@link #getLayoutDirection()} for more information.
+     *
+     * @see #setScrollIndicators(int)
+     * @see #setScrollIndicators(int, int)
+     * @see #getScrollIndicators()
+     */
+    public static final int SCROLL_INDICATOR_END =
+            PFLAG3_SCROLL_INDICATOR_END >> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+
+    /**
+     * <p>Indicates that we are allowing {@link ViewStructure} to traverse
      * into this view.<p>
      */
     static final int PFLAG3_ASSIST_BLOCKED = 0x100;
@@ -3204,6 +3349,8 @@
     @ViewDebug.ExportedProperty(deepExport = true, prefix = "fg_")
     private ForegroundInfo mForegroundInfo;
 
+    private Drawable mScrollIndicatorDrawable;
+
     /**
      * RenderNode used for backgrounds.
      * <p>
@@ -3270,6 +3417,13 @@
         protected OnLongClickListener mOnLongClickListener;
 
         /**
+         * Listener used to dispatch stylus touch and button press events. This field should be made
+         * private, so it is hidden from the SDK.
+         * {@hide}
+         */
+        protected OnStylusButtonPressListener mOnStylusButtonPressListener;
+
+        /**
          * Listener used to build the context menu.
          * This field should be made private, so it is hidden from the SDK.
          * {@hide}
@@ -3360,6 +3514,13 @@
     private boolean mHasPerformedLongPress;
 
     /**
+     * Whether the stylus button is currently pressed down. This is true when
+     * the stylus is touching the screen and the button has been pressed, this
+     * is false once the stylus has been lifted.
+     */
+    private boolean mInStylusButtonPress = false;
+
+    /**
      * The minimum height of the view. We'll try our best to have the height
      * of this view to at least this amount.
      */
@@ -3742,6 +3903,7 @@
         int scrollbarStyle = SCROLLBARS_INSIDE_OVERLAY;
         int overScrollMode = mOverScrollMode;
         boolean initializeScrollbars = false;
+        boolean initializeScrollIndicators = false;
 
         boolean startPaddingDefined = false;
         boolean endPaddingDefined = false;
@@ -3875,17 +4037,18 @@
                         viewFlagMasks |= LONG_CLICKABLE;
                     }
                     break;
+                case com.android.internal.R.styleable.View_stylusButtonPressable:
+                    if (a.getBoolean(attr, false)) {
+                        viewFlagValues |= STYLUS_BUTTON_PRESSABLE;
+                        viewFlagMasks |= STYLUS_BUTTON_PRESSABLE;
+                    }
+                    break;
                 case com.android.internal.R.styleable.View_saveEnabled:
                     if (!a.getBoolean(attr, true)) {
                         viewFlagValues |= SAVE_DISABLED;
                         viewFlagMasks |= SAVE_DISABLED_MASK;
                     }
                     break;
-                case com.android.internal.R.styleable.View_assistBlocked:
-                    if (a.getBoolean(attr, false)) {
-                        mPrivateFlags3 |= PFLAG3_ASSIST_BLOCKED;
-                    }
-                    break;
                 case com.android.internal.R.styleable.View_duplicateParentState:
                     if (a.getBoolean(attr, false)) {
                         viewFlagValues |= DUPLICATE_PARENT_STATE;
@@ -4102,6 +4265,14 @@
                     }
                     mForegroundInfo.mInsidePadding = a.getBoolean(attr,
                             mForegroundInfo.mInsidePadding);
+                case R.styleable.View_scrollIndicators:
+                    final int scrollIndicators =
+                            a.getInt(attr, SCROLL_INDICATORS_NONE) & SCROLL_INDICATORS_PFLAG3_MASK;
+                    if (scrollIndicators != 0) {
+                        viewFlagValues |= scrollIndicators;
+                        viewFlagMasks |= SCROLL_INDICATORS_PFLAG3_MASK;
+                        initializeScrollIndicators = true;
+                    }
                     break;
             }
         }
@@ -4178,6 +4349,10 @@
             initializeScrollbarsInternal(a);
         }
 
+        if (initializeScrollIndicators) {
+            initializeScrollIndicatorsInternal();
+        }
+
         a.recycle();
 
         // Needs to be called after mViewFlags is set
@@ -4340,6 +4515,7 @@
         out.append((mViewFlags&SCROLLBARS_VERTICAL) != 0 ? 'V' : '.');
         out.append((mViewFlags&CLICKABLE) != 0 ? 'C' : '.');
         out.append((mViewFlags&LONG_CLICKABLE) != 0 ? 'L' : '.');
+        out.append((mViewFlags & STYLUS_BUTTON_PRESSABLE) != 0 ? 'S' : '.');
         out.append(' ');
         out.append((mPrivateFlags&PFLAG_IS_ROOT_NAMESPACE) != 0 ? 'R' : '.');
         out.append((mPrivateFlags&PFLAG_FOCUSED) != 0 ? 'F' : '.');
@@ -4648,6 +4824,15 @@
         resolvePadding();
     }
 
+    private void initializeScrollIndicatorsInternal() {
+        // Some day maybe we'll break this into top/left/start/etc. and let the
+        // client control it. Until then, you can have any scroll indicator you
+        // want as long as it's a 1dp foreground-colored rectangle.
+        if (mScrollIndicatorDrawable == null) {
+            mScrollIndicatorDrawable = mContext.getDrawable(R.drawable.scroll_indicator_material);
+        }
+    }
+
     /**
      * <p>
      * Initalizes the scrollability cache if necessary.
@@ -4687,6 +4872,118 @@
         return mVerticalScrollbarPosition;
     }
 
+    /**
+     * Sets the state of all scroll indicators.
+     * <p>
+     * See {@link #setScrollIndicators(int, int)} for usage information.
+     *
+     * @param indicators a bitmask of indicators that should be enabled, or
+     *                   {@code 0} to disable all indicators
+     * @see #setScrollIndicators(int, int)
+     * @see #getScrollIndicators()
+     * @attr ref android.R.styleable#View_scrollIndicators
+     */
+    public void setScrollIndicators(@ScrollIndicators int indicators) {
+        setScrollIndicators(indicators, SCROLL_INDICATORS_PFLAG3_MASK);
+    }
+
+    /**
+     * Sets the state of the scroll indicators specified by the mask. To change
+     * all scroll indicators at once, see {@link #setScrollIndicators(int)}.
+     * <p>
+     * When a scroll indicator is enabled, it will be displayed if the view
+     * can scroll in the direction of the indicator.
+     * <p>
+     * Multiple indicator types may be enabled or disabled by passing the
+     * logical OR of the desired types. If multiple types are specified, they
+     * will all be set to the same enabled state.
+     * <p>
+     * For example, to enable the top scroll indicatorExample: {@code setScrollIndicators
+     *
+     * @param indicators the indicator direction, or the logical OR of multiple
+     *             indicator directions. One or more of:
+     *             <ul>
+     *               <li>{@link #SCROLL_INDICATOR_TOP}</li>
+     *               <li>{@link #SCROLL_INDICATOR_BOTTOM}</li>
+     *               <li>{@link #SCROLL_INDICATOR_LEFT}</li>
+     *               <li>{@link #SCROLL_INDICATOR_RIGHT}</li>
+     *               <li>{@link #SCROLL_INDICATOR_START}</li>
+     *               <li>{@link #SCROLL_INDICATOR_END}</li>
+     *             </ul>
+     * @see #setScrollIndicators(int)
+     * @see #getScrollIndicators()
+     * @attr ref android.R.styleable#View_scrollIndicators
+     */
+    public void setScrollIndicators(@ScrollIndicators int indicators, @ScrollIndicators int mask) {
+        // Shift and sanitize mask.
+        mask <<= SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+        mask &= SCROLL_INDICATORS_PFLAG3_MASK;
+
+        // Shift and mask indicators.
+        indicators <<= SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+        indicators &= mask;
+
+        // Merge with non-masked flags.
+        final int updatedFlags = indicators | (mPrivateFlags3 & ~mask);
+
+        if (mPrivateFlags3 != updatedFlags) {
+            mPrivateFlags3 = updatedFlags;
+
+            if (indicators != 0) {
+                initializeScrollIndicatorsInternal();
+            }
+            invalidate();
+        }
+    }
+
+    /**
+     * Returns a bitmask representing the enabled scroll indicators.
+     * <p>
+     * For example, if the top and left scroll indicators are enabled and all
+     * other indicators are disabled, the return value will be
+     * {@code View.SCROLL_INDICATOR_TOP | View.SCROLL_INDICATOR_LEFT}.
+     * <p>
+     * To check whether the bottom scroll indicator is enabled, use the value
+     * of {@code (getScrollIndicators() & View.SCROLL_INDICATOR_BOTTOM) != 0}.
+     *
+     * @return a bitmask representing the enabled scroll indicators
+     */
+    @ScrollIndicators
+    public int getScrollIndicators() {
+        return (mPrivateFlags3 & SCROLL_INDICATORS_PFLAG3_MASK)
+                >>> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+    }
+
+    /**
+     * Returns whether the specified scroll indicator is enabled.
+     * <p>
+     * Multiple indicator types may be queried by passing the logical OR of the
+     * desired types. If multiple types are specified, the return value
+     * represents whether they are all enabled.
+     *
+     * @param direction the indicator direction, or the logical OR of multiple
+     *             indicator directions. One or more of:
+     *             <ul>
+     *               <li>{@link #SCROLL_INDICATOR_TOP}</li>
+     *               <li>{@link #SCROLL_INDICATOR_BOTTOM}</li>
+     *               <li>{@link #SCROLL_INDICATOR_LEFT}</li>
+     *               <li>{@link #SCROLL_INDICATOR_RIGHT}</li>
+     *               <li>{@link #SCROLL_INDICATOR_START}</li>
+     *               <li>{@link #SCROLL_INDICATOR_END}</li>
+     *             </ul>
+     * @return {@code true} if the specified indicator(s) are enabled,
+     *         {@code false} otherwise
+     * @attr ref android.R.styleable#View_scrollIndicators
+     */
+    public boolean isScrollIndicatorEnabled(int direction) {
+        // Shift and sanitize input.
+        direction <<= SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
+        direction &= SCROLL_INDICATORS_PFLAG3_MASK;
+
+        // All of the flags must be set.
+        return (mPrivateFlags3 & direction) == direction;
+    }
+
     ListenerInfo getListenerInfo() {
         if (mListenerInfo != null) {
             return mListenerInfo;
@@ -4835,6 +5132,20 @@
     }
 
     /**
+     * Register a callback to be invoked when this view is touched with a stylus and the button is
+     * pressed.
+     *
+     * @param l The callback that will run
+     * @see #setStylusButtonPressable(boolean)
+     */
+    public void setOnStylusButtonPressListener(@Nullable OnStylusButtonPressListener l) {
+        if (!isStylusButtonPressable()) {
+            setStylusButtonPressable(true);
+        }
+        getListenerInfo().mOnStylusButtonPressListener = l;
+    }
+
+    /**
      * Register a callback to be invoked when the context menu for this view is
      * being built. If this view is not long clickable, it becomes long clickable.
      *
@@ -4912,6 +5223,46 @@
     }
 
     /**
+     * Call this view's OnStylusButtonPressListener, if it is defined.
+     *
+     * @return True if there was an assigned OnStylusButtonPressListener that consumed the event,
+     *         false otherwise.
+     */
+    public boolean performStylusButtonPress() {
+        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_STYLUS_BUTTON_PRESSED);
+
+        boolean handled = false;
+        ListenerInfo li = mListenerInfo;
+        if (li != null && li.mOnStylusButtonPressListener != null) {
+            handled = li.mOnStylusButtonPressListener.onStylusButtonPress(View.this);
+        }
+        if (handled) {
+            performHapticFeedback(HapticFeedbackConstants.STYLUS_BUTTON_PRESS);
+        }
+        return handled;
+    }
+
+    /**
+     * Checks for a stylus button press and calls the listener.
+     *
+     * @param event The event.
+     * @return True if the event was consumed.
+     */
+    private boolean performStylusActionOnButtonPress(MotionEvent event) {
+        if (isStylusButtonPressable() && !mInStylusButtonPress
+                && !mHasPerformedLongPress && event.isStylusButtonPressed()) {
+            if (performStylusButtonPress()) {
+                mInStylusButtonPress = true;
+                setPressed(true, event.getX(), event.getY());
+                removeTapCallback();
+                removeLongPressCallback();
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
      * Performs button-related actions during a touch down event.
      *
      * @param event The event.
@@ -5701,6 +6052,7 @@
      *   <li>{@link AccessibilityNodeInfo#setFocused(boolean)},</li>
      *   <li>{@link AccessibilityNodeInfo#setLongClickable(boolean)},</li>
      *   <li>{@link AccessibilityNodeInfo#setSelected(boolean)},</li>
+     *   <li>{@link AccessibilityNodeInfo#setStylusButtonPressable(boolean)}</li>
      * </ul>
      * <p>
      * Subclasses should override this method, call the super implementation,
@@ -5805,7 +6157,7 @@
      * @param structure Fill in with structured view data.  The default implementation
      * fills in all data that can be inferred from the view itself.
      */
-    public void onProvideAssistStructure(ViewAssistStructure structure) {
+    public void onProvideStructure(ViewStructure structure) {
         final int id = mID;
         if (id > 0 && (id&0xff000000) != 0 && (id&0x00ff0000) != 0
                 && (id&0x0000ffff) != 0) {
@@ -5852,10 +6204,18 @@
                 structure.setChecked(true);
             }
         }
+        if (isStylusButtonPressable()) {
+            structure.setStylusButtonPressable(true);
+        }
         structure.setClassName(getAccessibilityClassName().toString());
         structure.setContentDescription(getContentDescription());
     }
 
+    /** @hide */
+    public void onProvideAssistStructure(ViewStructure structure) {
+        onProvideStructure(structure);
+    }
+
     /**
      * Called when assist structure is being retrieved from a view as part of
      * {@link android.app.Activity#onProvideAssistData Activity.onProvideAssistData} to
@@ -5864,19 +6224,24 @@
      * view's virtual accessibility nodes, if any.  You can override this for a more
      * optimal implementation providing this data.
      */
-    public void onProvideVirtualAssistStructure(ViewAssistStructure structure) {
+    public void onProvideVirtualStructure(ViewStructure structure) {
         AccessibilityNodeProvider provider = getAccessibilityNodeProvider();
         if (provider != null) {
             AccessibilityNodeInfo info = createAccessibilityNodeInfo();
             Log.i("View", "Provider of " + this + ": children=" + info.getChildCount());
             structure.setChildCount(1);
-            ViewAssistStructure root = structure.newChild(0);
-            populateVirtualAssistStructure(root, provider, info);
+            ViewStructure root = structure.newChild(0);
+            populateVirtualStructure(root, provider, info);
             info.recycle();
         }
     }
 
-    private void populateVirtualAssistStructure(ViewAssistStructure structure,
+    /** @hide */
+    public void onProvideVirtualAssistStructure(ViewStructure structure) {
+        onProvideVirtualStructure(structure);
+    }
+
+    private void populateVirtualStructure(ViewStructure structure,
             AccessibilityNodeProvider provider, AccessibilityNodeInfo info) {
         structure.setId(AccessibilityNodeInfo.getVirtualDescendantId(info.getSourceNodeId()),
                 null, null, null);
@@ -5909,6 +6274,9 @@
                 structure.setChecked(true);
             }
         }
+        if (info.isStylusButtonPressable()) {
+            structure.setStylusButtonPressable(true);
+        }
         CharSequence cname = info.getClassName();
         structure.setClassName(cname != null ? cname.toString() : null);
         structure.setContentDescription(info.getContentDescription());
@@ -5924,19 +6292,19 @@
             for (int i=0; i<NCHILDREN; i++) {
                 AccessibilityNodeInfo cinfo = provider.createAccessibilityNodeInfo(
                         AccessibilityNodeInfo.getVirtualDescendantId(info.getChildId(i)));
-                ViewAssistStructure child = structure.newChild(i);
-                populateVirtualAssistStructure(child, provider, cinfo);
+                ViewStructure child = structure.newChild(i);
+                populateVirtualStructure(child, provider, cinfo);
                 cinfo.recycle();
             }
         }
     }
 
     /**
-     * Dispatch creation of {@link ViewAssistStructure} down the hierarchy.  The default
-     * implementation calls {@link #onProvideAssistStructure} and
-     * {@link #onProvideVirtualAssistStructure}.
+     * Dispatch creation of {@link ViewStructure} down the hierarchy.  The default
+     * implementation calls {@link #onProvideStructure} and
+     * {@link #onProvideVirtualStructure}.
      */
-    public void dispatchProvideAssistStructure(ViewAssistStructure structure) {
+    public void dispatchProvideStructure(ViewStructure structure) {
         if (!isAssistBlocked()) {
             onProvideAssistStructure(structure);
             onProvideVirtualAssistStructure(structure);
@@ -6038,6 +6406,7 @@
         info.setAccessibilityFocused(isAccessibilityFocused());
         info.setSelected(isSelected());
         info.setLongClickable(isLongClickable());
+        info.setStylusButtonPressable(isStylusButtonPressable());
         info.setLiveRegion(getAccessibilityLiveRegion());
 
         // TODO: These make sense only if we are in an AdapterView but all
@@ -6068,6 +6437,10 @@
             info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
         }
 
+        if (isStylusButtonPressable() && isEnabled()) {
+            info.addAction(AccessibilityAction.ACTION_STYLUS_BUTTON_PRESS);
+        }
+
         CharSequence text = getIterableTextForAccessibility();
         if (text != null && text.length() > 0) {
             info.setTextSelection(getAccessibilitySelectionStart(), getAccessibilitySelectionEnd());
@@ -7442,6 +7815,31 @@
     }
 
     /**
+     * Indicates whether this view reacts to stylus button press events or not.
+     *
+     * @return true if the view is stylus button pressable, false otherwise
+     * @see #setStylusButtonPressable(boolean)
+     * @attr ref android.R.styleable#View_stylusButtonPressable
+     */
+    public boolean isStylusButtonPressable() {
+        return (mViewFlags & STYLUS_BUTTON_PRESSABLE) == STYLUS_BUTTON_PRESSABLE;
+    }
+
+    /**
+     * Enables or disables stylus button press events for this view. When a view is stylus button
+     * pressable it reacts to the user touching the screen with a stylus and pressing the first
+     * stylus button. This event can launch the listener.
+     *
+     * @param stylusButtonPressable true to make the view react to a stylus button press, false
+     *            otherwise
+     * @see #isStylusButtonPressable()
+     * @attr ref android.R.styleable#View_stylusButtonPressable
+     */
+    public void setStylusButtonPressable(boolean stylusButtonPressable) {
+        setFlags(stylusButtonPressable ? STYLUS_BUTTON_PRESSABLE : 0, STYLUS_BUTTON_PRESSABLE);
+    }
+
+    /**
      * Sets the pressed state for this view and provides a touch coordinate for
      * animation hinting.
      *
@@ -7510,8 +7908,9 @@
     }
 
     /**
+     * @hide
      * Indicates whether this view will participate in data collection through
-     * {@link android.view.ViewAssistStructure}.  If true, it will not provide any data
+     * {@link ViewStructure}.  If true, it will not provide any data
      * for itself or its children.  If false, the normal data collection will be allowed.
      *
      * @return Returns false if assist data collection is not blocked, else true.
@@ -7524,17 +7923,18 @@
     }
 
     /**
+     * @hide
      * Controls whether assist data collection from this view and its children is enabled
-     * (that is, whether {@link #onProvideAssistStructure} and
-     * {@link #onProvideVirtualAssistStructure} will be called).  The default value is false,
+     * (that is, whether {@link #onProvideStructure} and
+     * {@link #onProvideVirtualStructure} will be called).  The default value is false,
      * allowing normal assist collection.  Setting this to false will disable assist collection.
      *
      * @param enabled Set to true to <em>disable</em> assist data collection, or false
      * (the default) to allow it.
      *
      * @see #isAssistBlocked()
-     * @see #onProvideAssistStructure
-     * @see #onProvideVirtualAssistStructure
+     * @see #onProvideStructure
+     * @see #onProvideVirtualStructure
      * @attr ref android.R.styleable#View_assistBlocked
      */
     public void setAssistBlocked(boolean enabled) {
@@ -7856,7 +8256,8 @@
     public void addTouchables(ArrayList<View> views) {
         final int viewFlags = mViewFlags;
 
-        if (((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)
+        if (((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE
+                || (viewFlags & STYLUS_BUTTON_PRESSABLE) == STYLUS_BUTTON_PRESSABLE)
                 && (viewFlags & ENABLED_MASK) == ENABLED) {
             views.add(this);
         }
@@ -8471,7 +8872,11 @@
     public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
         if (isNestedScrollingEnabled()
                 && (action == AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD
-                || action == AccessibilityNodeInfo.ACTION_SCROLL_FORWARD)) {
+                || action == AccessibilityNodeInfo.ACTION_SCROLL_FORWARD
+                || action == R.id.accessibilityActionScrollUp
+                || action == R.id.accessibilityActionScrollLeft
+                || action == R.id.accessibilityActionScrollDown
+                || action == R.id.accessibilityActionScrollRight)) {
             if (dispatchNestedPrePerformAccessibilityAction(action, arguments)) {
                 return true;
             }
@@ -8571,6 +8976,12 @@
                     return requestRectangleOnScreen(r, true);
                 }
             } break;
+            case R.id.accessibilityActionStylusButtonPress: {
+                if (isStylusButtonPressable()) {
+                    performStylusButtonPress();
+                    return true;
+                }
+            } break;
         }
         return false;
     }
@@ -9728,7 +10139,8 @@
         }
 
         return (viewFlags & CLICKABLE) == CLICKABLE
-                || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE;
+                || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE
+                || (viewFlags & STYLUS_BUTTON_PRESSABLE) == STYLUS_BUTTON_PRESSABLE;
     }
 
     /**
@@ -9811,15 +10223,17 @@
         final float x = event.getX();
         final float y = event.getY();
         final int viewFlags = mViewFlags;
+        final int action = event.getAction();
 
         if ((viewFlags & ENABLED_MASK) == DISABLED) {
-            if (event.getAction() == MotionEvent.ACTION_UP && (mPrivateFlags & PFLAG_PRESSED) != 0) {
+            if (action == MotionEvent.ACTION_UP && (mPrivateFlags & PFLAG_PRESSED) != 0) {
                 setPressed(false);
             }
             // A disabled view that is clickable still consumes the touch
             // events, it just doesn't respond to them.
-            return (((viewFlags & CLICKABLE) == CLICKABLE ||
-                    (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE));
+            return (((viewFlags & CLICKABLE) == CLICKABLE
+                    || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)
+                    || (viewFlags & STYLUS_BUTTON_PRESSABLE) == STYLUS_BUTTON_PRESSABLE);
         }
 
         if (mTouchDelegate != null) {
@@ -9829,9 +10243,14 @@
         }
 
         if (((viewFlags & CLICKABLE) == CLICKABLE ||
-                (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {
-            switch (event.getAction()) {
+                (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) ||
+                (viewFlags & STYLUS_BUTTON_PRESSABLE) == STYLUS_BUTTON_PRESSABLE) {
+            switch (action) {
                 case MotionEvent.ACTION_UP:
+                    if (mInStylusButtonPress) {
+                        mInStylusButtonPress = false;
+                        mHasPerformedLongPress = false;
+                    }
                     boolean prepressed = (mPrivateFlags & PFLAG_PREPRESSED) != 0;
                     if ((mPrivateFlags & PFLAG_PRESSED) != 0 || prepressed) {
                         // take focus if we don't have it already and we should in
@@ -9885,6 +10304,11 @@
 
                 case MotionEvent.ACTION_DOWN:
                     mHasPerformedLongPress = false;
+                    mInStylusButtonPress = false;
+
+                    if (performStylusActionOnButtonPress(event)) {
+                        break;
+                    }
 
                     if (performButtonActionOnTouchDown(event)) {
                         break;
@@ -9914,6 +10338,10 @@
                     setPressed(false);
                     removeTapCallback();
                     removeLongPressCallback();
+                    if (mInStylusButtonPress) {
+                        mInStylusButtonPress = false;
+                        mHasPerformedLongPress = false;
+                    }
                     break;
 
                 case MotionEvent.ACTION_MOVE:
@@ -9929,6 +10357,9 @@
 
                             setPressed(false);
                         }
+                    } else if (performStylusActionOnButtonPress(event)) {
+                        // Check for stylus button press if we're within the view.
+                        break;
                     }
                     break;
             }
@@ -10216,7 +10647,8 @@
 
         if (accessibilityEnabled) {
             if ((changed & FOCUSABLE_MASK) != 0 || (changed & VISIBILITY_MASK) != 0
-                    || (changed & CLICKABLE) != 0 || (changed & LONG_CLICKABLE) != 0) {
+                    || (changed & CLICKABLE) != 0 || (changed & LONG_CLICKABLE) != 0
+                    || (changed & STYLUS_BUTTON_PRESSABLE) != 0) {
                 if (oldIncludeForAccessibility != includeForAccessibility()) {
                     notifySubtreeAccessibilityStateChangedIfNeeded();
                 } else {
@@ -10940,25 +11372,34 @@
     }
 
     /**
-     * <p>Sets the opacity of the view. This is a value from 0 to 1, where 0 means the view is
-     * completely transparent and 1 means the view is completely opaque.</p>
+     * Sets the opacity of the view to a value from 0 to 1, where 0 means the view is
+     * completely transparent and 1 means the view is completely opaque.
      *
-     * <p> Note that setting alpha to a translucent value (0 < alpha < 1) can have significant
-     * performance implications, especially for large views. It is best to use the alpha property
-     * sparingly and transiently, as in the case of fading animations.</p>
+     * <p class="note"><strong>Note:</strong> setting alpha to a translucent value (0 < alpha < 1)
+     * can have significant performance implications, especially for large views. It is best to use
+     * the alpha property sparingly and transiently, as in the case of fading animations.</p>
      *
      * <p>For a view with a frequently changing alpha, such as during a fading animation, it is
      * strongly recommended for performance reasons to either override
-     * {@link #hasOverlappingRendering()} to return false if appropriate, or setting a
-     * {@link #setLayerType(int, android.graphics.Paint) layer type} on the view.</p>
+     * {@link #hasOverlappingRendering()} to return <code>false</code> if appropriate, or setting a
+     * {@link #setLayerType(int, android.graphics.Paint) layer type} on the view for the duration
+     * of the animation. On versions {@link android.os.Build.VERSION_CODES#MNC} and below,
+     * the default path for rendering an unlayered View with alpha could add multiple milliseconds
+     * of rendering cost, even for simple or small views. Starting with
+     * {@link android.os.Build.VERSION_CODES#MNC}, {@link #LAYER_TYPE_HARDWARE} is automatically
+     * applied to the view at the rendering level.</p>
      *
      * <p>If this view overrides {@link #onSetAlpha(int)} to return true, then this view is
      * responsible for applying the opacity itself.</p>
      *
-     * <p>Note that if the view is backed by a
-     * {@link #setLayerType(int, android.graphics.Paint) layer} and is associated with a
-     * {@link #setLayerPaint(android.graphics.Paint) layer paint}, setting an alpha value less than
-     * 1.0 will supersede the alpha of the layer paint.</p>
+     * <p>On versions {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1} and below, note that if
+     * the view is backed by a {@link #setLayerType(int, android.graphics.Paint) layer} and is
+     * associated with a {@link #setLayerPaint(android.graphics.Paint) layer paint}, setting an
+     * alpha value less than 1.0 will supersede the alpha of the layer paint.</p>
+     *
+     * <p>Starting with {@link android.os.Build.VERSION_CODES#MNC}, setting a translucent alpha
+     * value will clip a View to its bounds, unless the View returns <code>false</code> from
+     * {@link #hasOverlappingRendering}.</p>
      *
      * @param alpha The opacity of the view.
      *
@@ -13278,6 +13719,75 @@
         }
     }
 
+    void getScrollIndicatorBounds(@NonNull Rect out) {
+        out.left = mScrollX;
+        out.right = mScrollX + mRight - mLeft;
+        out.top = mScrollY;
+        out.bottom = mScrollY + mBottom - mTop;
+    }
+
+    private void onDrawScrollIndicators(Canvas c) {
+        if ((mPrivateFlags3 & SCROLL_INDICATORS_PFLAG3_MASK) == 0) {
+            // No scroll indicators enabled.
+            return;
+        }
+
+        final Drawable dr = mScrollIndicatorDrawable;
+        if (dr == null) {
+            // Scroll indicators aren't supported here.
+            return;
+        }
+
+        final int h = dr.getIntrinsicHeight();
+        final int w = dr.getIntrinsicWidth();
+        final Rect rect = mAttachInfo.mTmpInvalRect;
+        getScrollIndicatorBounds(rect);
+
+        if ((mPrivateFlags3 & PFLAG3_SCROLL_INDICATOR_TOP) != 0) {
+            final boolean canScrollUp = canScrollVertically(-1);
+            if (canScrollUp) {
+                dr.setBounds(rect.left, rect.top, rect.right, rect.top + h);
+                dr.draw(c);
+            }
+        }
+
+        if ((mPrivateFlags3 & PFLAG3_SCROLL_INDICATOR_BOTTOM) != 0) {
+            final boolean canScrollDown = canScrollVertically(1);
+            if (canScrollDown) {
+                dr.setBounds(rect.left, rect.bottom - h, rect.right, rect.bottom);
+                dr.draw(c);
+            }
+        }
+
+        final int leftRtl;
+        final int rightRtl;
+        if (getLayoutDirection() == LAYOUT_DIRECTION_RTL) {
+            leftRtl = PFLAG3_SCROLL_INDICATOR_END;
+            rightRtl = PFLAG3_SCROLL_INDICATOR_START;
+        } else {
+            leftRtl = PFLAG3_SCROLL_INDICATOR_START;
+            rightRtl = PFLAG3_SCROLL_INDICATOR_END;
+        }
+
+        final int leftMask = PFLAG3_SCROLL_INDICATOR_LEFT | leftRtl;
+        if ((mPrivateFlags3 & leftMask) != 0) {
+            final boolean canScrollLeft = canScrollHorizontally(-1);
+            if (canScrollLeft) {
+                dr.setBounds(rect.left, rect.top, rect.left + w, rect.bottom);
+                dr.draw(c);
+            }
+        }
+
+        final int rightMask = PFLAG3_SCROLL_INDICATOR_RIGHT | rightRtl;
+        if ((mPrivateFlags3 & rightMask) != 0) {
+            final boolean canScrollRight = canScrollHorizontally(1);
+            if (canScrollRight) {
+                dr.setBounds(rect.right - w, rect.top, rect.right, rect.bottom);
+                dr.draw(c);
+            }
+        }
+    }
+
     /**
      * <p>Request the drawing of the horizontal and the vertical scrollbar. The
      * scrollbars are painted only if they have been awakened first.</p>
@@ -14551,11 +15061,16 @@
         return !(mAttachInfo == null || mAttachInfo.mHardwareRenderer == null);
     }
 
-    private void updateDisplayListIfDirty() {
+    /**
+     * Gets the RenderNode for the view, and updates its DisplayList (if needed and supported)
+     * @hide
+     */
+    @NonNull
+    public RenderNode updateDisplayListIfDirty() {
         final RenderNode renderNode = mRenderNode;
         if (!canHaveDisplayList()) {
             // can't populate RenderNode, don't try
-            return;
+            return renderNode;
         }
 
         if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0
@@ -14569,7 +15084,7 @@
                 mPrivateFlags &= ~PFLAG_DIRTY_MASK;
                 dispatchGetDisplayList();
 
-                return; // no work needed
+                return renderNode; // no work needed
             }
 
             // If we got here, we're recreating it. Mark it as such to ensure that
@@ -14618,19 +15133,7 @@
             mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID;
             mPrivateFlags &= ~PFLAG_DIRTY_MASK;
         }
-    }
-
-    /**
-     * Returns a RenderNode with View draw content recorded, which can be
-     * used to draw this view again without executing its draw method.
-     *
-     * @return A RenderNode ready to replay, or null if caching is not enabled.
-     *
-     * @hide
-     */
-    public RenderNode getDisplayList() {
-        updateDisplayListIfDirty();
-        return mRenderNode;
+        return renderNode;
     }
 
     private void resetDisplayList() {
@@ -15392,7 +15895,7 @@
         if (drawingWithRenderNode) {
             // Delay getting the display list until animation-driven alpha values are
             // set up and possibly passed on to the view
-            renderNode = getDisplayList();
+            renderNode = updateDisplayListIfDirty();
             if (!renderNode.isValid()) {
                 // Uncommon, but possible. If a view is removed from the hierarchy during the call
                 // to getDisplayList(), the display list will be marked invalid and we should not
@@ -17113,6 +17616,7 @@
      * @param canvas canvas to draw into
      */
     public void onDrawForeground(Canvas canvas) {
+        onDrawScrollIndicators(canvas);
         onDrawScrollBars(canvas);
 
         final Drawable foreground = mForegroundInfo != null ? mForegroundInfo.mDrawable : null;
@@ -20782,6 +21286,20 @@
     }
 
     /**
+     * Interface definition for a callback to be invoked when a view is touched with a stylus while
+     * the stylus button is pressed.
+     */
+    public interface OnStylusButtonPressListener {
+        /**
+         * Called when a view is touched with a stylus while the stylus button is pressed.
+         *
+         * @param v The view that was touched.
+         * @return true if the callback consumed the stylus button press, false otherwise.
+         */
+        boolean onStylusButtonPress(View v);
+    }
+
+    /**
      * Interface definition for a callback to be invoked when the context menu
      * for this view is being built.
      */
@@ -21841,4 +22359,138 @@
         final String output = bits + " " + name;
         found.put(key, output);
     }
+
+    /** {@hide} */
+    public void encode(@NonNull ViewHierarchyEncoder stream) {
+        stream.beginObject(this);
+        encodeProperties(stream);
+        stream.endObject();
+    }
+
+    /** {@hide} */
+    @CallSuper
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder stream) {
+        Object resolveId = ViewDebug.resolveId(getContext(), mID);
+        if (resolveId instanceof String) {
+            stream.addProperty("id", (String) resolveId);
+        } else {
+            stream.addProperty("id", mID);
+        }
+
+        stream.addProperty("misc:transformation.alpha",
+                mTransformationInfo != null ? mTransformationInfo.mAlpha : 0);
+        stream.addProperty("misc:transitionName", getTransitionName());
+
+        // layout
+        stream.addProperty("layout:left", mLeft);
+        stream.addProperty("layout:right", mRight);
+        stream.addProperty("layout:top", mTop);
+        stream.addProperty("layout:bottom", mBottom);
+        stream.addProperty("layout:width", getWidth());
+        stream.addProperty("layout:height", getHeight());
+        stream.addProperty("layout:layoutDirection", getLayoutDirection());
+        stream.addProperty("layout:layoutRtl", isLayoutRtl());
+        stream.addProperty("layout:hasTransientState", hasTransientState());
+        stream.addProperty("layout:baseline", getBaseline());
+
+        // layout params
+        ViewGroup.LayoutParams layoutParams = getLayoutParams();
+        if (layoutParams != null) {
+            stream.addPropertyKey("layoutParams");
+            layoutParams.encode(stream);
+        }
+
+        // scrolling
+        stream.addProperty("scrolling:scrollX", mScrollX);
+        stream.addProperty("scrolling:scrollY", mScrollY);
+
+        // padding
+        stream.addProperty("padding:paddingLeft", mPaddingLeft);
+        stream.addProperty("padding:paddingRight", mPaddingRight);
+        stream.addProperty("padding:paddingTop", mPaddingTop);
+        stream.addProperty("padding:paddingBottom", mPaddingBottom);
+        stream.addProperty("padding:userPaddingRight", mUserPaddingRight);
+        stream.addProperty("padding:userPaddingLeft", mUserPaddingLeft);
+        stream.addProperty("padding:userPaddingBottom", mUserPaddingBottom);
+        stream.addProperty("padding:userPaddingStart", mUserPaddingStart);
+        stream.addProperty("padding:userPaddingEnd", mUserPaddingEnd);
+
+        // measurement
+        stream.addProperty("measurement:minHeight", mMinHeight);
+        stream.addProperty("measurement:minWidth", mMinWidth);
+        stream.addProperty("measurement:measuredWidth", mMeasuredWidth);
+        stream.addProperty("measurement:measuredHeight", mMeasuredHeight);
+
+        // drawing
+        stream.addProperty("drawing:elevation", getElevation());
+        stream.addProperty("drawing:translationX", getTranslationX());
+        stream.addProperty("drawing:translationY", getTranslationY());
+        stream.addProperty("drawing:translationZ", getTranslationZ());
+        stream.addProperty("drawing:rotation", getRotation());
+        stream.addProperty("drawing:rotationX", getRotationX());
+        stream.addProperty("drawing:rotationY", getRotationY());
+        stream.addProperty("drawing:scaleX", getScaleX());
+        stream.addProperty("drawing:scaleY", getScaleY());
+        stream.addProperty("drawing:pivotX", getPivotX());
+        stream.addProperty("drawing:pivotY", getPivotY());
+        stream.addProperty("drawing:opaque", isOpaque());
+        stream.addProperty("drawing:alpha", getAlpha());
+        stream.addProperty("drawing:transitionAlpha", getTransitionAlpha());
+        stream.addProperty("drawing:shadow", hasShadow());
+        stream.addProperty("drawing:solidColor", getSolidColor());
+        stream.addProperty("drawing:layerType", mLayerType);
+        stream.addProperty("drawing:willNotDraw", willNotDraw());
+        stream.addProperty("drawing:hardwareAccelerated", isHardwareAccelerated());
+        stream.addProperty("drawing:willNotCacheDrawing", willNotCacheDrawing());
+        stream.addProperty("drawing:drawingCacheEnabled", isDrawingCacheEnabled());
+        stream.addProperty("drawing:overlappingRendering", hasOverlappingRendering());
+
+        // focus
+        stream.addProperty("focus:hasFocus", hasFocus());
+        stream.addProperty("focus:isFocused", isFocused());
+        stream.addProperty("focus:isFocusable", isFocusable());
+        stream.addProperty("focus:isFocusableInTouchMode", isFocusableInTouchMode());
+
+        stream.addProperty("misc:clickable", isClickable());
+        stream.addProperty("misc:pressed", isPressed());
+        stream.addProperty("misc:selected", isSelected());
+        stream.addProperty("misc:touchMode", isInTouchMode());
+        stream.addProperty("misc:hovered", isHovered());
+        stream.addProperty("misc:activated", isActivated());
+
+        stream.addProperty("misc:visibility", getVisibility());
+        stream.addProperty("misc:fitsSystemWindows", getFitsSystemWindows());
+        stream.addProperty("misc:filterTouchesWhenObscured", getFilterTouchesWhenObscured());
+
+        stream.addProperty("misc:enabled", isEnabled());
+        stream.addProperty("misc:soundEffectsEnabled", isSoundEffectsEnabled());
+        stream.addProperty("misc:hapticFeedbackEnabled", isHapticFeedbackEnabled());
+
+        // theme attributes
+        Resources.Theme theme = getContext().getTheme();
+        if (theme != null) {
+            stream.addPropertyKey("theme");
+            theme.encode(stream);
+        }
+
+        // view attribute information
+        int n = mAttributes != null ? mAttributes.length : 0;
+        stream.addProperty("meta:__attrCount__", n/2);
+        for (int i = 0; i < n; i += 2) {
+            stream.addProperty("meta:__attr__" + mAttributes[i], mAttributes[i+1]);
+        }
+
+        stream.addProperty("misc:scrollBarStyle", getScrollBarStyle());
+
+        // text
+        stream.addProperty("text:textDirection", getTextDirection());
+        stream.addProperty("text:textAlignment", getTextAlignment());
+
+        // accessibility
+        CharSequence contentDescription = getContentDescription();
+        stream.addProperty("accessibility:contentDescription",
+                contentDescription == null ? "" : contentDescription.toString());
+        stream.addProperty("accessibility:labelFor", getLabelFor());
+        stream.addProperty("accessibility:importantForAccessibility", getImportantForAccessibility());
+    }
 }
diff --git a/core/java/android/view/ViewAssistStructure.java b/core/java/android/view/ViewAssistStructure.java
index 346b8ec..a66d93c 100644
--- a/core/java/android/view/ViewAssistStructure.java
+++ b/core/java/android/view/ViewAssistStructure.java
@@ -16,68 +16,9 @@
 
 package android.view;
 
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.text.TextPaint;
-
 /**
- * Container for storing additional per-view data generated by {@link View#onProvideAssistStructure
- * View.onProvideAssistStructure}.
+ * @deprecated Temporary until old apps can move off this.
  */
-public abstract class ViewAssistStructure {
-    public abstract void setId(int id, String packageName, String typeName, String entryName);
-
-    public abstract void setDimens(int left, int top, int scrollX, int scrollY, int width,
-            int height);
-
-    public abstract void setVisibility(int visibility);
-
-    public abstract void setAssistBlocked(boolean state);
-
-    public abstract void setEnabled(boolean state);
-
-    public abstract void setClickable(boolean state);
-
-    public abstract void setLongClickable(boolean state);
-
-    public abstract void setFocusable(boolean state);
-
-    public abstract void setFocused(boolean state);
-
-    public abstract void setAccessibilityFocused(boolean state);
-
-    public abstract void setCheckable(boolean state);
-
-    public abstract void setChecked(boolean state);
-
-    public abstract void setSelected(boolean state);
-
-    public abstract void setActivated(boolean state);
-
-    public abstract void setClassName(String className);
-
-    public abstract void setContentDescription(CharSequence contentDescription);
-
-    public abstract void setText(CharSequence text);
-    public abstract void setText(CharSequence text, int selectionStart, int selectionEnd);
-    public abstract void setTextPaint(TextPaint paint);
-    public abstract void setHint(CharSequence hint);
-
-    public abstract CharSequence getText();
-    public abstract int getTextSelectionStart();
-    public abstract int getTextSelectionEnd();
-    public abstract CharSequence getHint();
-
-    public abstract Bundle editExtras();
-    public abstract void clearExtras();
-
-    public abstract void setChildCount(int num);
-    public abstract int getChildCount();
-    public abstract ViewAssistStructure newChild(int index);
-
-    public abstract ViewAssistStructure asyncNewChild(int index);
-    public abstract void asyncCommit();
-
-    /** @hide */
-    public abstract Rect getTempRect();
+@Deprecated
+public abstract class ViewAssistStructure extends ViewStructure {
 }
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java
index 27304f5..8bf53a8 100644
--- a/core/java/android/view/ViewDebug.java
+++ b/core/java/android/view/ViewDebug.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
@@ -800,6 +801,7 @@
 
     /**
      * Dumps the view hierarchy starting from the given view.
+     * @deprecated See {@link #dumpv2(View, ByteArrayOutputStream)} below.
      * @hide
      */
     public static void dump(View root, boolean skipChildren, boolean includeProperties,
@@ -825,6 +827,28 @@
     }
 
     /**
+     * Dumps the view hierarchy starting from the given view.
+     * Rather than using reflection, it uses View's encode method to obtain all the properties.
+     * @hide
+     */
+    public static void dumpv2(@NonNull final View view, @NonNull ByteArrayOutputStream out)
+            throws InterruptedException {
+        final ViewHierarchyEncoder encoder = new ViewHierarchyEncoder(out);
+        final CountDownLatch latch = new CountDownLatch(1);
+
+        view.post(new Runnable() {
+            @Override
+            public void run() {
+                view.encode(encoder);
+                latch.countDown();
+            }
+        });
+
+        latch.await(2, TimeUnit.SECONDS);
+        encoder.endStream();
+    }
+
+    /**
      * Dumps the theme attributes from the given View.
      * @hide
      */
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index d0d4201..51c4760 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -18,6 +18,8 @@
 
 import android.animation.LayoutTransition;
 import android.annotation.IdRes;
+import android.annotation.NonNull;
+import android.annotation.UiThread;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -105,6 +107,7 @@
  * @attr ref android.R.styleable#ViewGroup_splitMotionEvents
  * @attr ref android.R.styleable#ViewGroup_layoutMode
  */
+@UiThread
 public abstract class ViewGroup extends View implements ViewParent, ViewManager {
     private static final String TAG = "ViewGroup";
 
@@ -2875,12 +2878,12 @@
     }
 
     /**
-     * Dispatch creation of {@link ViewAssistStructure} down the hierarchy.  This implementation
+     * Dispatch creation of {@link ViewStructure} down the hierarchy.  This implementation
      * adds in all child views of the view group, in addition to calling the default View
      * implementation.
      */
-    public void dispatchProvideAssistStructure(ViewAssistStructure structure) {
-        super.dispatchProvideAssistStructure(structure);
+    public void dispatchProvideStructure(ViewStructure structure) {
+        super.dispatchProvideStructure(structure);
         if (!isAssistBlocked()) {
             if (structure.getChildCount() == 0) {
                 final int childrenCount = getChildCount();
@@ -2895,8 +2898,8 @@
                                 ? getChildDrawingOrder(childrenCount, i) : i;
                         final View child = (preorderedList == null)
                                 ? children[childIndex] : preorderedList.get(childIndex);
-                        ViewAssistStructure cstructure = structure.newChild(i);
-                        child.dispatchProvideAssistStructure(cstructure);
+                        ViewStructure cstructure = structure.newChild(i);
+                        child.dispatchProvideStructure(cstructure);
                     }
                 }
             }
@@ -3524,10 +3527,9 @@
     }
 
     private void recreateChildDisplayList(View child) {
-        child.mRecreateDisplayList = (child.mPrivateFlags & PFLAG_INVALIDATED)
-                == PFLAG_INVALIDATED;
+        child.mRecreateDisplayList = (child.mPrivateFlags & PFLAG_INVALIDATED) != 0;
         child.mPrivateFlags &= ~PFLAG_INVALIDATED;
-        child.getDisplayList();
+        child.updateDisplayListIfDirty();
         child.mRecreateDisplayList = false;
     }
 
@@ -3546,6 +3548,21 @@
         return child.draw(canvas, this, drawingTime);
     }
 
+    @Override
+    void getScrollIndicatorBounds(@NonNull Rect out) {
+        super.getScrollIndicatorBounds(out);
+
+        // If we have padding and we're supposed to clip children to that
+        // padding, offset the scroll indicators to match our clip bounds.
+        final boolean clipToPadding = (mGroupFlags & CLIP_TO_PADDING_MASK) == CLIP_TO_PADDING_MASK;
+        if (clipToPadding) {
+            out.left += mPaddingLeft;
+            out.right -= mPaddingRight;
+            out.top += mPaddingTop;
+            out.bottom -= mPaddingBottom;
+        }
+    }
+
     /**
      * Returns whether this group's children are clipped to their bounds before drawing.
      * The default value is true.
@@ -6844,6 +6861,19 @@
             }
             return String.valueOf(size);
         }
+
+        /** @hide */
+        void encode(@NonNull ViewHierarchyEncoder encoder) {
+            encoder.beginObject(this);
+            encodeProperties(encoder);
+            encoder.endObject();
+        }
+
+        /** @hide */
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            encoder.addProperty("width", width);
+            encoder.addProperty("height", height);
+        }
     }
 
     /**
@@ -7312,6 +7342,18 @@
                     bottomMargin,
                     paint);
         }
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+            encoder.addProperty("leftMargin", leftMargin);
+            encoder.addProperty("topMargin", topMargin);
+            encoder.addProperty("rightMargin", rightMargin);
+            encoder.addProperty("bottomMargin", bottomMargin);
+            encoder.addProperty("startMargin", startMargin);
+            encoder.addProperty("endMargin", endMargin);
+        }
     }
 
     /* Describes a touched view and the ids of the pointers that it has captured.
@@ -7648,4 +7690,23 @@
 
         canvas.drawLines(sDebugLines, paint);
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+
+        encoder.addProperty("focus:descendantFocusability", getDescendantFocusability());
+        encoder.addProperty("drawing:clipChildren", getClipChildren());
+        encoder.addProperty("drawing:clipToPadding", getClipToPadding());
+        encoder.addProperty("drawing:childrenDrawingOrderEnabled", isChildrenDrawingOrderEnabled());
+        encoder.addProperty("drawing:persistentDrawingCache", getPersistentDrawingCache());
+
+        int n = getChildCount();
+        encoder.addProperty("meta:__childCount__", (short)n);
+        for (int i = 0; i < n; i++) {
+            encoder.addPropertyKey("meta:__child__" + i);
+            getChildAt(i).encode(encoder);
+        }
+    }
 }
diff --git a/core/java/android/view/ViewHierarchyEncoder.java b/core/java/android/view/ViewHierarchyEncoder.java
new file mode 100644
index 0000000..8770216
--- /dev/null
+++ b/core/java/android/view/ViewHierarchyEncoder.java
@@ -0,0 +1,201 @@
+package android.view;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * {@link ViewHierarchyEncoder} is a serializer that is tailored towards writing out
+ * view hierarchies (the view tree, along with the properties for each view) to a stream.
+ *
+ * It is typically used as follows:
+ * <pre>
+ *   ViewHierarchyEncoder e = new ViewHierarchyEncoder();
+ *
+ *   for (View view : views) {
+ *      e.beginObject(view);
+ *      e.addProperty("prop1", value);
+ *      ...
+ *      e.endObject();
+ *   }
+ *
+ *   // repeat above snippet for each view, finally end with:
+ *   e.endStream();
+ * </pre>
+ *
+ * <p>On the stream, a snippet such as the above gets encoded as a series of Map's (one
+ * corresponding to each view) with the property name as the key and the property value
+ * as the value.
+ *
+ * <p>Since the property names are practically the same across all views, rather than using
+ * the property name directly as the key, we use a short integer id corresponding to each
+ * property name as the key. A final map is added at the end which contains the mapping
+ * from the integer to its property name.
+ *
+ * <p>A value is encoded as a single byte type identifier followed by the encoding of the
+ * value. Only primitive types are supported as values, in addition to the Map type.
+ *
+ * @hide
+ */
+public class ViewHierarchyEncoder {
+    // Prefixes for simple primitives. These match the JNI definitions.
+    private static final byte SIG_BOOLEAN = 'Z';
+    private static final byte SIG_BYTE = 'B';
+    private static final byte SIG_SHORT = 'S';
+    private static final byte SIG_INT = 'I';
+    private static final byte SIG_LONG = 'J';
+    private static final byte SIG_FLOAT = 'F';
+    private static final byte SIG_DOUBLE = 'D';
+
+    // Prefixes for some commonly used objects
+    private static final byte SIG_STRING = 'R';
+
+    private static final byte SIG_MAP = 'M'; // a map with an short key
+    private static final short SIG_END_MAP = 0;
+
+    private final DataOutputStream mStream;
+
+    private final Map<String,Short> mPropertyNames = new HashMap<String, Short>(200);
+    private short mPropertyId = 1;
+    private Charset mCharset = Charset.forName("utf-8");
+
+    public ViewHierarchyEncoder(@NonNull ByteArrayOutputStream stream) {
+        mStream = new DataOutputStream(stream);
+    }
+
+    public void beginObject(@NonNull Object o) {
+        startPropertyMap();
+        addProperty("meta:__name__", o.getClass().getName());
+        addProperty("meta:__hash__", o.hashCode());
+    }
+
+    public void endObject() {
+        endPropertyMap();
+    }
+
+    public void endStream() {
+        // write out the string table
+        startPropertyMap();
+        addProperty("__name__", "propertyIndex");
+        for (Map.Entry<String,Short> entry : mPropertyNames.entrySet()) {
+            writeShort(entry.getValue());
+            writeString(entry.getKey());
+        }
+        endPropertyMap();
+    }
+
+    public void addProperty(@NonNull String name, boolean v) {
+        writeShort(createPropertyIndex(name));
+        writeBoolean(v);
+    }
+
+    public void addProperty(@NonNull String name, short s) {
+        writeShort(createPropertyIndex(name));
+        writeShort(s);
+    }
+
+    public void addProperty(@NonNull String name, int v) {
+        writeShort(createPropertyIndex(name));
+        writeInt(v);
+    }
+
+    public void addProperty(@NonNull String name, float v) {
+        writeShort(createPropertyIndex(name));
+        writeFloat(v);
+    }
+
+    public void addProperty(@NonNull String name, @Nullable String s) {
+        writeShort(createPropertyIndex(name));
+        writeString(s);
+    }
+
+    /**
+     * Writes the given name as the property name, and leaves it to the callee
+     * to fill in value for this property.
+     */
+    public void addPropertyKey(@NonNull String name) {
+        writeShort(createPropertyIndex(name));
+    }
+
+    private short createPropertyIndex(@NonNull String name) {
+        Short index = mPropertyNames.get(name);
+        if (index == null) {
+            index = mPropertyId++;
+            mPropertyNames.put(name, index);
+        }
+
+        return index;
+    }
+
+    private void startPropertyMap() {
+        try {
+            mStream.write(SIG_MAP);
+        } catch (IOException e) {
+            // does not happen since the stream simply wraps a ByteArrayOutputStream
+        }
+    }
+
+    private void endPropertyMap() {
+        writeShort(SIG_END_MAP);
+    }
+
+    private void writeBoolean(boolean v) {
+        try {
+            mStream.write(SIG_BOOLEAN);
+            mStream.write(v ? 1 : 0);
+        } catch (IOException e) {
+            // does not happen since the stream simply wraps a ByteArrayOutputStream
+        }
+    }
+
+    private void writeShort(short s) {
+        try {
+            mStream.write(SIG_SHORT);
+            mStream.writeShort(s);
+        } catch (IOException e) {
+            // does not happen since the stream simply wraps a ByteArrayOutputStream
+        }
+    }
+
+    private void writeInt(int i) {
+        try {
+            mStream.write(SIG_INT);
+            mStream.writeInt(i);
+        } catch (IOException e) {
+            // does not happen since the stream simply wraps a ByteArrayOutputStream
+        }
+    }
+
+    private void writeFloat(float v) {
+        try {
+            mStream.write(SIG_FLOAT);
+            mStream.writeFloat(v);
+        } catch (IOException e) {
+            // does not happen since the stream simply wraps a ByteArrayOutputStream
+        }
+    }
+
+    private void writeString(@Nullable String s) {
+        if (s == null) {
+            s = "";
+        }
+
+        try {
+            mStream.write(SIG_STRING);
+            byte[] bytes = s.getBytes(mCharset);
+
+            short len = (short)Math.min(bytes.length, Short.MAX_VALUE);
+            mStream.writeShort(len);
+
+            mStream.write(bytes, 0, len);
+        } catch (IOException e) {
+            // does not happen since the stream simply wraps a ByteArrayOutputStream
+        }
+    }
+}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 4158340..57c6cbf 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -76,6 +76,7 @@
 
 import com.android.internal.R;
 import com.android.internal.os.SomeArgs;
+import com.android.internal.policy.PhoneFallbackEventHandler;
 import com.android.internal.util.ScreenShapeHelper;
 import com.android.internal.view.BaseSurfaceHolder;
 import com.android.internal.view.RootViewSurfaceTaker;
@@ -173,6 +174,9 @@
     // so the window should no longer be active.
     boolean mStopped = false;
 
+    // Set to true to stop input during an Activity Transition.
+    boolean mPausedForTransition = false;
+
     boolean mLastInCompatMode = false;
 
     SurfaceHolder.Callback2 mSurfaceHolderCallback;
@@ -653,6 +657,10 @@
         return (mWindowAttributes.flags & WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE) != 0;
     }
 
+    public int getWindowFlags() {
+        return mWindowAttributes.flags;
+    }
+
     public CharSequence getTitle() {
         return mWindowAttributes.getTitle();
     }
@@ -977,15 +985,25 @@
         return null;
     }
 
-    void setStopped(boolean stopped) {
+    void setWindowStopped(boolean stopped) {
         if (mStopped != stopped) {
             mStopped = stopped;
-            if (!stopped) {
+            if (!mStopped) {
                 scheduleTraversals();
             }
         }
     }
 
+    /**
+     * Block the input events during an Activity Transition. The KEYCODE_BACK event is allowed
+     * through to allow quick reversal of the Activity Transition.
+     *
+     * @param paused true to pause, false to resume.
+     */
+    public void setPausedForTransition(boolean paused) {
+        mPausedForTransition = paused;
+    }
+
     @Override
     public ViewParent getParent() {
         return null;
@@ -2322,10 +2340,8 @@
      * @hide
      */
     void outputDisplayList(View view) {
-        RenderNode renderNode = view.getDisplayList();
-        if (renderNode != null) {
-            renderNode.output();
-        }
+        RenderNode renderNode = view.updateDisplayListIfDirty();
+        renderNode.output();
     }
 
     /**
@@ -3634,8 +3650,9 @@
             if (mView == null || !mAdded) {
                 Slog.w(TAG, "Dropping event due to root view being removed: " + q.mEvent);
                 return true;
-            } else if ((!mAttachInfo.mHasWindowFocus || mStopped)
-                    && !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
+            } else if ((!mAttachInfo.mHasWindowFocus
+                    && !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) || mStopped
+                    || (mPausedForTransition && !isBack(q.mEvent))) {
                 // This is a focus event and the window doesn't currently have input focus or
                 // has stopped. This could be an event that came back from the previous stage
                 // but the window has lost focus or stopped in the meantime.
@@ -3658,6 +3675,14 @@
                 mNext.dump(prefix, writer);
             }
         }
+
+        private boolean isBack(InputEvent event) {
+            if (event instanceof KeyEvent) {
+                return ((KeyEvent) event).getKeyCode() == KeyEvent.KEYCODE_BACK;
+            } else {
+                return false;
+            }
+        }
     }
 
     /**
@@ -6225,7 +6250,7 @@
 
     @Override
     public boolean requestSendAccessibilityEvent(View child, AccessibilityEvent event) {
-        if (mView == null) {
+        if (mView == null || mStopped || mPausedForTransition) {
             return false;
         }
         // Intercept accessibility focus events fired by virtual nodes to keep
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
new file mode 100644
index 0000000..8dc49acd
--- /dev/null
+++ b/core/java/android/view/ViewStructure.java
@@ -0,0 +1,86 @@
+/*
+ * 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.view;
+
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.text.TextPaint;
+
+/**
+ * Container for storing additional per-view data generated by {@link View#onProvideStructure
+ * View.onProvideStructure}.
+ */
+public abstract class ViewStructure {
+    public abstract void setId(int id, String packageName, String typeName, String entryName);
+
+    public abstract void setDimens(int left, int top, int scrollX, int scrollY, int width,
+            int height);
+
+    public abstract void setVisibility(int visibility);
+
+    /** @hide */
+    public abstract void setAssistBlocked(boolean state);
+
+    public abstract void setEnabled(boolean state);
+
+    public abstract void setClickable(boolean state);
+
+    public abstract void setLongClickable(boolean state);
+
+    public abstract void setStylusButtonPressable(boolean state);
+
+    public abstract void setFocusable(boolean state);
+
+    public abstract void setFocused(boolean state);
+
+    public abstract void setAccessibilityFocused(boolean state);
+
+    public abstract void setCheckable(boolean state);
+
+    public abstract void setChecked(boolean state);
+
+    public abstract void setSelected(boolean state);
+
+    public abstract void setActivated(boolean state);
+
+    public abstract void setClassName(String className);
+
+    public abstract void setContentDescription(CharSequence contentDescription);
+
+    public abstract void setText(CharSequence text);
+    public abstract void setText(CharSequence text, int selectionStart, int selectionEnd);
+    public abstract void setTextPaint(TextPaint paint);
+    public abstract void setHint(CharSequence hint);
+
+    public abstract CharSequence getText();
+    public abstract int getTextSelectionStart();
+    public abstract int getTextSelectionEnd();
+    public abstract CharSequence getHint();
+
+    public abstract Bundle getExtras();
+    public abstract boolean hasExtras();
+
+    public abstract void setChildCount(int num);
+    public abstract int getChildCount();
+    public abstract ViewAssistStructure newChild(int index);
+
+    public abstract ViewAssistStructure asyncNewChild(int index);
+    public abstract void asyncCommit();
+
+    /** @hide */
+    public abstract Rect getTempRect();
+}
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index e983910..2797b6e 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -16,11 +16,11 @@
 
 package android.view;
 
+import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.app.Presentation;
 import android.content.Context;
 import android.content.pm.ActivityInfo;
-import android.graphics.Insets;
 import android.graphics.PixelFormat;
 import android.graphics.Rect;
 import android.os.IBinder;
@@ -1119,6 +1119,15 @@
         public static final int PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS = 0x00000800;
 
         /**
+         * Flag to force the status bar window to be visible all the time. If the bar is hidden when
+         * this flag is set it will be shown again and the bar will have a transparent background.
+         * This can only be set by {@link LayoutParams#TYPE_STATUS_BAR}.
+         *
+         * {@hide}
+         */
+        public static final int PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT = 0x00001000;
+
+        /**
          * Control flags that are private to the platform.
          * @hide
          */
@@ -2066,5 +2075,18 @@
         }
 
         private CharSequence mTitle = "";
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+
+            encoder.addProperty("x", x);
+            encoder.addProperty("y", y);
+            encoder.addProperty("horizontalWeight", horizontalWeight);
+            encoder.addProperty("verticalWeight", verticalWeight);
+            encoder.addProperty("type", type);
+            encoder.addProperty("flags", flags);
+        }
     }
 }
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 57558ff..e7a7ba8 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -21,7 +21,6 @@
 import android.content.ComponentCallbacks2;
 import android.content.Context;
 import android.content.res.Configuration;
-import android.os.Build;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -552,7 +551,7 @@
             for (int i = 0; i < count; i++) {
                 if (token == null || mParams.get(i).token == token) {
                     ViewRootImpl root = mRoots.get(i);
-                    root.setStopped(stopped);
+                    root.setWindowStopped(stopped);
                 }
             }
         }
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 417e22c..b0dbeca 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -684,6 +684,11 @@
     public static final int TYPE_WINDOWS_CHANGED = 0x00400000;
 
     /**
+     * Represents the event of a stylus button press on a {@link android.view.View}.
+     */
+    public static final int TYPE_VIEW_STYLUS_BUTTON_PRESSED = 0x00800000;
+
+    /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
      * The type of change is not defined.
      */
@@ -731,6 +736,7 @@
      * @see #TYPE_TOUCH_INTERACTION_START
      * @see #TYPE_TOUCH_INTERACTION_END
      * @see #TYPE_WINDOWS_CHANGED
+     * @see #TYPE_VIEW_STYLUS_BUTTON_PRESSED
      */
     public static final int TYPES_ALL_MASK = 0xFFFFFFFF;
 
@@ -1396,6 +1402,14 @@
                     builder.append("TYPE_WINDOWS_CHANGED");
                     eventTypeCount++;
                 } break;
+                case TYPE_VIEW_STYLUS_BUTTON_PRESSED: {
+                    if (eventTypeCount > 0) {
+                        builder.append(", ");
+                    }
+                    builder.append("TYPE_VIEW_STYLUS_BUTTON_PRESSED");
+                    eventTypeCount++;
+                }
+                    break;
             }
         }
         if (eventTypeCount > 1) {
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 0736ed8..c785149 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -520,6 +520,8 @@
 
     private static final int BOOLEAN_PROPERTY_CONTENT_INVALID = 0x00010000;
 
+    private static final int BOOLEAN_PROPERTY_STYLUS_BUTTON_PRESSABLE = 0x00020000;
+
     /**
      * Bits that provide the id of a virtual descendant of a view.
      */
@@ -1930,6 +1932,30 @@
     }
 
     /**
+     * Gets whether this node is stylus button pressable.
+     *
+     * @return True if the node is stylus button pressable.
+     */
+    public boolean isStylusButtonPressable() {
+        return getBooleanProperty(BOOLEAN_PROPERTY_STYLUS_BUTTON_PRESSABLE);
+    }
+
+    /**
+     * Sets whether this node is stylus button pressable.
+     * <p>
+     * <strong>Note:</strong> Cannot be called from an
+     * {@link android.accessibilityservice.AccessibilityService}. This class is made immutable
+     * before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param stylusButtonPressable True if the node is stylus button pressable.
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    public void setStylusButtonPressable(boolean stylusButtonPressable) {
+        setBooleanProperty(BOOLEAN_PROPERTY_STYLUS_BUTTON_PRESSABLE, stylusButtonPressable);
+    }
+
+    /**
      * Gets the node's live region mode.
      * <p>
      * A live region is a node that contains information that is important for
@@ -3117,6 +3143,7 @@
         builder.append("; selected: ").append(isSelected());
         builder.append("; clickable: ").append(isClickable());
         builder.append("; longClickable: ").append(isLongClickable());
+        builder.append("; stylusButtonPressable: ").append(isStylusButtonPressable());
         builder.append("; enabled: ").append(isEnabled());
         builder.append("; password: ").append(isPassword());
         builder.append("; scrollable: ").append(isScrollable());
@@ -3472,6 +3499,36 @@
         public static final AccessibilityAction ACTION_SCROLL_TO_POSITION =
                 new AccessibilityAction(R.id.accessibilityActionScrollToPosition, null);
 
+        /**
+         * Action to scroll the node content up.
+         */
+        public static final AccessibilityAction ACTION_SCROLL_UP =
+                new AccessibilityAction(R.id.accessibilityActionScrollUp, null);
+
+        /**
+         * Action to scroll the node content left.
+         */
+        public static final AccessibilityAction ACTION_SCROLL_LEFT =
+                new AccessibilityAction(R.id.accessibilityActionScrollLeft, null);
+
+        /**
+         * Action to scroll the node content down.
+         */
+        public static final AccessibilityAction ACTION_SCROLL_DOWN =
+                new AccessibilityAction(R.id.accessibilityActionScrollDown, null);
+
+        /**
+         * Action to scroll the node content right.
+         */
+         public static final AccessibilityAction ACTION_SCROLL_RIGHT =
+                new AccessibilityAction(R.id.accessibilityActionScrollRight, null);
+
+        /**
+         * Action that stylus button presses the node.
+         */
+        public static final AccessibilityAction ACTION_STYLUS_BUTTON_PRESS =
+                new AccessibilityAction(R.id.accessibilityActionStylusButtonPress, null);
+
         private static final ArraySet<AccessibilityAction> sStandardActions = new ArraySet<>();
         static {
             sStandardActions.add(ACTION_FOCUS);
@@ -3498,6 +3555,11 @@
             sStandardActions.add(ACTION_SET_TEXT);
             sStandardActions.add(ACTION_SHOW_ON_SCREEN);
             sStandardActions.add(ACTION_SCROLL_TO_POSITION);
+            sStandardActions.add(ACTION_SCROLL_UP);
+            sStandardActions.add(ACTION_SCROLL_LEFT);
+            sStandardActions.add(ACTION_SCROLL_DOWN);
+            sStandardActions.add(ACTION_SCROLL_RIGHT);
+            sStandardActions.add(ACTION_STYLUS_BUTTON_PRESS);
         }
 
         private final int mActionId;
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 78604bf..040fd37 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -247,6 +247,13 @@
     /** @hide */
     public static final int DISPATCH_HANDLED = 1;
 
+    /** @hide */
+    public static final int SHOW_IM_PICKER_MODE_AUTO = 0;
+    /** @hide */
+    public static final int SHOW_IM_PICKER_MODE_INCLUDE_AUXILIARY_SUBTYPES = 1;
+    /** @hide */
+    public static final int SHOW_IM_PICKER_MODE_EXCLUDE_AUXILIARY_SUBTYPES = 2;
+
     final IInputMethodManager mService;
     final Looper mMainLooper;
     
@@ -1890,9 +1897,28 @@
         }
     }
 
+    /**
+     * Shows the input method chooser dialog.
+     *
+     * @param showAuxiliarySubtypes Set true to show auxiliary input methods.
+     * @hide
+     */
+    public void showInputMethodPicker(boolean showAuxiliarySubtypes) {
+        synchronized (mH) {
+            try {
+                final int mode = showAuxiliarySubtypes ?
+                        SHOW_IM_PICKER_MODE_INCLUDE_AUXILIARY_SUBTYPES:
+                        SHOW_IM_PICKER_MODE_EXCLUDE_AUXILIARY_SUBTYPES;
+                mService.showInputMethodPickerFromClient(mClient, mode);
+            } catch (RemoteException e) {
+                Log.w(TAG, "IME died: " + mCurId, e);
+            }
+        }
+    }
+
     private void showInputMethodPickerLocked() {
         try {
-            mService.showInputMethodPickerFromClient(mClient);
+            mService.showInputMethodPickerFromClient(mClient, SHOW_IM_PICKER_MODE_AUTO);
         } catch (RemoteException e) {
             Log.w(TAG, "IME died: " + mCurId, e);
         }
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 7ab5aaa..e27e253 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -16,6 +16,7 @@
 
 package android.webkit;
 
+import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.annotation.Widget;
 import android.content.Context;
@@ -40,9 +41,10 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.ViewTreeObserver;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -2426,7 +2428,7 @@
     }
 
     @Override
-    public void onProvideVirtualAssistStructure(ViewAssistStructure structure) {
+    public void onProvideVirtualStructure(ViewStructure structure) {
         mProvider.getViewDelegate().onProvideVirtualAssistStructure(structure);
     }
 
@@ -2576,4 +2578,18 @@
         super.onFinishTemporaryDetach();
         mProvider.getViewDelegate().onFinishTemporaryDetach();
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+
+        checkThread();
+        encoder.addProperty("webview:contentHeight", mProvider.getContentHeight());
+        encoder.addProperty("webview:contentWidth", mProvider.getContentWidth());
+        encoder.addProperty("webview:scale", mProvider.getScale());
+        encoder.addProperty("webview:title", mProvider.getTitle());
+        encoder.addProperty("webview:url", mProvider.getUrl());
+        encoder.addProperty("webview:originalUrl", mProvider.getOriginalUrl());
+    }
 }
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index d5787de..e367192 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -32,7 +32,7 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewGroup.LayoutParams;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -299,7 +299,7 @@
     interface ViewDelegate {
         public boolean shouldDelayChildPressedState();
 
-        public void onProvideVirtualAssistStructure(ViewAssistStructure structure);
+        public void onProvideVirtualAssistStructure(ViewStructure structure);
 
         public AccessibilityNodeProvider getAccessibilityNodeProvider();
 
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index c9d9a8c..9903b7e 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -18,6 +18,7 @@
 
 import android.annotation.ColorInt;
 import android.annotation.DrawableRes;
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.TypedArray;
@@ -56,6 +57,7 @@
 import android.view.ViewConfiguration;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.ViewParent;
 import android.view.ViewTreeObserver;
 import android.view.accessibility.AccessibilityEvent;
@@ -1506,10 +1508,12 @@
         if (isEnabled()) {
             if (canScrollUp()) {
                 info.addAction(AccessibilityAction.ACTION_SCROLL_BACKWARD);
+                info.addAction(AccessibilityAction.ACTION_SCROLL_UP);
                 info.setScrollable(true);
             }
             if (canScrollDown()) {
                 info.addAction(AccessibilityAction.ACTION_SCROLL_FORWARD);
+                info.addAction(AccessibilityAction.ACTION_SCROLL_DOWN);
                 info.setScrollable(true);
             }
         }
@@ -1537,14 +1541,16 @@
             return true;
         }
         switch (action) {
-            case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
+            case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD:
+            case R.id.accessibilityActionScrollDown: {
                 if (isEnabled() && getLastVisiblePosition() < getCount() - 1) {
                     final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom;
                     smoothScrollBy(viewportHeight, PositionScroller.SCROLL_DURATION);
                     return true;
                 }
             } return false;
-            case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
+            case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD:
+            case R.id.accessibilityActionScrollUp: {
                 if (isEnabled() && mFirstPosition > 0) {
                     final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom;
                     smoothScrollBy(-viewportHeight, PositionScroller.SCROLL_DURATION);
@@ -3638,11 +3644,8 @@
 
         startNestedScroll(SCROLL_AXIS_VERTICAL);
 
-        if (mFastScroll != null) {
-            boolean intercepted = mFastScroll.onTouchEvent(ev);
-            if (intercepted) {
-                return true;
-            }
+        if (mFastScroll != null && mFastScroll.onTouchEvent(ev)) {
+            return true;
         }
 
         initVelocityTrackerIfNotExists();
@@ -6329,6 +6332,16 @@
         public LayoutParams(ViewGroup.LayoutParams source) {
             super(source);
         }
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+
+            encoder.addProperty("list:viewType", viewType);
+            encoder.addProperty("list:recycledHeaderFooter", recycledHeaderFooter);
+            encoder.addProperty("list:forceAdd", forceAdd);
+        }
     }
 
     /**
@@ -6911,6 +6924,25 @@
         }
     }
 
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+
+        encoder.addProperty("drawing:cacheColorHint", getCacheColorHint());
+        encoder.addProperty("list:fastScrollEnabled", isFastScrollEnabled());
+        encoder.addProperty("list:scrollingCacheEnabled", isScrollingCacheEnabled());
+        encoder.addProperty("list:smoothScrollbarEnabled", isSmoothScrollbarEnabled());
+        encoder.addProperty("list:stackFromBottom", isStackFromBottom());
+        encoder.addProperty("list:textFilterEnabled", isTextFilterEnabled());
+
+        View selectedView = getSelectedView();
+        if (selectedView != null) {
+            encoder.addPropertyKey("selectedView");
+            selectedView.encode(encoder);
+        }
+    }
+
     /**
      * Abstract positon scroller used to handle smooth scrolling.
      */
diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java
index e0b0e1f..f08141c 100644
--- a/core/java/android/widget/ActionMenuPresenter.java
+++ b/core/java/android/widget/ActionMenuPresenter.java
@@ -61,6 +61,7 @@
         implements ActionProvider.SubUiVisibilityListener {
     private static final String TAG = "ActionMenuPresenter";
     private static final int ITEM_ANIMATION_DURATION = 150;
+    private static final boolean ACTIONBAR_ANIMATIONS_ENABLED = false;
 
     private OverflowMenuButton mOverflowButton;
     private boolean mReserveOverflow;
@@ -414,7 +415,7 @@
     @Override
     public void updateMenuView(boolean cleared) {
         final ViewGroup menuViewParent = (ViewGroup) ((View) mMenuView).getParent();
-        if (menuViewParent != null) {
+        if (menuViewParent != null && ACTIONBAR_ANIMATIONS_ENABLED) {
             setupItemAnimations();
         }
         super.updateMenuView(cleared);
diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java
index d6f2276..278a8fb 100644
--- a/core/java/android/widget/ActionMenuView.java
+++ b/core/java/android/widget/ActionMenuView.java
@@ -15,6 +15,7 @@
  */
 package android.widget;
 
+import android.annotation.NonNull;
 import android.annotation.StyleRes;
 import android.content.Context;
 import android.content.res.ColorStateList;
@@ -28,6 +29,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.accessibility.AccessibilityEvent;
 import com.android.internal.view.menu.ActionMenuItemView;
 import com.android.internal.view.menu.MenuBuilder;
@@ -835,5 +837,17 @@
             super(width, height);
             this.isOverflowButton = isOverflowButton;
         }
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+
+            encoder.addProperty("layout:overFlowButton", isOverflowButton);
+            encoder.addProperty("layout:cellsUsed", cellsUsed);
+            encoder.addProperty("layout:extraPixels", extraPixels);
+            encoder.addProperty("layout:expandable", expandable);
+            encoder.addProperty("layout:preventEdgeOffset", preventEdgeOffset);
+        }
     }
 }
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index 72cb0b5..54e3996 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.database.DataSetObserver;
@@ -29,6 +30,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -1245,4 +1247,16 @@
             }
         }
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+
+        encoder.addProperty("scrolling:firstPosition", mFirstPosition);
+        encoder.addProperty("list:nextSelectedPosition", mNextSelectedPosition);
+        encoder.addProperty("list:nextSelectedRowId", mNextSelectedRowId);
+        encoder.addProperty("list:selectedPosition", mSelectedPosition);
+        encoder.addProperty("list:itemCount", mItemCount);
+    }
 }
diff --git a/core/java/android/widget/CalendarViewLegacyDelegate.java b/core/java/android/widget/CalendarViewLegacyDelegate.java
index 6ab3828..442fb33 100644
--- a/core/java/android/widget/CalendarViewLegacyDelegate.java
+++ b/core/java/android/widget/CalendarViewLegacyDelegate.java
@@ -713,7 +713,7 @@
         for (int i = 1, count = mDayNamesHeader.getChildCount(); i < count; i++) {
             label = (TextView) mDayNamesHeader.getChildAt(i);
             if (mWeekDayTextAppearanceResId > -1) {
-                label.setTextAppearance(mContext, mWeekDayTextAppearanceResId);
+                label.setTextAppearance(mWeekDayTextAppearanceResId);
             }
             if (i < mDaysPerWeek + 1) {
                 label.setText(mDayNamesShort[i - 1]);
diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java
index 22e079c..6b4b2c7 100644
--- a/core/java/android/widget/CheckedTextView.java
+++ b/core/java/android/widget/CheckedTextView.java
@@ -16,6 +16,8 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
+import android.view.ViewHierarchyEncoder;
 import com.android.internal.R;
 
 import android.annotation.DrawableRes;
@@ -459,4 +461,11 @@
         info.setCheckable(true);
         info.setChecked(mChecked);
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder stream) {
+        super.encodeProperties(stream);
+        stream.addProperty("text:checked", isChecked());
+    }
 }
diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java
index f2afeeb..770077d 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -17,8 +17,10 @@
 package android.widget;
 
 import android.annotation.DrawableRes;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.graphics.PorterDuff;
+import android.view.ViewHierarchyEncoder;
 import com.android.internal.R;
 
 import android.content.Context;
@@ -530,9 +532,16 @@
     @Override
     public void onRestoreInstanceState(Parcelable state) {
         SavedState ss = (SavedState) state;
-  
+
         super.onRestoreInstanceState(ss.getSuperState());
         setChecked(ss.checked);
         requestLayout();
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder stream) {
+        super.encodeProperties(stream);
+        stream.addProperty("checked", isChecked());
+    }
 }
diff --git a/core/java/android/widget/CursorAdapter.java b/core/java/android/widget/CursorAdapter.java
index 30c74c0..d8ce60c 100644
--- a/core/java/android/widget/CursorAdapter.java
+++ b/core/java/android/widget/CursorAdapter.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.WorkerThread;
 import android.content.Context;
 import android.content.res.Resources;
 import android.database.ContentObserver;
@@ -425,6 +426,7 @@
      * @see #getFilterQueryProvider()
      * @see #setFilterQueryProvider(android.widget.FilterQueryProvider)
      */
+    @WorkerThread
     public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
         if (mFilterQueryProvider != null) {
             return mFilterQueryProvider.runQuery(constraint);
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 35e7389..4fd85b6 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -318,6 +318,7 @@
         }
 
         getPositionListener().addSubscriber(mCursorAnchorInfoNotifier, true);
+        resumeBlink();
     }
 
     void onDetachedFromWindow() {
@@ -327,9 +328,7 @@
             hideError();
         }
 
-        if (mBlink != null) {
-            mBlink.removeCallbacks(mBlink);
-        }
+        suspendBlink();
 
         if (mInsertionPointCursorController != null) {
             mInsertionPointCursorController.onDetached();
@@ -578,7 +577,12 @@
     }
 
     private void hideCursorControllers() {
-        if (mSuggestionsPopupWindow != null && !mSuggestionsPopupWindow.isShowingUp()) {
+        // When mTextView is not ExtractEditText, we need to distinguish two kinds of focus-lost.
+        // One is the true focus lost where suggestions pop-up (if any) should be dismissed, and the
+        // other is an side effect of showing the suggestions pop-up itself. We use isShowingUp()
+        // to distinguish one from the other.
+        if (mSuggestionsPopupWindow != null && ((mTextView instanceof ExtractEditText) ||
+                !mSuggestionsPopupWindow.isShowingUp())) {
             // Should be done before hide insertion point controller since it triggers a show of it
             mSuggestionsPopupWindow.hide();
         }
@@ -684,44 +688,101 @@
     private int getWordStart(int offset) {
         // FIXME - For this and similar methods we're not doing anything to check if there's
         // a LocaleSpan in the text, this may be something we should try handling or checking for.
-        int retOffset = getWordIteratorWithText().getBeginning(offset);
-        if (retOffset == BreakIterator.DONE) retOffset = offset;
-        return retOffset;
-    }
-
-    private int getWordEnd(int offset, boolean includePunctuation) {
-        int retOffset = getWordIteratorWithText().getEnd(offset);
-        if (retOffset == BreakIterator.DONE) {
-            retOffset = offset;
-        } else if (includePunctuation) {
-            retOffset = handlePunctuation(retOffset);
-        }
-        return retOffset;
-    }
-
-    private boolean isEndBoundary(int offset) {
-        int thisEnd = getWordEnd(offset, false);
-        return offset == thisEnd;
-    }
-
-    private boolean isStartBoundary(int offset) {
-        int thisStart = getWordStart(offset);
-        return thisStart == offset;
-    }
-
-    private int handlePunctuation(int offset) {
-        // FIXME - Check with UX how repeated ending punctuation should be handled.
-        // FIXME - Check with UX if / how we would handle non sentence ending characters.
-        // FIXME - Consider punctuation in different languages.
-        CharSequence text = mTextView.getText();
-        if (offset < text.length()) {
-            int c = Character.codePointAt(text, offset);
-            if (c == 0x002e /* period */|| c == 0x003f /* question mark */
-                    || c == 0x0021 /* exclamation mark */) {
-                offset = Character.offsetByCodePoints(text, offset, 1);
+        int retOffset = getWordIteratorWithText().prevBoundary(offset);
+        if (isPunctBoundaryBehind(retOffset, true /* isStart */)) {
+            // If we're on a punctuation boundary we should continue to get the
+            // previous offset until we're not longer on a punctuation boundary.
+            retOffset = getWordIteratorWithText().prevBoundary(retOffset);
+            while (!isPunctBoundaryBehind(retOffset, false /* isStart */)
+                    && retOffset != BreakIterator.DONE) {
+                retOffset = getWordIteratorWithText().prevBoundary(retOffset);
             }
         }
-        return offset;
+        if (retOffset == BreakIterator.DONE) {
+            return offset;
+        }
+        return retOffset;
+    }
+
+    private int getWordEnd(int offset) {
+        int retOffset = getWordIteratorWithText().nextBoundary(offset);
+        if (isPunctBoundaryForward(retOffset, true /* isStart */)) {
+            // If we're on a punctuation boundary we should continue to get the
+            // next offset until we're no longer on a punctuation boundary.
+            retOffset = getWordIteratorWithText().nextBoundary(retOffset);
+            while (!isPunctBoundaryForward(retOffset, false /* isStart */)
+                    && retOffset != BreakIterator.DONE) {
+                retOffset = getWordIteratorWithText().nextBoundary(retOffset);
+            }
+        }
+        if (retOffset == BreakIterator.DONE) {
+            return offset;
+        }
+        return retOffset;
+    }
+
+    /**
+     * Checks for punctuation boundaries for the provided offset and the
+     * previous character.
+     *
+     * @param offset The offset to check from.
+     * @param isStart Whether the boundary being checked for is at the start or
+     *            end of a punctuation sequence.
+     * @return Whether this is a punctuation boundary.
+     */
+    private boolean isPunctBoundaryBehind(int offset, boolean isStart) {
+        CharSequence text = mTextView.getText();
+        if (offset == BreakIterator.DONE || offset > text.length() || offset == 0) {
+            return false;
+        }
+        int cp = Character.codePointAt(text, offset);
+        int prevCp = Character.codePointBefore(text, offset);
+
+        if (isPunctuation(cp)) {
+            // If it's the start, the current cp and the prev cp are
+            // punctuation. If it's at the end of a punctuation sequence the
+            // current is punctuation and the prev is not.
+            return isStart ? isPunctuation(prevCp) : !isPunctuation(prevCp);
+        }
+        return false;
+    }
+
+    /**
+     * Checks for punctuation boundaries for the provided offset and the next
+     * character.
+     *
+     * @param offset The offset to check from.
+     * @param isStart Whether the boundary being checked for is at the start or
+     *            end of a punctuation sequence.
+     * @return Whether this is a punctuation boundary.
+     */
+    private boolean isPunctBoundaryForward(int offset, boolean isStart) {
+        CharSequence text = mTextView.getText();
+        if (offset == BreakIterator.DONE || offset > text.length() || offset == 0) {
+            return false;
+        }
+        int cp = Character.codePointBefore(text, offset);
+        int nextCpOffset = Math.min(offset + Character.charCount(cp), text.length() - 1);
+        int nextCp = Character.codePointBefore(text, nextCpOffset);
+
+        if (isPunctuation(cp)) {
+            // If it's the start, the current cp and the next cp are
+            // punctuation. If it's at the end of a punctuation sequence the
+            // current is punctuation and the next is not.
+            return isStart ? isPunctuation(nextCp) : !isPunctuation(nextCp);
+        }
+        return false;
+    }
+
+    private boolean isPunctuation(int cp) {
+        int type = Character.getType(cp);
+        return (type == Character.CONNECTOR_PUNCTUATION ||
+                type == Character.DASH_PUNCTUATION ||
+                type == Character.END_PUNCTUATION ||
+                type == Character.FINAL_QUOTE_PUNCTUATION ||
+                type == Character.INITIAL_QUOTE_PUNCTUATION ||
+                type == Character.OTHER_PUNCTUATION ||
+                type == Character.START_PUNCTUATION);
     }
 
     /**
@@ -784,7 +845,7 @@
             if (selectionStart == BreakIterator.DONE || selectionEnd == BreakIterator.DONE ||
                     selectionStart == selectionEnd) {
                 // Possible when the word iterator does not properly handle the text's language
-                long range = getCharRange(minOffset);
+                long range = getCharClusterRange(minOffset);
                 selectionStart = TextUtils.unpackRangeStartFromLong(range);
                 selectionEnd = TextUtils.unpackRangeEndFromLong(range);
             }
@@ -827,29 +888,25 @@
         return mWordIteratorWithText;
     }
 
-    private long getCharRange(int offset) {
+    private int getNextCursorOffset(int offset, boolean findAfterGivenOffset) {
+        final Layout layout = mTextView.getLayout();
+        if (layout == null) return offset;
+        final CharSequence text = mTextView.getText();
+        final int nextOffset = layout.getPaint().getTextRunCursor(text, 0, text.length(),
+                layout.isRtlCharAt(offset) ? Paint.DIRECTION_RTL : Paint.DIRECTION_LTR,
+                offset, findAfterGivenOffset ? Paint.CURSOR_AFTER : Paint.CURSOR_BEFORE);
+        return nextOffset == -1 ? offset : nextOffset;
+    }
+
+    private long getCharClusterRange(int offset) {
         final int textLength = mTextView.getText().length();
-        if (offset + 1 < textLength) {
-            final char currentChar = mTextView.getText().charAt(offset);
-            final char nextChar = mTextView.getText().charAt(offset + 1);
-            if (Character.isSurrogatePair(currentChar, nextChar)) {
-                return TextUtils.packRangeInLong(offset,  offset + 2);
-            }
-        }
         if (offset < textLength) {
-            return TextUtils.packRangeInLong(offset,  offset + 1);
-        }
-        if (offset - 2 >= 0) {
-            final char previousChar = mTextView.getText().charAt(offset - 1);
-            final char previousPreviousChar = mTextView.getText().charAt(offset - 2);
-            if (Character.isSurrogatePair(previousPreviousChar, previousChar)) {
-                return TextUtils.packRangeInLong(offset - 2,  offset);
-            }
+            return TextUtils.packRangeInLong(offset, getNextCursorOffset(offset, true));
         }
         if (offset - 1 >= 0) {
-            return TextUtils.packRangeInLong(offset - 1,  offset);
+            return TextUtils.packRangeInLong(getNextCursorOffset(offset, false), offset);
         }
-        return TextUtils.packRangeInLong(offset,  offset);
+        return TextUtils.packRangeInLong(offset, offset);
     }
 
     private boolean touchPositionIsInSelection() {
@@ -1397,12 +1454,11 @@
             InputMethodManager imm = InputMethodManager.peekInstance();
             if (imm != null) {
                 if (imm.isActive(mTextView)) {
-                    boolean reported = false;
                     if (ims.mContentChanged || ims.mSelectionModeChanged) {
                         // We are in extract mode and the content has changed
                         // in some way... just report complete new text to the
                         // input method.
-                        reported = reportExtractedText();
+                        reportExtractedText();
                     }
                 }
             }
@@ -1919,10 +1975,6 @@
         mSuggestionsPopupWindow.show();
     }
 
-    boolean areSuggestionsShown() {
-        return mSuggestionsPopupWindow != null && mSuggestionsPopupWindow.isShowing();
-    }
-
     void onScrollChanged() {
         if (mPositionListener != null) {
             mPositionListener.onScrollChanged();
@@ -2003,7 +2055,7 @@
         shadowView.setText(text);
         shadowView.setTextColor(mTextView.getTextColors());
 
-        shadowView.setTextAppearance(mTextView.getContext(), R.styleable.Theme_textAppearanceLarge);
+        shadowView.setTextAppearance(R.styleable.Theme_textAppearanceLarge);
         shadowView.setGravity(Gravity.CENTER);
 
         shadowView.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
@@ -2422,7 +2474,8 @@
         public PinnedPopupWindow() {
             createPopupWindow();
 
-            mPopupWindow.setWindowLayoutType(WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL);
+            mPopupWindow.setWindowLayoutType(
+                    WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL);
             mPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
             mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
 
@@ -3903,13 +3956,9 @@
         public void updatePosition(float x, float y) {
             final int trueOffset = mTextView.getOffsetForPosition(x, y);
             final int currLine = mTextView.getLineAtCoordinate(y);
-
-            // Don't select white space on different lines.
-            if (isWhitespaceLine(mPrevLine, currLine, trueOffset)) return;
-
             boolean positionCursor = false;
             int offset = trueOffset;
-            int end = getWordEnd(offset, true);
+            int end = getWordEnd(offset);
             int start = getWordStart(offset);
 
             if (offset < mPreviousOffset) {
@@ -3925,16 +3974,16 @@
                     }
                 }
                 mTouchWordOffset = Math.max(trueOffset - offset, 0);
-                mInWord = !isStartBoundary(offset);
                 positionCursor = true;
-            } else if (offset - mTouchWordOffset > mPreviousOffset) {
+            } else if (offset - mTouchWordOffset > mPreviousOffset || currLine > mPrevLine) {
                 // User is shrinking the selection.
                 if (currLine > mPrevLine) {
                     // We're on a different line, so we'll snap to word boundaries.
-                    offset = end;
+                    offset = start;
+                    mTouchWordOffset = Math.max(trueOffset - offset, 0);
+                } else {
+                    offset -= mTouchWordOffset;
                 }
-                offset -= mTouchWordOffset;
-                mInWord = !isEndBoundary(offset);
                 positionCursor = true;
             }
 
@@ -3946,11 +3995,13 @@
                     int alteredOffset = mTextView.getOffsetAtCoordinate(mPrevLine, x);
                     if (alteredOffset >= selectionEnd) {
                         // Can't pass the other drag handle.
-                        offset = Math.max(0, selectionEnd - 1);
+                        offset = getNextCursorOffset(selectionEnd, false);
                     } else {
                         offset = alteredOffset;
                     }
+                    mTouchWordOffset = 0;
                 }
+                mInWord = !getWordIteratorWithText().isBoundary(offset);
                 positionAtCursorOffset(offset, false);
             }
         }
@@ -4005,14 +4056,9 @@
         public void updatePosition(float x, float y) {
             final int trueOffset = mTextView.getOffsetForPosition(x, y);
             final int currLine = mTextView.getLineAtCoordinate(y);
-
-            // Don't select white space on different lines.
-            if (isWhitespaceLine(mPrevLine, currLine, trueOffset)) return;
-
             int offset = trueOffset;
             boolean positionCursor = false;
-
-            int end = getWordEnd(offset, true);
+            int end = getWordEnd(offset);
             int start = getWordStart(offset);
 
             if (offset > mPreviousOffset) {
@@ -4028,17 +4074,17 @@
                     }
                 }
                 mTouchWordOffset = Math.max(offset - trueOffset, 0);
-                mInWord = !isEndBoundary(offset);
                 positionCursor = true;
-            } else if (offset + mTouchWordOffset < mPreviousOffset) {
+            } else if (offset + mTouchWordOffset < mPreviousOffset || currLine < mPrevLine) {
                 // User is shrinking the selection.
                 if (currLine < mPrevLine) {
                     // We're on a different line, so we'll snap to word boundaries.
-                    offset = start;
+                    offset = end;
+                    mTouchWordOffset = Math.max(offset - trueOffset, 0);
+                } else {
+                    offset += mTouchWordOffset;
                 }
-                offset += mTouchWordOffset;
                 positionCursor = true;
-                mInWord = !isStartBoundary(offset);
             }
 
             if (positionCursor) {
@@ -4049,11 +4095,13 @@
                     int length = mTextView.getText().length();
                     if (alteredOffset <= selectionStart) {
                         // Can't pass the other drag handle.
-                        offset = Math.min(selectionStart + 1, length);
+                        offset = getNextCursorOffset(selectionStart, true);
                     } else {
                         offset = Math.min(alteredOffset, length);
                     }
+                    mTouchWordOffset = 0;
                 }
+                mInWord = !getWordIteratorWithText().isBoundary(offset);
                 positionAtCursorOffset(offset, false);
             }
         }
@@ -4070,36 +4118,6 @@
     }
 
     /**
-     * Checks whether selection is happening on a different line than previous and
-     * if that line only contains whitespace up to the touch location.
-     *
-     * @param prevLine The previous line the selection was on.
-     * @param currLine The current line being selected.
-     * @param offset The offset in the text where the touch occurred.
-     * @return Whether or not it was just a white space line being selected.
-     */
-    private boolean isWhitespaceLine(int prevLine, int currLine, int offset) {
-        if (prevLine == currLine) {
-            // Same line; don't care.
-            return false;
-        }
-        CharSequence text = mTextView.getText();
-        if (offset == text.length()) {
-            // No character at the last position.
-            return false;
-        }
-        int lineEndOffset = mTextView.getLayout().getLineEnd(currLine);
-        for (int cp, i = offset; i < lineEndOffset; i += Character.charCount(cp)) {
-            cp = Character.codePointAt(text, i);
-            if (!Character.isSpaceChar(cp) && !Character.isWhitespace(cp)) {
-                // There are non white space chars on the line.
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
      * A CursorController instance can be used to control a cursor in the text.
      */
     private interface CursorController extends ViewTreeObserver.OnTouchModeChangeListener {
@@ -4178,8 +4196,6 @@
         private int mStartOffset = -1;
         // Indicates whether the user is selecting text and using the drag accelerator.
         private boolean mDragAcceleratorActive;
-        // Indicates the line of text the drag accelerator is on.
-        private int mPrevLine = -1;
 
         SelectionModifierCursorController() {
             resetTouchOffsets();
@@ -4272,8 +4288,6 @@
                         }
                     }
 
-                    // New selection, reset line.
-                    mPrevLine = mTextView.getLineAtCoordinate(y);
                     mDownPositionX = x;
                     mDownPositionY = y;
                     mGestureStayedInTapRegion = true;
@@ -4318,7 +4332,7 @@
                         // We don't start "dragging" until the user is past the initial word that
                         // gets selected on long press.
                         int firstWordStart = getWordStart(mStartOffset);
-                        int firstWordEnd = getWordEnd(mStartOffset, false);
+                        int firstWordEnd = getWordEnd(mStartOffset);
                         if (offset > firstWordEnd || offset < firstWordStart) {
 
                             // Basically the goal in the below code is to have the highlight be
@@ -4330,13 +4344,6 @@
                             if (my > fingerOffset) my -= fingerOffset;
                             offset = mTextView.getOffsetForPosition(mx, my);
 
-                            int currLine = mTextView.getLineAtCoordinate(my);
-
-                            // Don't select white space on different lines.
-                            if (isWhitespaceLine(mPrevLine, currLine, offset)) return;
-
-                            mPrevLine = currLine;
-
                             // Perform the check for closeness at edge of view, if we're very close
                             // don't adjust the offset to be in front of the finger - otherwise the
                             // user can't select words at the edge.
@@ -4365,7 +4372,7 @@
 
                             // Need to adjust start offset based on direction of movement.
                             int newStart = mStartOffset < offset ? getWordStart(mStartOffset)
-                                    : getWordEnd(mStartOffset, true);
+                                    : getWordEnd(mStartOffset);
                             Selection.setSelection((Spannable) mTextView.getText(), newStart,
                                     offset);
                         }
@@ -4620,8 +4627,6 @@
     }
 
     static class InputMethodState {
-        Rect mCursorRectInWindow = new Rect();
-        float[] mTmpOffset = new float[2];
         ExtractedTextRequest mExtractedTextRequest;
         final ExtractedText mExtractedText = new ExtractedText();
         int mBatchEditNesting;
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 552b274..f06f3c21 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -1389,7 +1389,8 @@
                     // to intercept events. If it does, we will receive a CANCEL
                     // event.
                     if (!mList.isInScrollingContainer()) {
-                        beginDrag();
+                        // This will get dispatched to onTouchEvent(). Start
+                        // dragging there.
                         return true;
                     }
 
@@ -1406,6 +1407,8 @@
                     final float pos = getPosFromMotionEvent(mInitialTouchY);
                     scrollTo(pos);
 
+                    // This may get dispatched to onTouchEvent(), but it
+                    // doesn't really matter since we'll already be in a drag.
                     return onTouchEvent(ev);
                 }
                 break;
@@ -1440,6 +1443,15 @@
         }
 
         switch (me.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN: {
+                if (isPointInside(me.getX(), me.getY())) {
+                    if (!mList.isInScrollingContainer()) {
+                        beginDrag();
+                        return true;
+                    }
+                }
+            } break;
+
             case MotionEvent.ACTION_UP: {
                 if (mPendingDrag >= 0) {
                     // Allow a tap to scroll.
diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java
index 0602944..7ca450a 100644
--- a/core/java/android/widget/FrameLayout.java
+++ b/core/java/android/widget/FrameLayout.java
@@ -33,6 +33,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.widget.RemoteViews.RemoteView;
 
 import com.android.internal.R;
@@ -407,6 +408,18 @@
         return FrameLayout.class.getName();
     }
 
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+
+        encoder.addProperty("measurement:measureAllChildren", mMeasureAllChildren);
+        encoder.addProperty("padding:foregroundPaddingLeft", mForegroundPaddingLeft);
+        encoder.addProperty("padding:foregroundPaddingTop", mForegroundPaddingTop);
+        encoder.addProperty("padding:foregroundPaddingRight", mForegroundPaddingRight);
+        encoder.addProperty("padding:foregroundPaddingBottom", mForegroundPaddingBottom);
+    }
+
     /**
      * Per-child layout information for layouts that support margins.
      * See {@link android.R.styleable#FrameLayout_Layout FrameLayout Layout Attributes}
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index c959774..dcaafa5 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -17,6 +17,7 @@
 package android.widget;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.TypedArray;
@@ -31,6 +32,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.ViewRootImpl;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
@@ -2420,4 +2422,11 @@
                 row, 1, column, 1, isHeading, isSelected);
         info.setCollectionItemInfo(itemInfo);
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+        encoder.addProperty("numColumns", getNumColumns());
+    }
 }
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 324c2aa..cf67905 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
@@ -35,11 +36,14 @@
 import android.view.ViewConfiguration;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.ViewParent;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.animation.AnimationUtils;
 
+import com.android.internal.R;
+
 import java.util.List;
 
 /**
@@ -768,7 +772,8 @@
             return true;
         }
         switch (action) {
-            case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
+            case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD:
+            case R.id.accessibilityActionScrollRight: {
                 if (!isEnabled()) {
                     return false;
                 }
@@ -779,7 +784,8 @@
                     return true;
                 }
             } return false;
-            case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
+            case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD:
+            case R.id.accessibilityActionScrollLeft: {
                 if (!isEnabled()) {
                     return false;
                 }
@@ -807,10 +813,12 @@
         if (scrollRange > 0) {
             info.setScrollable(true);
             if (isEnabled() && mScrollX > 0) {
-                info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
+                info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD);
+                info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_LEFT);
             }
             if (isEnabled() && mScrollX < scrollRange) {
-                info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
+                info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD);
+                info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_RIGHT);
             }
         }
     }
@@ -1689,6 +1697,13 @@
         return ss;
     }
 
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+        encoder.addProperty("layout:fillViewPort", mFillViewport);
+    }
+
     static class SavedState extends BaseSavedState {
         public int scrollPosition;
         public boolean isLayoutRtl;
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 6d2f368..05059bc 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -17,6 +17,7 @@
 package android.widget;
 
 import android.annotation.DrawableRes;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -43,6 +44,7 @@
 import android.view.RemotableViewMethod;
 import android.view.View;
 import android.view.ViewDebug;
+import android.view.ViewHierarchyEncoder;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.RemoteViews.RemoteView;
 
@@ -1431,4 +1433,11 @@
     public CharSequence getAccessibilityClassName() {
         return ImageView.class.getName();
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder stream) {
+        super.encodeProperties(stream);
+        stream.addProperty("layout:baseline", getBaseline());
+    }
 }
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index 72f51c9..f153ce5 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -19,6 +19,7 @@
 import com.android.internal.R;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -29,6 +30,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.widget.RemoteViews.RemoteView;
 
 import java.lang.annotation.Retention;
@@ -1813,6 +1815,20 @@
         return LinearLayout.class.getName();
     }
 
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+        encoder.addProperty("layout:baselineAligned", mBaselineAligned);
+        encoder.addProperty("layout:baselineAlignedChildIndex", mBaselineAlignedChildIndex);
+        encoder.addProperty("measurement:baselineChildTop", mBaselineChildTop);
+        encoder.addProperty("measurement:orientation", mOrientation);
+        encoder.addProperty("measurement:gravity", mGravity);
+        encoder.addProperty("measurement:totalLength", mTotalLength);
+        encoder.addProperty("layout:totalLength", mTotalLength);
+        encoder.addProperty("layout:useLargestChild", mUseLargestChild);
+    }
+
     /**
      * Per-child layout information associated with ViewLinearLayout.
      * 
@@ -1921,5 +1937,14 @@
             return output + "LinearLayout.LayoutParams={width=" + sizeToString(width) +
                     ", height=" + sizeToString(height) + " weight=" + weight +  "}";
         }
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+
+            encoder.addProperty("layout:weight", weight);
+            encoder.addProperty("layout:gravity", gravity);
+        }
     }
 }
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java
index 310412f9..94b9416 100644
--- a/core/java/android/widget/ListPopupWindow.java
+++ b/core/java/android/widget/ListPopupWindow.java
@@ -39,6 +39,7 @@
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewParent;
+import android.view.WindowManager;
 import android.view.animation.AccelerateDecelerateInterpolator;
 
 import com.android.internal.R;
@@ -77,6 +78,7 @@
     private int mDropDownWidth = ViewGroup.LayoutParams.WRAP_CONTENT;
     private int mDropDownHorizontalOffset;
     private int mDropDownVerticalOffset;
+    private int mDropDownWindowLayoutType = WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
     private boolean mDropDownVerticalOffsetSet;
 
     private int mDropDownGravity = Gravity.NO_GRAVITY;
@@ -515,6 +517,19 @@
     }
 
     /**
+     * Set the layout type for this popup window.
+     * <p>
+     * See {@link WindowManager.LayoutParams#type} for possible values.
+     *
+     * @param layoutType Layout type for this window.
+     *
+     * @see WindowManager.LayoutParams#type
+     */
+    public void setWindowLayoutType(int layoutType) {
+        mDropDownWindowLayoutType = layoutType;
+    }
+
+    /**
      * Sets a listener to receive events when a list item is clicked.
      * 
      * @param clickListener Listener to register
@@ -567,8 +582,9 @@
     public void show() {
         int height = buildDropDown();
 
-        boolean noInputMethod = isInputMethodNotNeeded();
+        final boolean noInputMethod = isInputMethodNotNeeded();
         mPopup.setAllowScrollingAnchorParent(!noInputMethod);
+        mPopup.setWindowLayoutType(mDropDownWindowLayoutType);
 
         if (mPopup.isShowing()) {
             final int widthSpec;
@@ -1775,8 +1791,9 @@
 
     private class ResizePopupRunnable implements Runnable {
         public void run() {
-            if (mDropDownList != null && mDropDownList.getCount() > mDropDownList.getChildCount() &&
-                    mDropDownList.getChildCount() <= mListItemExpandMaximum) {
+            if (mDropDownList != null && mDropDownList.isAttachedToWindow()
+                    && mDropDownList.getCount() > mDropDownList.getChildCount()
+                    && mDropDownList.getChildCount() <= mListItemExpandMaximum) {
                 mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
                 show();
             }
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index a79c8e8..7dcaa1f 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -23,6 +23,7 @@
 import com.google.android.collect.Lists;
 
 import android.annotation.IdRes;
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.TypedArray;
@@ -40,6 +41,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.ViewParent;
 import android.view.ViewRootImpl;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -3938,4 +3940,12 @@
                 position, 1, 0, 1, isHeading, isSelected);
         info.setCollectionItemInfo(itemInfo);
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+
+        encoder.addProperty("recycleOnMeasure", recycleOnMeasure());
+    }
 }
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index 8d8b3a3..97348e30 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -28,7 +28,7 @@
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
-import android.view.PhoneWindow;
+import com.android.internal.policy.PhoneWindow;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index c3ac278..b4cbf35 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -829,9 +829,9 @@
     }
 
     /**
-     * Set the layout type for this window. This value will be passed through to
-     * {@link WindowManager.LayoutParams#type} therefore the value should match any value
-     * {@link WindowManager.LayoutParams#type} accepts.
+     * Set the layout type for this window.
+     * <p>
+     * See {@link WindowManager.LayoutParams#type} for possible values.
      *
      * @param layoutType Layout type for this window.
      *
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index b59ae17..639a09c 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.graphics.PorterDuff;
 
@@ -49,6 +50,7 @@
 import android.view.RemotableViewMethod;
 import android.view.View;
 import android.view.ViewDebug;
+import android.view.ViewHierarchyEncoder;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.animation.AlphaAnimation;
@@ -1893,6 +1895,17 @@
         postDelayed(mAccessibilityEventSender, TIMEOUT_SEND_ACCESSIBILITY_EVENT);
     }
 
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder stream) {
+        super.encodeProperties(stream);
+
+        stream.addProperty("progress:max", getMax());
+        stream.addProperty("progress:progress", getProgress());
+        stream.addProperty("progress:secondaryProgress", getSecondaryProgress());
+        stream.addProperty("progress:indeterminate", isIndeterminate());
+    }
+
     /**
      * Command for sending an accessibility event.
      */
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index d12739f..affc5da 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
 import android.util.ArrayMap;
 import com.android.internal.R;
 
@@ -36,6 +37,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.RemoteViews.RemoteView;
 
@@ -1616,6 +1618,13 @@
             // This will set the layout direction
             super.resolveLayoutDirection(layoutDirection);
         }
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+            encoder.addProperty("layout:alignWithParent", alignWithParent);
+        }
     }
 
     private static class DependencyGraph {
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index 10e4db3..5953a98 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -618,7 +618,15 @@
                 // remove based on both its position as well as it's current memory usage, as well
                 // as whether it was directly requested vs. whether it was preloaded by our caching
                 // mechanism.
-                mIndexRemoteViews.remove(getFarthestPositionFrom(pruneFromPosition, visibleWindow));
+                int trimIndex = getFarthestPositionFrom(pruneFromPosition, visibleWindow);
+
+                // Need to check that this is a valid index, to cover the case where you have only
+                // a single view in the cache, but it's larger than the max memory limit
+                if (trimIndex < 0) {
+                    break;
+                }
+
+                mIndexRemoteViews.remove(trimIndex);
             }
 
             // Update the metadata cache
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 2026169..2709f25 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
 import android.os.Build;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -38,6 +39,7 @@
 import android.view.ViewConfiguration;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.ViewParent;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -819,7 +821,8 @@
             return false;
         }
         switch (action) {
-            case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
+            case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD:
+            case R.id.accessibilityActionScrollDown: {
                 final int viewportHeight = getHeight() - mPaddingBottom - mPaddingTop;
                 final int targetScrollY = Math.min(mScrollY + viewportHeight, getScrollRange());
                 if (targetScrollY != mScrollY) {
@@ -827,7 +830,8 @@
                     return true;
                 }
             } return false;
-            case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
+            case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD:
+            case R.id.accessibilityActionScrollUp: {
                 final int viewportHeight = getHeight() - mPaddingBottom - mPaddingTop;
                 final int targetScrollY = Math.max(mScrollY - viewportHeight, 0);
                 if (targetScrollY != mScrollY) {
@@ -853,10 +857,13 @@
             if (scrollRange > 0) {
                 info.setScrollable(true);
                 if (mScrollY > 0) {
-                    info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
+                    info.addAction(
+                            AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD);
+                    info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP);
                 }
                 if (mScrollY < scrollRange) {
-                    info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
+                    info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD);
+                    info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_DOWN);
                 }
             }
         }
@@ -1782,6 +1789,13 @@
         return ss;
     }
 
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+        super.encodeProperties(encoder);
+        encoder.addProperty("fillViewport", mFillViewport);
+    }
+
     static class SavedState extends BaseSavedState {
         public int scrollPosition;
 
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index bbf120a..088adbb 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -18,6 +18,7 @@
 
 import static android.widget.SuggestionsAdapter.getColumnString;
 
+import android.annotation.Nullable;
 import android.app.PendingIntent;
 import android.app.SearchManager;
 import android.app.SearchableInfo;
@@ -120,6 +121,8 @@
     private final Intent mVoiceWebSearchIntent;
     private final Intent mVoiceAppSearchIntent;
 
+    private final CharSequence mDefaultQueryHint;
+
     private OnQueryTextListener mOnQueryChangeListener;
     private OnCloseListener mOnCloseListener;
     private OnFocusChangeListener mOnQueryTextFocusChangeListener;
@@ -329,10 +332,8 @@
             setMaxWidth(maxWidth);
         }
 
-        final CharSequence queryHint = a.getText(R.styleable.SearchView_queryHint);
-        if (!TextUtils.isEmpty(queryHint)) {
-            setQueryHint(queryHint);
-        }
+        mDefaultQueryHint = a.getText(R.styleable.SearchView_defaultQueryHint);
+        mQueryHint = a.getText(R.styleable.SearchView_queryHint);
 
         final int imeOptions = a.getInt(R.styleable.SearchView_imeOptions, -1);
         if (imeOptions != -1) {
@@ -570,36 +571,48 @@
     }
 
     /**
-     * Sets the hint text to display in the query text field. This overrides any hint specified
-     * in the SearchableInfo.
+     * Sets the hint text to display in the query text field. This overrides
+     * any hint specified in the {@link SearchableInfo}.
+     * <p>
+     * This value may be specified as an empty string to prevent any query hint
+     * from being displayed.
      *
-     * @param hint the hint text to display
-     *
+     * @param hint the hint text to display or {@code null} to clear
      * @attr ref android.R.styleable#SearchView_queryHint
      */
-    public void setQueryHint(CharSequence hint) {
+    public void setQueryHint(@Nullable CharSequence hint) {
         mQueryHint = hint;
         updateQueryHint();
     }
 
     /**
-     * Gets the hint text to display in the query text field.
-     * @return the query hint text, if specified, null otherwise.
+     * Returns the hint text that will be displayed in the query text field.
+     * <p>
+     * The displayed query hint is chosen in the following order:
+     * <ol>
+     * <li>Non-null value set with {@link #setQueryHint(CharSequence)}
+     * <li>Value specified in XML using
+     *     {@link android.R.styleable#SearchView_queryHint android:queryHint}
+     * <li>Valid string resource ID exposed by the {@link SearchableInfo} via
+     *     {@link SearchableInfo#getHintId()}
+     * <li>Default hint provided by the theme against which the view was
+     *     inflated
+     * </ol>
      *
+     * @return the displayed query hint text, or {@code null} if none set
      * @attr ref android.R.styleable#SearchView_queryHint
      */
+    @Nullable
     public CharSequence getQueryHint() {
+        final CharSequence hint;
         if (mQueryHint != null) {
-            return mQueryHint;
-        } else if (mSearchable != null) {
-            CharSequence hint = null;
-            int hintId = mSearchable.getHintId();
-            if (hintId != 0) {
-                hint = getContext().getString(hintId);
-            }
-            return hint;
+            hint = mQueryHint;
+        } else if (mSearchable != null && mSearchable.getHintId() != 0) {
+            hint = getContext().getText(mSearchable.getHintId());
+        } else {
+            hint = mDefaultQueryHint;
         }
-        return null;
+        return hint;
     }
 
     /**
@@ -1113,20 +1126,8 @@
     }
 
     private void updateQueryHint() {
-        if (mQueryHint != null) {
-            mSearchSrcTextView.setHint(getDecoratedHint(mQueryHint));
-        } else if (mSearchable != null) {
-            CharSequence hint = null;
-            int hintId = mSearchable.getHintId();
-            if (hintId != 0) {
-                hint = getContext().getString(hintId);
-            }
-            if (hint != null) {
-                mSearchSrcTextView.setHint(getDecoratedHint(hint));
-            }
-        } else {
-            mSearchSrcTextView.setHint(getDecoratedHint(""));
-        }
+        final CharSequence hint = getQueryHint();
+        mSearchSrcTextView.setHint(getDecoratedHint(hint == null ? "" : hint));
     }
 
     /**
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index f94f97c..ff587c2 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -26,13 +26,11 @@
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Insets;
-import android.graphics.Paint;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.graphics.Typeface;
 import android.graphics.Region.Op;
 import android.graphics.drawable.Drawable;
-import android.os.Bundle;
 import android.text.Layout;
 import android.text.StaticLayout;
 import android.text.TextPaint;
@@ -46,7 +44,7 @@
 import android.view.MotionEvent;
 import android.view.SoundEffectConstants;
 import android.view.VelocityTracker;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewConfiguration;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -1363,8 +1361,8 @@
     }
 
     @Override
-    public void onProvideAssistStructure(ViewAssistStructure structure) {
-        super.onProvideAssistStructure(structure);
+    public void onProvideStructure(ViewStructure structure) {
+        super.onProvideStructure(structure);
         CharSequence switchText = isChecked() ? mTextOn : mTextOff;
         if (!TextUtils.isEmpty(switchText)) {
             CharSequence oldText = structure.getText();
diff --git a/core/java/android/widget/TableRow.java b/core/java/android/widget/TableRow.java
index f73ee49..d4288d6 100644
--- a/core/java/android/widget/TableRow.java
+++ b/core/java/android/widget/TableRow.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
@@ -24,7 +25,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
-
+import android.view.ViewHierarchyEncoder;
 
 /**
  * <p>A layout that arranges its children horizontally. A TableRow should
@@ -509,6 +510,14 @@
                 height = WRAP_CONTENT;
             }
         }
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+            encoder.addProperty("layout:column", column);
+            encoder.addProperty("layout:span", span);
+        }
     }
 
     // special transparent hierarchy change listener
diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java
index e2acaac..5d7b569 100644
--- a/core/java/android/widget/TextClock.java
+++ b/core/java/android/widget/TextClock.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.NonNull;
 import android.app.ActivityManager;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
@@ -32,6 +33,7 @@
 import android.text.format.DateFormat;
 import android.util.AttributeSet;
 import android.view.RemotableViewMethod;
+import android.view.ViewHierarchyEncoder;
 
 import com.android.internal.R;
 
@@ -546,4 +548,18 @@
         mTime.setTimeInMillis(System.currentTimeMillis());
         setText(DateFormat.format(mFormat, mTime));
     }
+
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder stream) {
+        super.encodeProperties(stream);
+
+        CharSequence s = getFormat12Hour();
+        stream.addProperty("format12Hour", s == null ? null : s.toString());
+
+        s = getFormat24Hour();
+        stream.addProperty("format24Hour", s == null ? null : s.toString());
+        stream.addProperty("format", mFormat == null ? null : mFormat.toString());
+        stream.addProperty("hasSeconds", mHasSeconds);
+    }
 }
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 774a864..68c49cd 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -114,12 +114,13 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewConfiguration;
 import android.view.ViewDebug;
 import android.view.ViewGroup.LayoutParams;
 import android.view.ViewRootImpl;
 import android.view.ViewTreeObserver;
+import android.view.ViewHierarchyEncoder;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -2844,7 +2845,8 @@
             @ViewDebug.IntToString(from = Typeface.BOLD_ITALIC, to = "BOLD_ITALIC")
     })
     public int getTypefaceStyle() {
-        return mTextPaint.getTypeface().getStyle();
+        Typeface typeface = mTextPaint.getTypeface();
+        return typeface != null ? typeface.getStyle() : Typeface.NORMAL;
     }
 
     /**
@@ -6630,12 +6632,10 @@
             // TODO: code duplication with makeSingleLayout()
             if (mHintLayout == null) {
                 StaticLayout.Builder builder = StaticLayout.Builder.obtain(mHint, 0,
-                        mHint.length(), hintWidth)
-                        .setPaint(mTextPaint)
+                        mHint.length(), mTextPaint, hintWidth)
                         .setAlignment(alignment)
                         .setTextDir(mTextDir)
-                        .setSpacingMult(mSpacingMult)
-                        .setSpacingAdd(mSpacingAdd)
+                        .setLineSpacing(mSpacingAdd, mSpacingMult)
                         .setIncludePad(mIncludePad)
                         .setBreakStrategy(mBreakStrategy);
                 if (mLeftIndents != null || mRightIndents != null) {
@@ -6721,12 +6721,10 @@
         }
         if (result == null) {
             StaticLayout.Builder builder = StaticLayout.Builder.obtain(mTransformed,
-                    0, mTransformed.length(), wantWidth)
-                    .setPaint(mTextPaint)
+                    0, mTransformed.length(), mTextPaint, wantWidth)
                     .setAlignment(alignment)
                     .setTextDir(mTextDir)
-                    .setSpacingMult(mSpacingMult)
-                    .setSpacingAdd(mSpacingAdd)
+                    .setLineSpacing(mSpacingAdd, mSpacingMult)
                     .setIncludePad(mIncludePad)
                     .setBreakStrategy(mBreakStrategy);
             if (mLeftIndents != null || mRightIndents != null) {
@@ -8717,8 +8715,8 @@
     }
 
     @Override
-    public void onProvideAssistStructure(ViewAssistStructure structure) {
-        super.onProvideAssistStructure(structure);
+    public void onProvideStructure(ViewStructure structure) {
+        super.onProvideStructure(structure);
         final boolean isPassword = hasPasswordTransformationMethod();
         if (!isPassword) {
             structure.setText(getText(), getSelectionStart(), getSelectionEnd());
@@ -9560,6 +9558,23 @@
         }
     }
 
+    /** @hide */
+    @Override
+    protected void encodeProperties(@NonNull ViewHierarchyEncoder stream) {
+        super.encodeProperties(stream);
+
+        TruncateAt ellipsize = getEllipsize();
+        stream.addProperty("text:ellipsize", ellipsize == null ? null : ellipsize.name());
+        stream.addProperty("text:textSize", getTextSize());
+        stream.addProperty("text:scaledTextSize", getScaledTextSize());
+        stream.addProperty("text:typefaceStyle", getTypefaceStyle());
+        stream.addProperty("text:selectionStart", getSelectionStart());
+        stream.addProperty("text:selectionEnd", getSelectionEnd());
+        stream.addProperty("text:curTextColor", mCurTextColor);
+        stream.addProperty("text:text", mText == null ? null : mText.toString());
+        stream.addProperty("text:gravity", mGravity);
+    }
+
     /**
      * User interface state that is stored by TextView for implementing
      * {@link View#onSaveInstanceState}.
diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java
index 087406a..62d948d 100644
--- a/core/java/android/widget/Toolbar.java
+++ b/core/java/android/widget/Toolbar.java
@@ -590,7 +590,7 @@
                 mTitleTextView.setSingleLine();
                 mTitleTextView.setEllipsize(TextUtils.TruncateAt.END);
                 if (mTitleTextAppearance != 0) {
-                    mTitleTextView.setTextAppearance(context, mTitleTextAppearance);
+                    mTitleTextView.setTextAppearance(mTitleTextAppearance);
                 }
                 if (mTitleTextColor != 0) {
                     mTitleTextView.setTextColor(mTitleTextColor);
@@ -644,7 +644,7 @@
                 mSubtitleTextView.setSingleLine();
                 mSubtitleTextView.setEllipsize(TextUtils.TruncateAt.END);
                 if (mSubtitleTextAppearance != 0) {
-                    mSubtitleTextView.setTextAppearance(context, mSubtitleTextAppearance);
+                    mSubtitleTextView.setTextAppearance(mSubtitleTextAppearance);
                 }
                 if (mSubtitleTextColor != 0) {
                     mSubtitleTextView.setTextColor(mSubtitleTextColor);
@@ -670,7 +670,7 @@
     public void setTitleTextAppearance(Context context, @StyleRes int resId) {
         mTitleTextAppearance = resId;
         if (mTitleTextView != null) {
-            mTitleTextView.setTextAppearance(context, resId);
+            mTitleTextView.setTextAppearance(resId);
         }
     }
 
@@ -681,7 +681,7 @@
     public void setSubtitleTextAppearance(Context context, @StyleRes int resId) {
         mSubtitleTextAppearance = resId;
         if (mSubtitleTextView != null) {
-            mSubtitleTextView.setTextAppearance(context, resId);
+            mSubtitleTextView.setTextAppearance(resId);
         }
     }
 
diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java
index b8110e3..61ee00c 100644
--- a/core/java/com/android/internal/app/AlertController.java
+++ b/core/java/com/android/internal/app/AlertController.java
@@ -526,11 +526,15 @@
             mWindow.setCloseOnTouchOutsideIfNotSet(true);
         }
 
-        // Only display the divider if we have a title and a custom view or a
-        // message.
         if (hasTopPanel) {
+            // Only clip scrolling content to padding if we have a title.
+            if (mScrollView != null) {
+                mScrollView.setClipToPadding(true);
+            }
+
+            // Only show the divider if we have a title.
             final View divider;
-            if (mMessage != null || hasCustomPanel || mListView != null) {
+            if (mMessage != null || mListView != null || hasCustomPanel) {
                 divider = topPanel.findViewById(R.id.titleDivider);
             } else {
                 divider = topPanel.findViewById(R.id.titleDividerTop);
@@ -541,6 +545,17 @@
             }
         }
 
+        // Update scroll indicators as needed.
+        if (!hasCustomPanel) {
+            final View content = mListView != null ? mListView : mScrollView;
+            if (content != null) {
+                final int indicators = (hasTopPanel ? View.SCROLL_INDICATOR_TOP : 0)
+                        | (hasButtonPanel ? View.SCROLL_INDICATOR_BOTTOM : 0);
+                content.setScrollIndicators(indicators,
+                        View.SCROLL_INDICATOR_TOP | View.SCROLL_INDICATOR_BOTTOM);
+            }
+        }
+
         final TypedArray a = mContext.obtainStyledAttributes(
                 null, R.styleable.AlertDialog, R.attr.alertDialogStyle, 0);
         setBackground(a, topPanel, contentPanel, customPanel, buttonPanel,
@@ -654,59 +669,6 @@
                 contentPanel.setVisibility(View.GONE);
             }
         }
-
-        // Set up scroll indicators (if present).
-        final View indicatorUp = contentPanel.findViewById(R.id.scrollIndicatorUp);
-        final View indicatorDown = contentPanel.findViewById(R.id.scrollIndicatorDown);
-        if (indicatorUp != null || indicatorDown != null) {
-            if (mMessage != null) {
-                // We're just showing the ScrollView, set up listener.
-                mScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
-                        @Override
-                        public void onScrollChange(View v, int scrollX, int scrollY,
-                                int oldScrollX, int oldScrollY) {
-                            manageScrollIndicators(v, indicatorUp, indicatorDown);
-                        }
-                    });
-                // Set up the indicators following layout.
-                mScrollView.post(new Runnable() {
-                     @Override
-                     public void run() {
-                             manageScrollIndicators(mScrollView, indicatorUp, indicatorDown);
-                         }
-                     });
-
-            } else if (mListView != null) {
-                // We're just showing the AbsListView, set up listener.
-                mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
-                        @Override
-                        public void onScrollStateChanged(AbsListView view, int scrollState) {
-                            // That's cool, I guess?
-                        }
-
-                        @Override
-                        public void onScroll(AbsListView v, int firstVisibleItem,
-                                int visibleItemCount, int totalItemCount) {
-                            manageScrollIndicators(v, indicatorUp, indicatorDown);
-                        }
-                    });
-                // Set up the indicators following layout.
-                mListView.post(new Runnable() {
-                        @Override
-                        public void run() {
-                            manageScrollIndicators(mListView, indicatorUp, indicatorDown);
-                        }
-                    });
-            } else {
-                // We don't have any content to scroll, remove the indicators.
-                if (indicatorUp != null) {
-                    contentPanel.removeView(indicatorUp);
-                }
-                if (indicatorDown != null) {
-                    contentPanel.removeView(indicatorDown);
-                }
-            }
-        }
     }
 
     private static void manageScrollIndicators(View v, View upIndicator, View downIndicator) {
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index e347faa..83fa967 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -21,11 +21,14 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentSender;
+import android.content.IntentSender.SendIntentException;
 import android.content.ServiceConnection;
 import android.content.pm.ActivityInfo;
+import android.content.pm.LabeledIntent;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
+import android.database.DataSetObserver;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -34,7 +37,9 @@
 import android.os.Message;
 import android.os.Parcelable;
 import android.os.RemoteException;
+import android.os.ResultReceiver;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.service.chooser.ChooserTarget;
 import android.service.chooser.ChooserTargetService;
 import android.service.chooser.IChooserTargetResult;
@@ -42,8 +47,16 @@
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.Slog;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.AbsListView;
+import android.widget.BaseAdapter;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import com.android.internal.R;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -53,13 +66,15 @@
 
     private static final boolean DEBUG = false;
 
-    private static final int QUERY_TARGET_LIMIT = 5;
+    private static final int QUERY_TARGET_SERVICE_LIMIT = 5;
     private static final int WATCHDOG_TIMEOUT_MILLIS = 5000;
 
     private Bundle mReplacementExtras;
     private IntentSender mChosenComponentSender;
+    private IntentSender mRefinementIntentSender;
+    private RefinementResultReceiver mRefinementResultReceiver;
 
-    private ChooserTarget[] mCallerChooserTargets;
+    private ChooserListAdapter mChooserListAdapter;
 
     private final List<ChooserTargetServiceConnection> mServiceConnections = new ArrayList<>();
 
@@ -80,8 +95,7 @@
                                 + " Have you considered returning results faster?");
                         break;
                     }
-                    final ChooserListAdapter cla = (ChooserListAdapter) getAdapter();
-                    cla.addServiceResults(sri.originalTarget, sri.resultTargets);
+                    mChooserListAdapter.addServiceResults(sri.originalTarget, sri.resultTargets);
                     unbindService(sri.connection);
                     mServiceConnections.remove(sri.connection);
                     break;
@@ -113,6 +127,32 @@
         if (target != null) {
             modifyTargetIntent(target);
         }
+        Parcelable[] targetsParcelable
+                = intent.getParcelableArrayExtra(Intent.EXTRA_ALTERNATE_INTENTS);
+        if (targetsParcelable != null) {
+            final boolean offset = target == null;
+            Intent[] additionalTargets =
+                    new Intent[offset ? targetsParcelable.length - 1 : targetsParcelable.length];
+            for (int i = 0; i < targetsParcelable.length; i++) {
+                if (!(targetsParcelable[i] instanceof Intent)) {
+                    Log.w(TAG, "EXTRA_ALTERNATE_INTENTS array entry #" + i + " is not an Intent: "
+                            + targetsParcelable[i]);
+                    finish();
+                    super.onCreate(null);
+                    return;
+                }
+                final Intent additionalTarget = (Intent) targetsParcelable[i];
+                if (i == 0 && target == null) {
+                    target = additionalTarget;
+                    modifyTargetIntent(target);
+                } else {
+                    additionalTargets[offset ? i - 1 : i] = additionalTarget;
+                    modifyTargetIntent(additionalTarget);
+                }
+            }
+            setAdditionalTargets(additionalTargets);
+        }
+
         mReplacementExtras = intent.getBundleExtra(Intent.EXTRA_REPLACEMENT_EXTRAS);
         CharSequence title = intent.getCharSequenceExtra(Intent.EXTRA_TITLE);
         int defaultTitleRes = 0;
@@ -125,7 +165,7 @@
             initialIntents = new Intent[pa.length];
             for (int i=0; i<pa.length; i++) {
                 if (!(pa[i] instanceof Intent)) {
-                    Log.w("ChooserActivity", "Initial intent #" + i + " not an Intent: " + pa[i]);
+                    Log.w(TAG, "Initial intent #" + i + " not an Intent: " + pa[i]);
                     finish();
                     super.onCreate(null);
                     return;
@@ -136,29 +176,25 @@
             }
         }
 
-        pa = intent.getParcelableArrayExtra(Intent.EXTRA_CHOOSER_TARGETS);
-        if (pa != null) {
-            final ChooserTarget[] targets = new ChooserTarget[pa.length];
-            for (int i = 0; i < pa.length; i++) {
-                if (!(pa[i] instanceof ChooserTarget)) {
-                    Log.w("ChooserActivity", "Chooser target #" + i + " is not a ChooserTarget: " +
-                            pa[i]);
-                    finish();
-                    super.onCreate(null);
-                    return;
-                }
-                targets[i] = (ChooserTarget) pa[i];
-            }
-            mCallerChooserTargets = targets;
-        }
         mChosenComponentSender = intent.getParcelableExtra(
                 Intent.EXTRA_CHOSEN_COMPONENT_INTENT_SENDER);
+        mRefinementIntentSender = intent.getParcelableExtra(
+                Intent.EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER);
         setSafeForwardingMode(true);
         super.onCreate(savedInstanceState, target, title, defaultTitleRes, initialIntents,
                 null, false);
     }
 
     @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (mRefinementResultReceiver != null) {
+            mRefinementResultReceiver.destroy();
+            mRefinementResultReceiver = null;
+        }
+    }
+
+    @Override
     public Intent getReplacementIntent(ActivityInfo aInfo, Intent defIntent) {
         Intent result = defIntent;
         if (mReplacementExtras != null) {
@@ -193,8 +229,19 @@
     }
 
     @Override
+    void onPrepareAdapterView(AbsListView adapterView, ResolveListAdapter adapter,
+            boolean alwaysUseOption) {
+        final ListView listView = adapterView instanceof ListView ? (ListView) adapterView : null;
+        mChooserListAdapter = (ChooserListAdapter) adapter;
+        adapterView.setAdapter(new ChooserRowAdapter(mChooserListAdapter));
+        if (listView != null) {
+            listView.setItemsCanFocus(true);
+        }
+    }
+
+    @Override
     int getLayoutResource() {
-        return com.android.internal.R.layout.chooser_grid;
+        return R.layout.chooser_grid;
     }
 
     @Override
@@ -211,6 +258,37 @@
         }
     }
 
+    @Override
+    protected boolean onTargetSelected(TargetInfo target, boolean alwaysCheck) {
+        if (mRefinementIntentSender != null) {
+            final Intent fillIn = new Intent();
+            final List<Intent> sourceIntents = target.getAllSourceIntents();
+            if (!sourceIntents.isEmpty()) {
+                fillIn.putExtra(Intent.EXTRA_INTENT, sourceIntents.get(0));
+                if (sourceIntents.size() > 1) {
+                    final Intent[] alts = new Intent[sourceIntents.size() - 1];
+                    for (int i = 1, N = sourceIntents.size(); i < N; i++) {
+                        alts[i - 1] = sourceIntents.get(i);
+                    }
+                    fillIn.putExtra(Intent.EXTRA_ALTERNATE_INTENTS, alts);
+                }
+                if (mRefinementResultReceiver != null) {
+                    mRefinementResultReceiver.destroy();
+                }
+                mRefinementResultReceiver = new RefinementResultReceiver(this, target, null);
+                fillIn.putExtra(Intent.EXTRA_RESULT_RECEIVER,
+                        mRefinementResultReceiver);
+                try {
+                    mRefinementIntentSender.sendIntent(this, 0, fillIn, null, null);
+                    return false;
+                } catch (SendIntentException e) {
+                    Log.e(TAG, "Refinement IntentSender failed to send", e);
+                }
+            }
+        }
+        return super.onTargetSelected(target, alwaysCheck);
+    }
+
     void queryTargetServices(ChooserListAdapter adapter) {
         final PackageManager pm = getPackageManager();
         int targetsToQuery = 0;
@@ -258,8 +336,9 @@
                     targetsToQuery++;
                 }
             }
-            if (targetsToQuery >= QUERY_TARGET_LIMIT) {
-                if (DEBUG) Log.d(TAG, "queryTargets hit query target limit " + QUERY_TARGET_LIMIT);
+            if (targetsToQuery >= QUERY_TARGET_SERVICE_LIMIT) {
+                if (DEBUG) Log.d(TAG, "queryTargets hit query target limit "
+                        + QUERY_TARGET_SERVICE_LIMIT);
                 break;
             }
         }
@@ -303,29 +382,75 @@
         mTargetResultHandler.removeMessages(CHOOSER_TARGET_SERVICE_WATCHDOG_TIMEOUT);
     }
 
+    void onRefinementResult(TargetInfo selectedTarget, Intent matchingIntent) {
+        if (mRefinementResultReceiver != null) {
+            mRefinementResultReceiver.destroy();
+            mRefinementResultReceiver = null;
+        }
+
+        if (selectedTarget == null) {
+            Log.e(TAG, "Refinement result intent did not match any known targets; canceling");
+        } else if (!checkTargetSourceIntent(selectedTarget, matchingIntent)) {
+            Log.e(TAG, "onRefinementResult: Selected target " + selectedTarget
+                    + " cannot match refined source intent " + matchingIntent);
+        } else if (super.onTargetSelected(selectedTarget.cloneFilledIn(matchingIntent, 0), false)) {
+            finish();
+            return;
+        }
+        onRefinementCanceled();
+    }
+
+    void onRefinementCanceled() {
+        if (mRefinementResultReceiver != null) {
+            mRefinementResultReceiver.destroy();
+            mRefinementResultReceiver = null;
+        }
+        finish();
+    }
+
+    boolean checkTargetSourceIntent(TargetInfo target, Intent matchingIntent) {
+        final List<Intent> targetIntents = target.getAllSourceIntents();
+        for (int i = 0, N = targetIntents.size(); i < N; i++) {
+            final Intent targetIntent = targetIntents.get(i);
+            if (targetIntent.filterEquals(matchingIntent)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     @Override
-    ResolveListAdapter createAdapter(Context context, Intent[] initialIntents,
-            List<ResolveInfo> rList, int launchedFromUid, boolean filterLastUsed) {
-        final ChooserListAdapter adapter = new ChooserListAdapter(context, initialIntents, rList,
-                launchedFromUid, filterLastUsed, mCallerChooserTargets);
+    ResolveListAdapter createAdapter(Context context, List<Intent> payloadIntents,
+            Intent[] initialIntents, List<ResolveInfo> rList, int launchedFromUid,
+            boolean filterLastUsed) {
+        final ChooserListAdapter adapter = new ChooserListAdapter(context, payloadIntents,
+                initialIntents, rList, launchedFromUid, filterLastUsed);
         if (DEBUG) Log.d(TAG, "Adapter created; querying services");
         queryTargetServices(adapter);
         return adapter;
     }
 
-    class ChooserTargetInfo implements TargetInfo {
-        private final TargetInfo mSourceInfo;
+    final class ChooserTargetInfo implements TargetInfo {
+        private final DisplayResolveInfo mSourceInfo;
         private final ResolveInfo mBackupResolveInfo;
         private final ChooserTarget mChooserTarget;
+        private Drawable mBadgeIcon = null;
         private final Drawable mDisplayIcon;
+        private final Intent mFillInIntent;
+        private final int mFillInFlags;
 
-        public ChooserTargetInfo(ChooserTarget target) {
-            this(null, target);
-        }
-
-        public ChooserTargetInfo(TargetInfo sourceInfo, ChooserTarget chooserTarget) {
+        public ChooserTargetInfo(DisplayResolveInfo sourceInfo, ChooserTarget chooserTarget) {
             mSourceInfo = sourceInfo;
             mChooserTarget = chooserTarget;
+            if (sourceInfo != null) {
+                final ResolveInfo ri = sourceInfo.getResolveInfo();
+                if (ri != null) {
+                    final ActivityInfo ai = ri.activityInfo;
+                    if (ai != null && ai.applicationInfo != null) {
+                        mBadgeIcon = getPackageManager().getApplicationIcon(ai.applicationInfo);
+                    }
+                }
+            }
             mDisplayIcon = new BitmapDrawable(getResources(), chooserTarget.getIcon());
 
             if (sourceInfo != null) {
@@ -333,14 +458,24 @@
             } else {
                 mBackupResolveInfo = getPackageManager().resolveActivity(getResolvedIntent(), 0);
             }
+
+            mFillInIntent = null;
+            mFillInFlags = 0;
+        }
+
+        private ChooserTargetInfo(ChooserTargetInfo other, Intent fillInIntent, int flags) {
+            mSourceInfo = other.mSourceInfo;
+            mBackupResolveInfo = other.mBackupResolveInfo;
+            mChooserTarget = other.mChooserTarget;
+            mBadgeIcon = other.mBadgeIcon;
+            mDisplayIcon = other.mDisplayIcon;
+            mFillInIntent = fillInIntent;
+            mFillInFlags = flags;
         }
 
         @Override
         public Intent getResolvedIntent() {
-            final Intent targetIntent = mChooserTarget.getIntent();
-            if (targetIntent != null) {
-                return targetIntent;
-            } else if (mSourceInfo != null) {
+            if (mSourceInfo != null) {
                 return mSourceInfo.getResolvedIntent();
             }
             return getTargetIntent();
@@ -358,22 +493,44 @@
         }
 
         private Intent getFillInIntent() {
-            return mSourceInfo != null ? mSourceInfo.getResolvedIntent() : getTargetIntent();
+            Intent result = mSourceInfo != null
+                    ? mSourceInfo.getResolvedIntent() : getTargetIntent();
+            if (result == null) {
+                Log.e(TAG, "ChooserTargetInfo#getFillInIntent: no fillIn intent available");
+            } else if (mFillInIntent != null) {
+                result = new Intent(result);
+                result.fillIn(mFillInIntent, mFillInFlags);
+            }
+            return result;
         }
 
         @Override
         public boolean start(Activity activity, Bundle options) {
-            return mChooserTarget.sendIntent(activity, getFillInIntent());
+            final Intent intent = getFillInIntent();
+            if (intent == null) {
+                return false;
+            }
+            return mChooserTarget.sendIntent(activity, intent);
         }
 
         @Override
         public boolean startAsCaller(Activity activity, Bundle options, int userId) {
-            return mChooserTarget.sendIntentAsCaller(activity, getFillInIntent(), userId);
+            final Intent intent = getFillInIntent();
+            if (intent == null) {
+                return false;
+            }
+            // ChooserTargets will launch with their IntentSender's identity
+            return mChooserTarget.sendIntent(activity, intent);
         }
 
         @Override
         public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
-            return mChooserTarget.sendIntentAsUser(activity, getFillInIntent(), user);
+            final Intent intent = getFillInIntent();
+            if (intent == null) {
+                return false;
+            }
+            // ChooserTargets will launch with their IntentSender's identity
+            return mChooserTarget.sendIntent(activity, intent);
         }
 
         @Override
@@ -395,19 +552,72 @@
         public Drawable getDisplayIcon() {
             return mDisplayIcon;
         }
+
+        @Override
+        public Drawable getBadgeIcon() {
+            return mBadgeIcon;
+        }
+
+        @Override
+        public TargetInfo cloneFilledIn(Intent fillInIntent, int flags) {
+            return new ChooserTargetInfo(this, fillInIntent, flags);
+        }
+
+        @Override
+        public List<Intent> getAllSourceIntents() {
+            final List<Intent> results = new ArrayList<>();
+            if (mSourceInfo != null) {
+                // We only queried the service for the first one in our sourceinfo.
+                results.add(mSourceInfo.getAllSourceIntents().get(0));
+            }
+            return results;
+        }
     }
 
     public class ChooserListAdapter extends ResolveListAdapter {
+        public static final int TARGET_BAD = -1;
+        public static final int TARGET_CALLER = 0;
+        public static final int TARGET_SERVICE = 1;
+        public static final int TARGET_STANDARD = 2;
+
         private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>();
-        private final List<ChooserTargetInfo> mCallerTargets = new ArrayList<>();
+        private final List<TargetInfo> mCallerTargets = new ArrayList<>();
 
-        public ChooserListAdapter(Context context, Intent[] initialIntents, List<ResolveInfo> rList,
-                int launchedFromUid, boolean filterLastUsed, ChooserTarget[] callerChooserTargets) {
-            super(context, initialIntents, rList, launchedFromUid, filterLastUsed);
+        public ChooserListAdapter(Context context, List<Intent> payloadIntents,
+                Intent[] initialIntents, List<ResolveInfo> rList, int launchedFromUid,
+                boolean filterLastUsed) {
+            // Don't send the initial intents through the shared ResolverActivity path,
+            // we want to separate them into a different section.
+            super(context, payloadIntents, null, rList, launchedFromUid, filterLastUsed);
 
-            if (callerChooserTargets != null) {
-                for (ChooserTarget target : callerChooserTargets) {
-                    mCallerTargets.add(new ChooserTargetInfo(target));
+            if (initialIntents != null) {
+                final PackageManager pm = getPackageManager();
+                for (int i = 0; i < initialIntents.length; i++) {
+                    final Intent ii = initialIntents[i];
+                    if (ii == null) {
+                        continue;
+                    }
+                    final ActivityInfo ai = ii.resolveActivityInfo(pm, 0);
+                    if (ai == null) {
+                        Log.w(TAG, "No activity found for " + ii);
+                        continue;
+                    }
+                    ResolveInfo ri = new ResolveInfo();
+                    ri.activityInfo = ai;
+                    UserManager userManager =
+                            (UserManager) getSystemService(Context.USER_SERVICE);
+                    if (userManager.isManagedProfile()) {
+                        ri.noResourceId = true;
+                    }
+                    if (ii instanceof LabeledIntent) {
+                        LabeledIntent li = (LabeledIntent)ii;
+                        ri.resolvePackageName = li.getSourcePackage();
+                        ri.labelRes = li.getLabelResource();
+                        ri.nonLocalizedLabel = li.getNonLocalizedLabel();
+                        ri.icon = li.getIconResource();
+                    }
+                    mCallerTargets.add(new DisplayResolveInfo(ii, ri,
+                            ri.loadLabel(pm), null, ii));
                 }
             }
         }
@@ -420,7 +630,7 @@
         }
 
         @Override
-        public View createView(ViewGroup parent) {
+        public View onCreateView(ViewGroup parent) {
             return mInflater.inflate(
                     com.android.internal.R.layout.resolve_grid_item, parent, false);
         }
@@ -442,6 +652,41 @@
             return super.getCount() + mServiceTargets.size() + mCallerTargets.size();
         }
 
+        public int getCallerTargetsCount() {
+            return mCallerTargets.size();
+        }
+
+        public int getServiceTargetsCount() {
+            return mServiceTargets.size();
+        }
+
+        public int getStandardTargetCount() {
+            return super.getCount();
+        }
+
+        public int getPositionTargetType(int position) {
+            int offset = 0;
+
+            final int callerTargetCount = mCallerTargets.size();
+            if (position < callerTargetCount) {
+                return TARGET_CALLER;
+            }
+            offset += callerTargetCount;
+
+            final int serviceTargetCount = mServiceTargets.size();
+            if (position - offset < serviceTargetCount) {
+                return TARGET_SERVICE;
+            }
+            offset += serviceTargetCount;
+
+            final int standardTargetCount = super.getCount();
+            if (position - offset < standardTargetCount) {
+                return TARGET_STANDARD;
+            }
+
+            return TARGET_BAD;
+        }
+
         @Override
         public TargetInfo getItem(int position) {
             int offset = 0;
@@ -485,6 +730,133 @@
         }
     }
 
+    class ChooserRowAdapter extends BaseAdapter {
+        private ChooserListAdapter mChooserListAdapter;
+        private final LayoutInflater mLayoutInflater;
+        private final int mColumnCount = 4;
+
+        public ChooserRowAdapter(ChooserListAdapter wrappedAdapter) {
+            mChooserListAdapter = wrappedAdapter;
+            mLayoutInflater = LayoutInflater.from(ChooserActivity.this);
+
+            wrappedAdapter.registerDataSetObserver(new DataSetObserver() {
+                @Override
+                public void onChanged() {
+                    super.onChanged();
+                    notifyDataSetChanged();
+                }
+
+                @Override
+                public void onInvalidated() {
+                    super.onInvalidated();
+                    notifyDataSetInvalidated();
+                }
+            });
+        }
+
+        @Override
+        public int getCount() {
+            return (int) (
+                    Math.ceil((float) mChooserListAdapter.getCallerTargetsCount() / mColumnCount)
+                    + Math.ceil((float) mChooserListAdapter.getServiceTargetsCount() / mColumnCount)
+                    + Math.ceil((float) mChooserListAdapter.getStandardTargetCount() / mColumnCount)
+            );
+        }
+
+        @Override
+        public Object getItem(int position) {
+            // We have nothing useful to return here.
+            return position;
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final View[] holder;
+            if (convertView == null) {
+                holder = createViewHolder(parent);
+            } else {
+                holder = (View[]) convertView.getTag();
+            }
+            bindViewHolder(position, holder);
+
+            // We keep the actual list item view as the last item in the holder array
+            return holder[mColumnCount];
+        }
+
+        View[] createViewHolder(ViewGroup parent) {
+            final View[] holder = new View[mColumnCount + 1];
+
+            final ViewGroup row = (ViewGroup) mLayoutInflater.inflate(R.layout.chooser_row,
+                    parent, false);
+            for (int i = 0; i < mColumnCount; i++) {
+                holder[i] = mChooserListAdapter.createView(row);
+                row.addView(holder[i]);
+            }
+            row.setTag(holder);
+            holder[mColumnCount] = row;
+            return holder;
+        }
+
+        void bindViewHolder(int rowPosition, View[] holder) {
+            final int start = getFirstRowPosition(rowPosition);
+            final int startType = mChooserListAdapter.getPositionTargetType(start);
+
+            int end = start + mColumnCount - 1;
+            while (mChooserListAdapter.getPositionTargetType(end) != startType && end >= start) {
+                end--;
+            }
+
+            final ViewGroup row = (ViewGroup) holder[mColumnCount];
+
+            if (startType == ChooserListAdapter.TARGET_SERVICE) {
+                row.setBackgroundColor(getColor(R.color.chooser_service_row_background_color));
+            } else {
+                row.setBackground(null);
+            }
+
+            for (int i = 0; i < mColumnCount; i++) {
+                final View v = holder[i];
+                if (start + i <= end) {
+                    v.setVisibility(View.VISIBLE);
+                    final int itemIndex = start + i;
+                    mChooserListAdapter.bindView(itemIndex, v);
+                    v.setOnClickListener(new OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            startSelected(itemIndex, false, true);
+                        }
+                    });
+                } else {
+                    v.setVisibility(View.GONE);
+                }
+            }
+        }
+
+        int getFirstRowPosition(int row) {
+            final int callerCount = mChooserListAdapter.getCallerTargetsCount();
+            final int callerRows = (int) Math.ceil((float) callerCount / mColumnCount);
+
+            if (row < callerRows) {
+                return row * mColumnCount;
+            }
+
+            final int serviceCount = mChooserListAdapter.getServiceTargetsCount();
+            final int serviceRows = (int) Math.ceil((float) serviceCount / mColumnCount);
+
+            if (row < callerRows + serviceRows) {
+                return callerCount + (row - callerRows) * mColumnCount;
+            }
+
+            return callerCount + serviceCount
+                    + (row - callerRows - serviceRows) * mColumnCount;
+        }
+    }
+
     class ChooserTargetServiceConnection implements ServiceConnection {
         private final DisplayResolveInfo mOriginalTarget;
 
@@ -542,4 +914,53 @@
             connection = c;
         }
     }
+
+    static class RefinementResultReceiver extends ResultReceiver {
+        private ChooserActivity mChooserActivity;
+        private TargetInfo mSelectedTarget;
+
+        public RefinementResultReceiver(ChooserActivity host, TargetInfo target,
+                Handler handler) {
+            super(handler);
+            mChooserActivity = host;
+            mSelectedTarget = target;
+        }
+
+        @Override
+        protected void onReceiveResult(int resultCode, Bundle resultData) {
+            if (mChooserActivity == null) {
+                Log.e(TAG, "Destroyed RefinementResultReceiver received a result");
+                return;
+            }
+            if (resultData == null) {
+                Log.e(TAG, "RefinementResultReceiver received null resultData");
+                return;
+            }
+
+            switch (resultCode) {
+                case RESULT_CANCELED:
+                    mChooserActivity.onRefinementCanceled();
+                    break;
+                case RESULT_OK:
+                    Parcelable intentParcelable = resultData.getParcelable(Intent.EXTRA_INTENT);
+                    if (intentParcelable instanceof Intent) {
+                        mChooserActivity.onRefinementResult(mSelectedTarget,
+                                (Intent) intentParcelable);
+                    } else {
+                        Log.e(TAG, "RefinementResultReceiver received RESULT_OK but no Intent"
+                                + " in resultData with key Intent.EXTRA_INTENT");
+                    }
+                    break;
+                default:
+                    Log.w(TAG, "Unknown result code " + resultCode
+                            + " sent to RefinementResultReceiver");
+                    break;
+            }
+        }
+
+        public void destroy() {
+            mChooserActivity = null;
+            mSelectedTarget = null;
+        }
+    }
 }
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index 99bf9f3..86c1b2f 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -30,6 +30,7 @@
     void startWatchingMode(int op, String packageName, IAppOpsCallback callback);
     void stopWatchingMode(IAppOpsCallback callback);
     IBinder getToken(IBinder clientToken);
+    int permissionToOpCode(String permission);
 
     // Remaining methods are only used in Java.
     int checkPackage(int uid, String packageName);
@@ -42,5 +43,4 @@
 
     void setUserRestrictions(in Bundle restrictions, int userHandle);
     void removeUser(int userHandle);
-
 }
diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
index d149c5b9..644adb6 100644
--- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
+++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
@@ -97,6 +97,12 @@
     void showSessionForActiveService(IVoiceInteractionSessionShowCallback showCallback);
 
     /**
+     * Notifies the active service that a launch was requested from the Keyguard. This will only
+     * be called if {@link #activeServiceSupportsLaunchFromKeyguard()} returns true.
+     */
+    void launchVoiceAssistFromKeyguard();
+
+    /**
      * Indicates whether there is a voice session running (but not necessarily showing).
      */
     boolean isSessionRunning();
@@ -105,5 +111,11 @@
      * Indicates whether the currently active voice interaction service is capable of handling the
      * assist gesture.
      */
-    boolean activeServiceSupportsAssistGesture();
+    boolean activeServiceSupportsAssist();
+
+    /**
+     * Indicates whether the currently active voice interaction service is capable of being launched
+     * from the lockscreen.
+     */
+    boolean activeServiceSupportsLaunchFromKeyguard();
 }
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 8dd7836..26cdf6b 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -25,7 +25,6 @@
 import android.text.TextUtils;
 import android.util.Slog;
 import android.widget.AbsListView;
-import android.widget.GridView;
 import com.android.internal.R;
 import com.android.internal.content.PackageMonitor;
 
@@ -83,7 +82,7 @@
  * which there is more than one matching activity, allowing the user to decide
  * which to go to.  It is not normally used directly by application developers.
  */
-public class ResolverActivity extends Activity implements AdapterView.OnItemClickListener {
+public class ResolverActivity extends Activity {
     private static final String TAG = "ResolverActivity";
     private static final boolean DEBUG = false;
 
@@ -93,8 +92,6 @@
     private boolean mSafeForwardingMode;
     private boolean mAlwaysUseOption;
     private AbsListView mAdapterView;
-    private ListView mListView;
-    private GridView mGridView;
     private Button mAlwaysButton;
     private Button mOnceButton;
     private View mProfileView;
@@ -102,7 +99,7 @@
     private int mLastSelected = AbsListView.INVALID_POSITION;
     private boolean mResolvingHome = false;
     private int mProfileSwitchMessageId = -1;
-    private Intent mIntent;
+    private final ArrayList<Intent> mIntents = new ArrayList<>();
 
     private UsageStatsManager mUsm;
     private Map<String, UsageStats> mStats;
@@ -217,6 +214,13 @@
         } catch (RemoteException e) {
             mLaunchedFromUid = -1;
         }
+
+        if (mLaunchedFromUid < 0 || UserHandle.isIsolated(mLaunchedFromUid)) {
+            // Gulp!
+            finish();
+            return;
+        }
+
         mPm = getPackageManager();
         mUsm = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
 
@@ -229,67 +233,11 @@
         final ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
         mIconDpi = am.getLauncherLargeIconDensity();
 
-        mIntent = new Intent(intent);
-        mAdapter = createAdapter(this, initialIntents, rList, mLaunchedFromUid, alwaysUseOption);
+        // Add our initial intent as the first item, regardless of what else has already been added.
+        mIntents.add(0, new Intent(intent));
 
-        final int layoutId;
-        final boolean useHeader;
-        if (mAdapter.hasFilteredItem()) {
-            layoutId = R.layout.resolver_list_with_default;
-            alwaysUseOption = false;
-            useHeader = true;
-        } else {
-            useHeader = false;
-            layoutId = getLayoutResource();
-        }
-        mAlwaysUseOption = alwaysUseOption;
+        configureContentView(mIntents, initialIntents, rList, alwaysUseOption);
 
-        if (mLaunchedFromUid < 0 || UserHandle.isIsolated(mLaunchedFromUid)) {
-            // Gulp!
-            finish();
-            return;
-        }
-
-        int count = mAdapter.mList.size();
-        if (count > 1 || (count == 1 && mAdapter.getOtherProfile() != null)) {
-            setContentView(layoutId);
-            mAdapterView = (AbsListView) findViewById(R.id.resolver_list);
-            mAdapterView.setAdapter(mAdapter);
-            mAdapterView.setOnItemClickListener(this);
-            mAdapterView.setOnItemLongClickListener(new ItemLongClickListener());
-
-            // Initialize the different types of collection views we may have. Depending
-            // on which ones are initialized later we'll configure different properties.
-            if (mAdapterView instanceof ListView) {
-                mListView = (ListView) mAdapterView;
-            }
-            if (mAdapterView instanceof GridView) {
-                mGridView = (GridView) mAdapterView;
-            }
-
-            if (alwaysUseOption) {
-                mAdapterView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
-            }
-
-            if (useHeader && mListView != null) {
-                mListView.addHeaderView(LayoutInflater.from(this).inflate(
-                        R.layout.resolver_different_item_header, mListView, false));
-            }
-        } else if (count == 1) {
-            safelyStartActivity(mAdapter.targetInfoForPosition(0, false));
-            mPackageMonitor.unregister();
-            mRegistered = false;
-            finish();
-            return;
-        } else {
-            setContentView(R.layout.resolver_list);
-
-            final TextView empty = (TextView) findViewById(R.id.empty);
-            empty.setVisibility(View.VISIBLE);
-
-            mAdapterView = (AbsListView) findViewById(R.id.resolver_list);
-            mAdapterView.setVisibility(View.GONE);
-        }
         // Prevent the Resolver window from becoming the top fullscreen window and thus from taking
         // control of the system bars.
         getWindow().clearFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR);
@@ -376,8 +324,16 @@
         }
     }
 
+    protected final void setAdditionalTargets(Intent[] intents) {
+        if (intents != null) {
+            for (Intent intent : intents) {
+                mIntents.add(intent);
+            }
+        }
+    }
+
     public Intent getTargetIntent() {
-        return mIntent;
+        return mIntents.isEmpty() ? null : mIntents.get(0);
     }
 
     private String getReferrerPackageName() {
@@ -540,29 +496,6 @@
         }
     }
 
-    @Override
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        if (mListView != null) {
-            position -= mListView.getHeaderViewsCount();
-        }
-        if (position < 0) {
-            // Header views don't count.
-            return;
-        }
-        final int checkedPos = mAdapterView.getCheckedItemPosition();
-        final boolean hasValidSelection = checkedPos != ListView.INVALID_POSITION;
-        if (mAlwaysUseOption && (!hasValidSelection || mLastSelected != checkedPos)) {
-            setAlwaysButtonEnabled(hasValidSelection, checkedPos, true);
-            mOnceButton.setEnabled(hasValidSelection);
-            if (hasValidSelection) {
-                mAdapterView.smoothScrollToPosition(checkedPos);
-            }
-            mLastSelected = checkedPos;
-        } else {
-            startSelected(position, false, true);
-        }
-    }
-
     private boolean hasManagedProfile() {
         UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
         if (userManager == null) {
@@ -630,8 +563,9 @@
         }
 
         TargetInfo target = mAdapter.targetInfoForPosition(which, filtered);
-        onTargetSelected(target, always);
-        finish();
+        if (onTargetSelected(target, always)) {
+            finish();
+        }
     }
 
     /**
@@ -641,7 +575,7 @@
         return defIntent;
     }
 
-    protected void onTargetSelected(TargetInfo target, boolean alwaysCheck) {
+    protected boolean onTargetSelected(TargetInfo target, boolean alwaysCheck) {
         final ResolveInfo ri = target.getResolveInfo();
         final Intent intent = target != null ? target.getResolvedIntent() : null;
 
@@ -728,7 +662,7 @@
                 ComponentName[] set = new ComponentName[N];
                 int bestMatch = 0;
                 for (int i=0; i<N; i++) {
-                    ResolveInfo r = mAdapter.mOrigResolveList.get(i);
+                    ResolveInfo r = mAdapter.mOrigResolveList.get(i).getResolveInfoAt(0);
                     set[i] = new ComponentName(r.activityInfo.packageName,
                             r.activityInfo.name);
                     if (r.match > bestMatch) bestMatch = r.match;
@@ -774,6 +708,7 @@
         if (target != null) {
             safelyStartActivity(target);
         }
+        return true;
     }
 
     void safelyStartActivity(TargetInfo cti) {
@@ -821,14 +756,68 @@
         startActivity(in);
     }
 
-    ResolveListAdapter createAdapter(Context context, Intent[] initialIntents,
-            List<ResolveInfo> rList, int launchedFromUid, boolean filterLastUsed) {
-        return new ResolveListAdapter(context, initialIntents, rList, launchedFromUid,
-                filterLastUsed);
+    ResolveListAdapter createAdapter(Context context, List<Intent> payloadIntents,
+            Intent[] initialIntents, List<ResolveInfo> rList, int launchedFromUid,
+            boolean filterLastUsed) {
+        return new ResolveListAdapter(context, payloadIntents, initialIntents, rList,
+                launchedFromUid, filterLastUsed);
     }
 
-    ResolveListAdapter getAdapter() {
-        return mAdapter;
+    void configureContentView(List<Intent> payloadIntents, Intent[] initialIntents,
+            List<ResolveInfo> rList, boolean alwaysUseOption) {
+        mAdapter = createAdapter(this, payloadIntents, initialIntents, rList,
+                mLaunchedFromUid, alwaysUseOption);
+
+        final int layoutId;
+        if (mAdapter.hasFilteredItem()) {
+            layoutId = R.layout.resolver_list_with_default;
+            alwaysUseOption = false;
+        } else {
+            layoutId = getLayoutResource();
+        }
+        mAlwaysUseOption = alwaysUseOption;
+
+        int count = mAdapter.mDisplayList.size();
+        if (count > 1 || (count == 1 && mAdapter.getOtherProfile() != null)) {
+            setContentView(layoutId);
+            mAdapterView = (AbsListView) findViewById(R.id.resolver_list);
+            onPrepareAdapterView(mAdapterView, mAdapter, alwaysUseOption);
+        } else if (count == 1) {
+            safelyStartActivity(mAdapter.targetInfoForPosition(0, false));
+            mPackageMonitor.unregister();
+            mRegistered = false;
+            finish();
+            return;
+        } else {
+            setContentView(R.layout.resolver_list);
+
+            final TextView empty = (TextView) findViewById(R.id.empty);
+            empty.setVisibility(View.VISIBLE);
+
+            mAdapterView = (AbsListView) findViewById(R.id.resolver_list);
+            mAdapterView.setVisibility(View.GONE);
+        }
+    }
+
+    void onPrepareAdapterView(AbsListView adapterView, ResolveListAdapter adapter,
+            boolean alwaysUseOption) {
+        final boolean useHeader = adapter.hasFilteredItem();
+        final ListView listView = adapterView instanceof ListView ? (ListView) adapterView : null;
+
+        adapterView.setAdapter(mAdapter);
+
+        final ItemClickListener listener = new ItemClickListener();
+        adapterView.setOnItemClickListener(listener);
+        adapterView.setOnItemLongClickListener(listener);
+
+        if (alwaysUseOption) {
+            listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
+        }
+
+        if (useHeader && listView != null) {
+            listView.addHeaderView(LayoutInflater.from(this).inflate(
+                    R.layout.resolver_different_item_header, listView, false));
+        }
     }
 
     final class DisplayResolveInfo implements TargetInfo {
@@ -837,15 +826,17 @@
         private Drawable mDisplayIcon;
         private final CharSequence mExtendedInfo;
         private final Intent mResolvedIntent;
+        private final List<Intent> mSourceIntents = new ArrayList<>();
 
-        DisplayResolveInfo(ResolveInfo pri, CharSequence pLabel,
+        DisplayResolveInfo(Intent originalIntent, ResolveInfo pri, CharSequence pLabel,
                 CharSequence pInfo, Intent pOrigIntent) {
+            mSourceIntents.add(originalIntent);
             mResolveInfo = pri;
             mDisplayLabel = pLabel;
             mExtendedInfo = pInfo;
 
             final Intent intent = new Intent(pOrigIntent != null ? pOrigIntent :
-                    getReplacementIntent(pri.activityInfo, mIntent));
+                    getReplacementIntent(pri.activityInfo, getTargetIntent()));
             intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT
                     | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
             final ActivityInfo ai = mResolveInfo.activityInfo;
@@ -854,6 +845,16 @@
             mResolvedIntent = intent;
         }
 
+        private DisplayResolveInfo(DisplayResolveInfo other, Intent fillInIntent, int flags) {
+            mSourceIntents.addAll(other.getAllSourceIntents());
+            mResolveInfo = other.mResolveInfo;
+            mDisplayLabel = other.mDisplayLabel;
+            mDisplayIcon = other.mDisplayIcon;
+            mExtendedInfo = other.mExtendedInfo;
+            mResolvedIntent = new Intent(other.mResolvedIntent);
+            mResolvedIntent.fillIn(fillInIntent, flags);
+        }
+
         public ResolveInfo getResolveInfo() {
             return mResolveInfo;
         }
@@ -866,6 +867,24 @@
             return mDisplayIcon;
         }
 
+        public Drawable getBadgeIcon() {
+            return null;
+        }
+
+        @Override
+        public TargetInfo cloneFilledIn(Intent fillInIntent, int flags) {
+            return new DisplayResolveInfo(this, fillInIntent, flags);
+        }
+
+        @Override
+        public List<Intent> getAllSourceIntents() {
+            return mSourceIntents;
+        }
+
+        public void addAlternateSourceIntent(Intent alt) {
+            mSourceIntents.add(alt);
+        }
+
         public void setDisplayIcon(Drawable icon) {
             mDisplayIcon = icon;
         }
@@ -986,9 +1005,25 @@
          * @return The drawable that should be used to represent this target
          */
         public Drawable getDisplayIcon();
+
+        /**
+         * @return The (small) icon to badge the target with
+         */
+        public Drawable getBadgeIcon();
+
+        /**
+         * Clone this target with the given fill-in information.
+         */
+        public TargetInfo cloneFilledIn(Intent fillInIntent, int flags);
+
+        /**
+         * @return the list of supported source intents deduped against this single target
+         */
+        public List<Intent> getAllSourceIntents();
     }
 
     class ResolveListAdapter extends BaseAdapter {
+        private final List<Intent> mIntents;
         private final Intent[] mInitialIntents;
         private final List<ResolveInfo> mBaseResolveList;
         private ResolveInfo mLastChosen;
@@ -998,19 +1033,21 @@
 
         protected final LayoutInflater mInflater;
 
-        List<DisplayResolveInfo> mList;
-        List<ResolveInfo> mOrigResolveList;
+        List<DisplayResolveInfo> mDisplayList;
+        List<ResolvedComponentInfo> mOrigResolveList;
 
         private int mLastChosenPosition = -1;
         private boolean mFilterLastUsed;
 
-        public ResolveListAdapter(Context context, Intent[] initialIntents,
-                List<ResolveInfo> rList, int launchedFromUid, boolean filterLastUsed) {
+        public ResolveListAdapter(Context context, List<Intent> payloadIntents,
+                Intent[] initialIntents, List<ResolveInfo> rList, int launchedFromUid,
+                boolean filterLastUsed) {
+            mIntents = payloadIntents;
             mInitialIntents = initialIntents;
             mBaseResolveList = rList;
             mLaunchedFromUid = launchedFromUid;
             mInflater = LayoutInflater.from(context);
-            mList = new ArrayList<>();
+            mDisplayList = new ArrayList<>();
             mFilterLastUsed = filterLastUsed;
             rebuildList();
         }
@@ -1027,7 +1064,7 @@
         public DisplayResolveInfo getFilteredItem() {
             if (mFilterLastUsed && mLastChosenPosition >= 0) {
                 // Not using getItem since it offsets to dodge this position for the list
-                return mList.get(mLastChosenPosition);
+                return mDisplayList.get(mLastChosenPosition);
             }
             return null;
         }
@@ -1048,11 +1085,12 @@
         }
 
         private void rebuildList() {
-            List<ResolveInfo> currentResolveList;
+            List<ResolvedComponentInfo> currentResolveList = null;
 
             try {
+                final Intent primaryIntent = getTargetIntent();
                 mLastChosen = AppGlobals.getPackageManager().getLastChosenActivity(
-                        mIntent, mIntent.resolveTypeIfNeeded(getContentResolver()),
+                        primaryIntent, primaryIntent.resolveTypeIfNeeded(getContentResolver()),
                         PackageManager.MATCH_DEFAULT_ONLY);
             } catch (RemoteException re) {
                 Log.d(TAG, "Error calling setLastChosenActivity\n" + re);
@@ -1060,15 +1098,27 @@
 
             // Clear the value of mOtherProfile from previous call.
             mOtherProfile = null;
-            mList.clear();
+            mDisplayList.clear();
             if (mBaseResolveList != null) {
-                currentResolveList = mOrigResolveList = mBaseResolveList;
+                currentResolveList = mOrigResolveList = new ArrayList<>();
+                addResolveListDedupe(currentResolveList, getTargetIntent(), mBaseResolveList);
             } else {
-                currentResolveList = mOrigResolveList = mPm.queryIntentActivities(mIntent,
-                        PackageManager.MATCH_DEFAULT_ONLY
-                        | (shouldGetResolvedFilter() ? PackageManager.GET_RESOLVED_FILTER : 0)
-                        | (shouldGetActivityMetadata() ? PackageManager.GET_META_DATA : 0)
-                );
+                final boolean shouldGetResolvedFilter = shouldGetResolvedFilter();
+                final boolean shouldGetActivityMetadata = shouldGetActivityMetadata();
+                for (int i = 0, N = mIntents.size(); i < N; i++) {
+                    final Intent intent = mIntents.get(i);
+                    final List<ResolveInfo> infos = mPm.queryIntentActivities(intent,
+                            PackageManager.MATCH_DEFAULT_ONLY
+                            | (shouldGetResolvedFilter ? PackageManager.GET_RESOLVED_FILTER : 0)
+                            | (shouldGetActivityMetadata ? PackageManager.GET_META_DATA : 0));
+                    if (infos != null) {
+                        if (currentResolveList == null) {
+                            currentResolveList = mOrigResolveList = new ArrayList<>();
+                        }
+                        addResolveListDedupe(currentResolveList, intent, infos);
+                    }
+                }
+
                 // Filter out any activities that the launched uid does not
                 // have permission for.  We don't do this when we have an explicit
                 // list of resolved activities, because that only happens when
@@ -1076,14 +1126,15 @@
                 // they gave us.
                 if (currentResolveList != null) {
                     for (int i=currentResolveList.size()-1; i >= 0; i--) {
-                        ActivityInfo ai = currentResolveList.get(i).activityInfo;
+                        ActivityInfo ai = currentResolveList.get(i)
+                                .getResolveInfoAt(0).activityInfo;
                         int granted = ActivityManager.checkComponentPermission(
                                 ai.permission, mLaunchedFromUid,
                                 ai.applicationInfo.uid, ai.exported);
                         if (granted != PackageManager.PERMISSION_GRANTED) {
                             // Access not allowed!
                             if (mOrigResolveList == currentResolveList) {
-                                mOrigResolveList = new ArrayList<ResolveInfo>(mOrigResolveList);
+                                mOrigResolveList = new ArrayList<>(mOrigResolveList);
                             }
                             currentResolveList.remove(i);
                         }
@@ -1094,9 +1145,10 @@
             if ((currentResolveList != null) && ((N = currentResolveList.size()) > 0)) {
                 // Only display the first matches that are either of equal
                 // priority or have asked to be default options.
-                ResolveInfo r0 = currentResolveList.get(0);
+                ResolvedComponentInfo rci0 = currentResolveList.get(0);
+                ResolveInfo r0 = rci0.getResolveInfoAt(0);
                 for (int i=1; i<N; i++) {
-                    ResolveInfo ri = currentResolveList.get(i);
+                    ResolveInfo ri = currentResolveList.get(i).getResolveInfoAt(0);
                     if (DEBUG) Log.v(
                         TAG,
                         r0.activityInfo.name + "=" +
@@ -1107,7 +1159,7 @@
                         r0.isDefault != ri.isDefault) {
                         while (i < N) {
                             if (mOrigResolveList == currentResolveList) {
-                                mOrigResolveList = new ArrayList<ResolveInfo>(mOrigResolveList);
+                                mOrigResolveList = new ArrayList<>(mOrigResolveList);
                             }
                             currentResolveList.remove(i);
                             N--;
@@ -1115,9 +1167,8 @@
                     }
                 }
                 if (N > 1) {
-                    Comparator<ResolveInfo> rComparator =
-                            new ResolverComparator(ResolverActivity.this, mIntent);
-                    Collections.sort(currentResolveList, rComparator);
+                    Collections.sort(currentResolveList,
+                            new ResolverComparator(ResolverActivity.this, getTargetIntent()));
                 }
                 // First put the initial items at the top.
                 if (mInitialIntents != null) {
@@ -1146,14 +1197,15 @@
                             ri.nonLocalizedLabel = li.getNonLocalizedLabel();
                             ri.icon = li.getIconResource();
                         }
-                        addResolveInfo(new DisplayResolveInfo(ri,
+                        addResolveInfo(new DisplayResolveInfo(ii, ri,
                                 ri.loadLabel(getPackageManager()), null, ii));
                     }
                 }
 
                 // Check for applications with same name and use application name or
                 // package name if necessary
-                r0 = currentResolveList.get(0);
+                rci0 = currentResolveList.get(0);
+                r0 = rci0.getResolveInfoAt(0);
                 int start = 0;
                 CharSequence r0Label =  r0.loadLabel(mPm);
                 mHasExtendedInfo = false;
@@ -1161,7 +1213,8 @@
                     if (r0Label == null) {
                         r0Label = r0.activityInfo.packageName;
                     }
-                    ResolveInfo ri = currentResolveList.get(i);
+                    ResolvedComponentInfo rci = currentResolveList.get(i);
+                    ResolveInfo ri = rci.getResolveInfoAt(0);
                     CharSequence riLabel = ri.loadLabel(mPm);
                     if (riLabel == null) {
                         riLabel = ri.activityInfo.packageName;
@@ -1169,13 +1222,14 @@
                     if (riLabel.equals(r0Label)) {
                         continue;
                     }
-                    processGroup(currentResolveList, start, (i-1), r0, r0Label);
+                    processGroup(currentResolveList, start, (i-1), rci0, r0Label);
+                    rci0 = rci;
                     r0 = ri;
                     r0Label = riLabel;
                     start = i;
                 }
                 // Process last group
-                processGroup(currentResolveList, start, (N-1), r0, r0Label);
+                processGroup(currentResolveList, start, (N-1), rci0, r0Label);
             }
 
             // Layout doesn't handle both profile button and last chosen
@@ -1188,6 +1242,36 @@
             onListRebuilt();
         }
 
+        private void addResolveListDedupe(List<ResolvedComponentInfo> into, Intent intent,
+                List<ResolveInfo> from) {
+            final int fromCount = from.size();
+            final int intoCount = into.size();
+            for (int i = 0; i < fromCount; i++) {
+                final ResolveInfo newInfo = from.get(i);
+                boolean found = false;
+                // Only loop to the end of into as it was before we started; no dupes in from.
+                for (int j = 0; j < intoCount; j++) {
+                    final ResolvedComponentInfo rci = into.get(i);
+                    if (isSameResolvedComponent(newInfo, rci)) {
+                        found = true;
+                        rci.add(intent, newInfo);
+                        break;
+                    }
+                }
+                if (!found) {
+                    into.add(new ResolvedComponentInfo(new ComponentName(
+                            newInfo.activityInfo.packageName, newInfo.activityInfo.name),
+                            intent, newInfo));
+                }
+            }
+        }
+
+        private boolean isSameResolvedComponent(ResolveInfo a, ResolvedComponentInfo b) {
+            final ActivityInfo ai = a.activityInfo;
+            return ai.packageName.equals(b.name.getPackageName())
+                    && ai.name.equals(b.name.getClassName());
+        }
+
         public void onListRebuilt() {
             // This space for rent
         }
@@ -1196,18 +1280,18 @@
             return mFilterLastUsed;
         }
 
-        private void processGroup(List<ResolveInfo> rList, int start, int end, ResolveInfo ro,
-                CharSequence roLabel) {
+        private void processGroup(List<ResolvedComponentInfo> rList, int start, int end,
+                ResolvedComponentInfo ro, CharSequence roLabel) {
             // Process labels from start to i
             int num = end - start+1;
             if (num == 1) {
                 // No duplicate labels. Use label for entry at start
-                addResolveInfo(new DisplayResolveInfo(ro, roLabel, null, null));
-                updateLastChosenPosition(ro);
+                addResolveInfoWithAlternates(ro, null, roLabel);
             } else {
                 mHasExtendedInfo = true;
                 boolean usePkg = false;
-                CharSequence startApp = ro.activityInfo.applicationInfo.loadLabel(mPm);
+                CharSequence startApp = ro.getResolveInfoAt(0).activityInfo.applicationInfo
+                        .loadLabel(mPm);
                 if (startApp == null) {
                     usePkg = true;
                 }
@@ -1217,7 +1301,7 @@
                         new HashSet<CharSequence>();
                     duplicates.add(startApp);
                     for (int j = start+1; j <= end ; j++) {
-                        ResolveInfo jRi = rList.get(j);
+                        ResolveInfo jRi = rList.get(j).getResolveInfoAt(0);
                         CharSequence jApp = jRi.activityInfo.applicationInfo.loadLabel(mPm);
                         if ( (jApp == null) || (duplicates.contains(jApp))) {
                             usePkg = true;
@@ -1230,26 +1314,46 @@
                     duplicates.clear();
                 }
                 for (int k = start; k <= end; k++) {
-                    ResolveInfo add = rList.get(k);
+                    final ResolvedComponentInfo rci = rList.get(k);
+                    final ResolveInfo add = rci.getResolveInfoAt(0);
+                    final CharSequence extraInfo;
                     if (usePkg) {
-                        // Use application name for all entries from start to end-1
-                        addResolveInfo(new DisplayResolveInfo(add, roLabel,
-                                add.activityInfo.packageName, null));
-                    } else {
                         // Use package name for all entries from start to end-1
-                        addResolveInfo(new DisplayResolveInfo(add, roLabel,
-                                add.activityInfo.applicationInfo.loadLabel(mPm), null));
+                        extraInfo = add.activityInfo.packageName;
+                    } else {
+                        // Use application name for all entries from start to end-1
+                        extraInfo = add.activityInfo.applicationInfo.loadLabel(mPm);
                     }
-                    updateLastChosenPosition(add);
+                    addResolveInfoWithAlternates(rci, extraInfo, roLabel);
                 }
             }
         }
 
+        private void addResolveInfoWithAlternates(ResolvedComponentInfo rci,
+                CharSequence extraInfo, CharSequence roLabel) {
+            final int count = rci.getCount();
+            final Intent intent = rci.getIntentAt(0);
+            final ResolveInfo add = rci.getResolveInfoAt(0);
+            final Intent replaceIntent = getReplacementIntent(add.activityInfo, intent);
+            final DisplayResolveInfo dri = new DisplayResolveInfo(intent, add, roLabel,
+                    extraInfo, replaceIntent);
+            addResolveInfo(dri);
+            if (replaceIntent == intent) {
+                // Only add alternates if we didn't get a specific replacement from
+                // the caller. If we have one it trumps potential alternates.
+                for (int i = 1, N = count; i < N; i++) {
+                    final Intent altIntent = rci.getIntentAt(i);
+                    dri.addAlternateSourceIntent(altIntent);
+                }
+            }
+            updateLastChosenPosition(add);
+        }
+
         private void updateLastChosenPosition(ResolveInfo info) {
             if (mLastChosen != null
                     && mLastChosen.activityInfo.packageName.equals(info.activityInfo.packageName)
                     && mLastChosen.activityInfo.name.equals(info.activityInfo.name)) {
-                mLastChosenPosition = mList.size() - 1;
+                mLastChosenPosition = mDisplayList.size() - 1;
             }
         }
 
@@ -1259,20 +1363,21 @@
                 // The first one we see gets special treatment.
                 mOtherProfile = dri;
             } else {
-                mList.add(dri);
+                mDisplayList.add(dri);
             }
         }
 
         public ResolveInfo resolveInfoForPosition(int position, boolean filtered) {
-            return (filtered ? getItem(position) : mList.get(position)).getResolveInfo();
+            return (filtered ? getItem(position) : mDisplayList.get(position))
+                    .getResolveInfo();
         }
 
         public TargetInfo targetInfoForPosition(int position, boolean filtered) {
-            return filtered ? getItem(position) : mList.get(position);
+            return filtered ? getItem(position) : mDisplayList.get(position);
         }
 
         public int getCount() {
-            int result = mList.size();
+            int result = mDisplayList.size();
             if (mFilterLastUsed && mLastChosenPosition >= 0) {
                 result--;
             }
@@ -1283,7 +1388,7 @@
             if (mFilterLastUsed && mLastChosenPosition >= 0 && position >= mLastChosenPosition) {
                 position++;
             }
-            return mList.get(position);
+            return mDisplayList.get(position);
         }
 
         public long getItemId(int position) {
@@ -1295,8 +1400,8 @@
         }
 
         public boolean hasResolvedTarget(ResolveInfo info) {
-            for (int i = 0, N = mList.size(); i < N; i++) {
-                if (info.equals(mList.get(i).getResolveInfo())) {
+            for (int i = 0, N = mDisplayList.size(); i < N; i++) {
+                if (info.equals(mDisplayList.get(i).getResolveInfo())) {
                     return true;
                 }
             }
@@ -1304,26 +1409,31 @@
         }
 
         protected int getDisplayResolveInfoCount() {
-            return mList.size();
+            return mDisplayList.size();
         }
 
         protected DisplayResolveInfo getDisplayResolveInfo(int index) {
-            return mList.get(index);
+            // Used to query services. We only query services for primary targets, not alternates.
+            return mDisplayList.get(index);
         }
 
         public final View getView(int position, View convertView, ViewGroup parent) {
             View view = convertView;
             if (view == null) {
                 view = createView(parent);
-
-                final ViewHolder holder = new ViewHolder(view);
-                view.setTag(holder);
             }
-            bindView(view, getItem(position));
+            onBindView(view, getItem(position));
             return view;
         }
 
-        public View createView(ViewGroup parent) {
+        public final View createView(ViewGroup parent) {
+            final View view = onCreateView(parent);
+            final ViewHolder holder = new ViewHolder(view);
+            view.setTag(holder);
+            return view;
+        }
+
+        public View onCreateView(ViewGroup parent) {
             return mInflater.inflate(
                     com.android.internal.R.layout.resolve_list_item, parent, false);
         }
@@ -1332,7 +1442,11 @@
             return !TextUtils.isEmpty(info.getExtendedInfo());
         }
 
-        private final void bindView(View view, TargetInfo info) {
+        public final void bindView(int position, View view) {
+            onBindView(view, getItem(position));
+        }
+
+        private void onBindView(View view, TargetInfo info) {
             final ViewHolder holder = (ViewHolder) view.getTag();
             holder.text.setText(info.getDisplayLabel());
             if (showsExtendedInfo(info)) {
@@ -1346,6 +1460,61 @@
                 new LoadAdapterIconTask((DisplayResolveInfo) info).execute();
             }
             holder.icon.setImageDrawable(info.getDisplayIcon());
+            if (holder.badge != null) {
+                final Drawable badge = info.getBadgeIcon();
+                if (badge != null) {
+                    holder.badge.setImageDrawable(badge);
+                    holder.badge.setVisibility(View.VISIBLE);
+                } else {
+                    holder.badge.setVisibility(View.GONE);
+                }
+            }
+        }
+    }
+
+    static final class ResolvedComponentInfo {
+        public final ComponentName name;
+        private final List<Intent> mIntents = new ArrayList<>();
+        private final List<ResolveInfo> mResolveInfos = new ArrayList<>();
+
+        public ResolvedComponentInfo(ComponentName name, Intent intent, ResolveInfo info) {
+            this.name = name;
+            add(intent, info);
+        }
+
+        public void add(Intent intent, ResolveInfo info) {
+            mIntents.add(intent);
+            mResolveInfos.add(info);
+        }
+
+        public int getCount() {
+            return mIntents.size();
+        }
+
+        public Intent getIntentAt(int index) {
+            return index >= 0 ? mIntents.get(index) : null;
+        }
+
+        public ResolveInfo getResolveInfoAt(int index) {
+            return index >= 0 ? mResolveInfos.get(index) : null;
+        }
+
+        public int findIntent(Intent intent) {
+            for (int i = 0, N = mIntents.size(); i < N; i++) {
+                if (intent.equals(mIntents.get(i))) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+
+        public int findResolveInfo(ResolveInfo info) {
+            for (int i = 0, N = mResolveInfos.size(); i < N; i++) {
+                if (info.equals(mResolveInfos.get(i))) {
+                    return i;
+                }
+            }
+            return -1;
         }
     }
 
@@ -1353,20 +1522,47 @@
         public TextView text;
         public TextView text2;
         public ImageView icon;
+        public ImageView badge;
 
         public ViewHolder(View view) {
             text = (TextView) view.findViewById(com.android.internal.R.id.text1);
             text2 = (TextView) view.findViewById(com.android.internal.R.id.text2);
             icon = (ImageView) view.findViewById(R.id.icon);
+            badge = (ImageView) view.findViewById(R.id.target_badge);
         }
     }
 
-    class ItemLongClickListener implements AdapterView.OnItemLongClickListener {
+    class ItemClickListener implements AdapterView.OnItemClickListener,
+            AdapterView.OnItemLongClickListener {
+        @Override
+        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+            final ListView listView = parent instanceof ListView ? (ListView) parent : null;
+            if (listView != null) {
+                position -= listView.getHeaderViewsCount();
+            }
+            if (position < 0) {
+                // Header views don't count.
+                return;
+            }
+            final int checkedPos = mAdapterView.getCheckedItemPosition();
+            final boolean hasValidSelection = checkedPos != ListView.INVALID_POSITION;
+            if (mAlwaysUseOption && (!hasValidSelection || mLastSelected != checkedPos)) {
+                setAlwaysButtonEnabled(hasValidSelection, checkedPos, true);
+                mOnceButton.setEnabled(hasValidSelection);
+                if (hasValidSelection) {
+                    mAdapterView.smoothScrollToPosition(checkedPos);
+                }
+                mLastSelected = checkedPos;
+            } else {
+                startSelected(position, false, true);
+            }
+        }
 
         @Override
         public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
-            if (mListView != null) {
-                position -= mListView.getHeaderViewsCount();
+            final ListView listView = parent instanceof ListView ? (ListView) parent : null;
+            if (listView != null) {
+                position -= listView.getHeaderViewsCount();
             }
             if (position < 0) {
                 // Header views don't count.
@@ -1435,7 +1631,7 @@
                 && match <= IntentFilter.MATCH_CATEGORY_PATH;
     }
 
-    class ResolverComparator implements Comparator<ResolveInfo> {
+    class ResolverComparator implements Comparator<ResolvedComponentInfo> {
         private final Collator mCollator;
         private final boolean mHttp;
 
@@ -1446,7 +1642,10 @@
         }
 
         @Override
-        public int compare(ResolveInfo lhs, ResolveInfo rhs) {
+        public int compare(ResolvedComponentInfo lhsp, ResolvedComponentInfo rhsp) {
+            final ResolveInfo lhs = lhsp.getResolveInfoAt(0);
+            final ResolveInfo rhs = rhsp.getResolveInfoAt(0);
+
             // We want to put the one targeted to another user at the end of the dialog.
             if (lhs.targetUserId != UserHandle.USER_CURRENT) {
                 return 1;
@@ -1487,7 +1686,6 @@
                 if (stats != null) {
                     return stats.getTotalTimeInForeground();
                 }
-
             }
             return 0;
         }
diff --git a/core/java/com/android/internal/app/RestrictionsPinActivity.java b/core/java/com/android/internal/app/RestrictionsPinActivity.java
deleted file mode 100644
index 66585c6..0000000
--- a/core/java/com/android/internal/app/RestrictionsPinActivity.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.app;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.os.UserManager;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-import com.android.internal.R;
-
-/**
- * This activity is launched by Settings and other apps to either create a new PIN or
- * challenge for an existing PIN. The PIN is maintained by UserManager.
- */
-public class RestrictionsPinActivity extends AlertActivity
-        implements OnClickListener, TextWatcher, OnEditorActionListener {
-
-    protected UserManager mUserManager;
-    protected boolean mHasRestrictionsPin;
-
-    protected EditText mPinText;
-    protected TextView mPinErrorMessage;
-    private Button mOkButton;
-    private Button mCancelButton;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
-        mHasRestrictionsPin = mUserManager.hasRestrictionsChallenge();
-        initUi();
-        setupAlert();
-    }
-
-    protected void initUi() {
-        AlertController.AlertParams ap = mAlertParams;
-        ap.mTitle = getString(R.string.restr_pin_enter_admin_pin);
-        LayoutInflater inflater =
-                (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        ap.mView = inflater.inflate(R.layout.restrictions_pin_challenge, null);
-
-        mPinErrorMessage = (TextView) ap.mView.findViewById(R.id.pin_error_message);
-        mPinText = (EditText) ap.mView.findViewById(R.id.pin_text);
-        mOkButton = (Button) ap.mView.findViewById(R.id.pin_ok_button);
-        mCancelButton = (Button) ap.mView.findViewById(R.id.pin_cancel_button);
-
-        mPinText.addTextChangedListener(this);
-
-        mOkButton.setOnClickListener(this);
-        mCancelButton.setOnClickListener(this);
-    }
-
-    protected boolean verifyingPin() {
-        return true;
-    }
-
-    public void onResume() {
-        super.onResume();
-
-        setPositiveButtonState(false);
-        boolean hasPin = mUserManager.hasRestrictionsChallenge();
-        if (hasPin) {
-            mPinErrorMessage.setVisibility(View.INVISIBLE);
-            mPinText.setOnEditorActionListener(this);
-            updatePinTimer(-1);
-        } else if (verifyingPin()) {
-            setResult(RESULT_OK);
-            finish();
-        }
-    }
-
-    protected void setPositiveButtonState(boolean enabled) {
-        mOkButton.setEnabled(enabled);
-    }
-
-    private boolean updatePinTimer(int pinTimerMs) {
-        if (pinTimerMs < 0) {
-            pinTimerMs = mUserManager.checkRestrictionsChallenge(null);
-        }
-        boolean enableInput;
-        if (pinTimerMs >= 200) {
-            // Do the count down timer for less than a minute, otherwise just say try again later.
-            if (pinTimerMs <= 60000) {
-                final int seconds = (pinTimerMs + 200) / 1000;
-                final String formatString = getResources().getQuantityString(
-                        R.plurals.restr_pin_countdown,
-                        seconds);
-                mPinErrorMessage.setText(String.format(formatString, seconds));
-            } else {
-                mPinErrorMessage.setText(R.string.restr_pin_try_later);
-            }
-            enableInput = false;
-            mPinErrorMessage.setVisibility(View.VISIBLE);
-            mPinText.setText("");
-            mPinText.postDelayed(mCountdownRunnable, Math.min(1000, pinTimerMs));
-        } else {
-            enableInput = true;
-            mPinErrorMessage.setText(R.string.restr_pin_incorrect);
-        }
-        mPinText.setEnabled(enableInput);
-        setPositiveButtonState(enableInput);
-        return enableInput;
-    }
-
-    protected void performPositiveButtonAction() {
-        int result = mUserManager.checkRestrictionsChallenge(mPinText.getText().toString());
-        if (result == UserManager.PIN_VERIFICATION_SUCCESS) {
-            setResult(RESULT_OK);
-            finish();
-        } else if (result >= 0) {
-            mPinErrorMessage.setText(R.string.restr_pin_incorrect);
-            mPinErrorMessage.setVisibility(View.VISIBLE);
-            updatePinTimer(result);
-            mPinText.setText("");
-        }
-    }
-
-    @Override
-    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-    }
-
-    @Override
-    public void onTextChanged(CharSequence s, int start, int before, int count) {
-        CharSequence pin = mPinText.getText();
-        setPositiveButtonState(pin != null && pin.length() >= 4);
-    }
-
-    @Override
-    public void afterTextChanged(Editable s) {
-    }
-
-    @Override
-    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-        performPositiveButtonAction();
-        return true;
-    }
-
-    private Runnable mCountdownRunnable = new Runnable() {
-        public void run() {
-            if (updatePinTimer(-1)) {
-                // If we are no longer counting down, clear the message.
-                mPinErrorMessage.setVisibility(View.INVISIBLE);
-            }
-        }
-    };
-
-    @Override
-    public void onClick(View v) {
-        if (v == mOkButton) {
-            performPositiveButtonAction();
-        } else if (v == mCancelButton) {
-            setResult(RESULT_CANCELED);
-            finish();
-        }
-    }
-}
diff --git a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
index 008d38b..7d3db02 100644
--- a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
+++ b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
@@ -65,5 +65,6 @@
             in IBinder connection);
     void unbindRemoteViewsService(String callingPackage, int appWidgetId, in Intent intent);
     int[] getAppWidgetIds(in ComponentName providerComponent);
+    boolean isBoundWidgetPackage(String packageName, int userId);
 }
 
diff --git a/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java b/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java
index 52485dd..ce94727 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java
@@ -196,7 +196,7 @@
         }
 
         public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList(
-                boolean showSubtypes, boolean inputShown, boolean isScreenLocked) {
+                boolean showSubtypes, boolean includeAuxiliarySubtypes, boolean isScreenLocked) {
             final ArrayList<ImeSubtypeListItem> imList =
                     new ArrayList<ImeSubtypeListItem>();
             final HashMap<InputMethodInfo, List<InputMethodSubtype>> immis =
@@ -205,6 +205,12 @@
             if (immis == null || immis.size() == 0) {
                 return Collections.emptyList();
             }
+            if (isScreenLocked && includeAuxiliarySubtypes) {
+                if (DEBUG) {
+                    Slog.w(TAG, "Auxiliary subtypes are not allowed to be shown in lock screen.");
+                }
+                includeAuxiliarySubtypes = false;
+            }
             mSortedImmis.clear();
             mSortedImmis.putAll(immis);
             for (InputMethodInfo imi : mSortedImmis.keySet()) {
@@ -227,7 +233,7 @@
                         final String subtypeHashCode = String.valueOf(subtype.hashCode());
                         // We show all enabled IMEs and subtypes when an IME is shown.
                         if (enabledSubtypeSet.contains(subtypeHashCode)
-                                && ((inputShown && !isScreenLocked) || !subtype.isAuxiliary())) {
+                                && (includeAuxiliarySubtypes || !subtype.isAuxiliary())) {
                             final CharSequence subtypeLabel =
                                     subtype.overridesImplicitlyEnabledSubtype() ? null : subtype
                                             .getDisplayName(mContext, imi.getPackageName(),
@@ -516,8 +522,8 @@
     }
 
     public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeListLocked(boolean showSubtypes,
-            boolean inputShown, boolean isScreenLocked) {
+            boolean includingAuxiliarySubtypes, boolean isScreenLocked) {
         return mSubtypeList.getSortedInputMethodAndSubtypeList(
-                showSubtypes, inputShown, isScreenLocked);
+                showSubtypes, includingAuxiliarySubtypes, isScreenLocked);
     }
 }
diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java
index 3f96174..cf25cef 100644
--- a/core/java/com/android/internal/logging/MetricsLogger.java
+++ b/core/java/com/android/internal/logging/MetricsLogger.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.os.Build;
+import android.view.View;
 
 /**
  * Log all the things.
@@ -26,12 +27,44 @@
  */
 public class MetricsLogger implements MetricsConstants {
     // These constants are temporary, they should migrate to MetricsConstants.
-    // next value is 148;
 
     public static final int NOTIFICATION_ZEN_MODE_SCHEDULE_RULE = 144;
     public static final int NOTIFICATION_ZEN_MODE_EXTERNAL_RULE = 145;
     public static final int ACTION_BAN_APP_NOTES = 146;
     public static final int NOTIFICATION_ZEN_MODE_EVENT_RULE = 147;
+    public static final int ACTION_DISMISS_ALL_NOTES = 148;
+    public static final int QS_DND_DETAILS = 149;
+    public static final int QS_BLUETOOTH_DETAILS = 150;
+    public static final int QS_CAST_DETAILS = 151;
+    public static final int QS_WIFI_DETAILS = 152;
+    public static final int QS_WIFI_TOGGLE = 153;
+    public static final int QS_BLUETOOTH_TOGGLE = 154;
+    public static final int QS_CELLULAR_TOGGLE = 155;
+    public static final int QS_SWITCH_USER = 156;
+    public static final int QS_CAST_SELECT = 157;
+    public static final int QS_CAST_DISCONNECT = 158;
+    public static final int ACTION_BLUETOOTH_TOGGLE = 159;
+    public static final int ACTION_BLUETOOTH_SCAN = 160;
+    public static final int ACTION_BLUETOOTH_RENAME = 161;
+    public static final int ACTION_BLUETOOTH_FILES = 162;
+    public static final int QS_DND_TIME = 163;
+    public static final int QS_DND_CONDITION_SELECT = 164;
+    public static final int QS_DND_ZEN_SELECT = 165;
+    public static final int QS_DND_TOGGLE = 166;
+    public static final int ACTION_ZEN_ALLOW_REMINDERS = 167;
+    public static final int ACTION_ZEN_ALLOW_EVENTS = 168;
+    public static final int ACTION_ZEN_ALLOW_MESSAGES = 169;
+    public static final int ACTION_ZEN_ALLOW_CALLS = 170;
+    public static final int ACTION_ZEN_ALLOW_REPEAT_CALLS = 171;
+    public static final int ACTION_ZEN_ADD_RULE = 172;
+    public static final int ACTION_ZEN_ADD_RULE_OK = 173;
+    public static final int ACTION_ZEN_DELETE_RULE = 174;
+    public static final int ACTION_ZEN_DELETE_RULE_OK = 175;
+    public static final int ACTION_ZEN_ENABLE_RULE = 176;
+    public static final int ACTION_AIRPLANE_TOGGLE = 177;
+    public static final int ACTION_CELL_DATA_TOGGLE = 178;
+    public static final int NOTIFICATION_ACCESS = 179;
+    public static final int NOTIFICATION_ZEN_MODE_ACCESS = 180;
 
     public static void visible(Context context, int category) throws IllegalArgumentException {
         if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
@@ -40,17 +73,39 @@
         EventLogTags.writeSysuiViewVisibility(category, 100);
     }
 
-    public static void hidden(Context context, int category) {
+    public static void hidden(Context context, int category) throws IllegalArgumentException {
         if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
             throw new IllegalArgumentException("Must define metric category");
         }
         EventLogTags.writeSysuiViewVisibility(category, 0);
     }
 
+    public static void visibility(Context context, int category, boolean visibile)
+            throws IllegalArgumentException {
+        if (visibile) {
+            visible(context, category);
+        } else {
+            hidden(context, category);
+        }
+    }
+
+    public static void visibility(Context context, int category, int vis)
+            throws IllegalArgumentException {
+        visibility(context, category, vis == View.VISIBLE);
+    }
+
     public static void action(Context context, int category) {
         action(context, category, "");
     }
 
+    public static void action(Context context, int category, int value) {
+        action(context, category, Integer.toString(value));
+    }
+
+    public static void action(Context context, int category, boolean value) {
+        action(context, category, Boolean.toString(value));
+    }
+
     public static void action(Context context, int category, String pkg) {
         if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
             throw new IllegalArgumentException("Must define metric category");
diff --git a/core/java/com/android/internal/midi/MidiConstants.java b/core/java/com/android/internal/midi/MidiConstants.java
index f78f75a..c13e5fc 100644
--- a/core/java/com/android/internal/midi/MidiConstants.java
+++ b/core/java/com/android/internal/midi/MidiConstants.java
@@ -87,13 +87,13 @@
     }
 
     // Returns true if this command can be used for running status
-    public static boolean allowRunningStatus(int command) {
+    public static boolean allowRunningStatus(byte command) {
         // only Channel Voice and Channel Mode commands can use running status
         return (command >= STATUS_NOTE_OFF && command < STATUS_SYSTEM_EXCLUSIVE);
     }
 
     // Returns true if this command cancels running status
-    public static boolean cancelsRunningStatus(int command) {
+    public static boolean cancelsRunningStatus(byte command) {
         // System Common messages cancel running status
         return (command >= STATUS_SYSTEM_EXCLUSIVE && command <= STATUS_END_SYSEX);
     }
diff --git a/core/java/com/android/internal/os/BinderInternal.java b/core/java/com/android/internal/os/BinderInternal.java
index 240d9df..d77b998 100644
--- a/core/java/com/android/internal/os/BinderInternal.java
+++ b/core/java/com/android/internal/os/BinderInternal.java
@@ -20,6 +20,8 @@
 import android.os.SystemClock;
 import android.util.EventLog;
 
+import dalvik.system.VMRuntime;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 
@@ -96,7 +98,7 @@
     
     public static void forceGc(String reason) {
         EventLog.writeEvent(2741, reason);
-        Runtime.getRuntime().gc();
+        VMRuntime.getRuntime().requestConcurrentGC();
     }
     
     static void forceBinderGc() {
diff --git a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
index 9711c3b..8586d76 100644
--- a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
+++ b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
@@ -52,7 +52,7 @@
     public MobileRadioPowerCalculator(PowerProfile profile, BatteryStats stats) {
         mPowerRadioOn = profile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE);
         for (int i = 0; i < mPowerBins.length; i++) {
-            mPowerBins[i] = profile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE, i);
+            mPowerBins[i] = profile.getAveragePower(PowerProfile.POWER_RADIO_ON, i);
         }
         mPowerScan = profile.getAveragePower(PowerProfile.POWER_RADIO_SCANNING);
         mStats = stats;
@@ -128,7 +128,9 @@
         }
 
         if (power != 0) {
-            app.noCoveragePercent = noCoverageTimeMs * 100.0 / signalTimeMs;
+            if (signalTimeMs != 0) {
+                app.noCoveragePercent = noCoverageTimeMs * 100.0 / signalTimeMs;
+            }
             app.mobileActive = remainingActiveTimeMs;
             app.mobileActiveCount = stats.getMobileRadioActiveUnknownCount(statsType);
             app.mobileRadioPowerMah = power;
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 75b6446..1e7ee5a 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -40,6 +40,8 @@
     public static final int DEBUG_ENABLE_JNI_LOGGING = 1 << 4;
     /** enable the JIT compiler */
     public static final int DEBUG_ENABLE_JIT         = 1 << 5;
+    /** Force generation of CFI code */
+    public static final int DEBUG_GENERATE_CFI       = 1 << 6;
 
     /** No external storage should be mounted. */
     public static final int MOUNT_EXTERNAL_NONE = 0;
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index 9106ccd..969d236 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -321,7 +321,7 @@
 
         /**
          * From --enable-debugger, --enable-checkjni, --enable-assert,
-         * --enable-safemode, --enable-jit, and --enable-jni-logging.
+         * --enable-safemode, --enable-jit, --generate-cfi and --enable-jni-logging.
          */
         int debugFlags;
 
@@ -433,6 +433,8 @@
                     debugFlags |= Zygote.DEBUG_ENABLE_CHECKJNI;
                 } else if (arg.equals("--enable-jit")) {
                     debugFlags |= Zygote.DEBUG_ENABLE_JIT;
+                } else if (arg.equals("--generate-cfi")) {
+                    debugFlags |= Zygote.DEBUG_GENERATE_CFI;
                 } else if (arg.equals("--enable-jni-logging")) {
                     debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING;
                 } else if (arg.equals("--enable-assert")) {
diff --git a/core/java/android/view/PhoneFallbackEventHandler.java b/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java
similarity index 98%
rename from core/java/android/view/PhoneFallbackEventHandler.java
rename to core/java/com/android/internal/policy/PhoneFallbackEventHandler.java
index 350650d..2cb9c25 100644
--- a/core/java/android/view/PhoneFallbackEventHandler.java
+++ b/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.view;
+package com.android.internal.policy;
 
 import android.app.KeyguardManager;
 import android.app.SearchManager;
@@ -28,10 +28,11 @@
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
 import android.util.Log;
-import android.view.View;
-import android.view.HapticFeedbackConstants;
 import android.view.FallbackEventHandler;
+import android.view.HapticFeedbackConstants;
 import android.view.KeyEvent;
+import android.view.View;
+import com.android.internal.policy.PhoneWindow;
 
 /**
  * @hide
diff --git a/core/java/android/view/PhoneLayoutInflater.java b/core/java/com/android/internal/policy/PhoneLayoutInflater.java
similarity index 95%
rename from core/java/android/view/PhoneLayoutInflater.java
rename to core/java/com/android/internal/policy/PhoneLayoutInflater.java
index 7d89a0b..991b6bb 100644
--- a/core/java/android/view/PhoneLayoutInflater.java
+++ b/core/java/com/android/internal/policy/PhoneLayoutInflater.java
@@ -14,10 +14,12 @@
  * limitations under the License.
  */
 
-package android.view;
+package com.android.internal.policy;
 
 import android.content.Context;
 import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
 
 /**
  * @hide
diff --git a/core/java/android/view/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
similarity index 98%
rename from core/java/android/view/PhoneWindow.java
rename to core/java/com/android/internal/policy/PhoneWindow.java
index a3e7a10..a578a6e 100644
--- a/core/java/android/view/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.view;
+package com.android.internal.policy;
 
 import static android.view.View.MeasureSpec.AT_MOST;
 import static android.view.View.MeasureSpec.EXACTLY;
@@ -27,6 +27,34 @@
 import android.app.SearchManager;
 import android.os.UserHandle;
 
+import android.view.ActionMode;
+import android.view.ContextThemeWrapper;
+import android.view.Display;
+import android.view.Gravity;
+import android.view.IRotationWatcher.Stub;
+import android.view.IWindowManager;
+import android.view.InputDevice;
+import android.view.InputEvent;
+import android.view.InputQueue;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.SearchEvent;
+import android.view.SurfaceHolder.Callback2;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.view.ViewManager;
+import android.view.ViewParent;
+import android.view.ViewRootImpl;
+import android.view.ViewStub;
+import android.view.ViewTreeObserver.OnPreDrawListener;
+import android.view.Window;
+import android.view.WindowInsets;
+import android.view.WindowManager;
 import com.android.internal.R;
 import com.android.internal.util.ScreenShapeHelper;
 import com.android.internal.view.FloatingActionMode;
@@ -67,7 +95,6 @@
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.os.SystemProperties;
 import android.transition.Scene;
 import android.transition.Transition;
 import android.transition.TransitionInflater;
@@ -140,7 +167,7 @@
 
     private ViewGroup mContentRoot;
 
-    SurfaceHolder.Callback2 mTakeSurfaceCallback;
+    Callback2 mTakeSurfaceCallback;
 
     InputQueue.Callback mTakeInputQueueCallback;
 
@@ -427,7 +454,7 @@
     }
 
     @Override
-    public void takeSurface(SurfaceHolder.Callback2 callback) {
+    public void takeSurface(Callback2 callback) {
         mTakeSurfaceCallback = callback;
     }
 
@@ -2181,7 +2208,7 @@
         private ActionBarContextView mPrimaryActionModeView;
         private PopupWindow mPrimaryActionModePopup;
         private Runnable mShowPrimaryActionModePopup;
-        private ViewTreeObserver.OnPreDrawListener mFloatingToolbarPreDrawListener;
+        private OnPreDrawListener mFloatingToolbarPreDrawListener;
         private View mFloatingActionModeOriginatingView;
         private FloatingToolbar mFloatingToolbar;
 
@@ -3354,7 +3381,7 @@
                     mContext, callback, originatingView, mFloatingToolbar);
             mFloatingActionModeOriginatingView = originatingView;
             mFloatingToolbarPreDrawListener =
-                new ViewTreeObserver.OnPreDrawListener() {
+                new OnPreDrawListener() {
                     @Override
                     public boolean onPreDraw() {
                         mode.updateViewLocationInWindow();
@@ -4718,7 +4745,7 @@
 
     }
 
-    static class RotationWatcher extends IRotationWatcher.Stub {
+    static class RotationWatcher extends Stub {
         private Handler mHandler;
         private final Runnable mRotationChanged = new Runnable() {
             public void run() {
diff --git a/core/java/com/android/internal/transition/EpicenterClipReveal.java b/core/java/com/android/internal/transition/EpicenterClipReveal.java
deleted file mode 100644
index 1a6736a..0000000
--- a/core/java/com/android/internal/transition/EpicenterClipReveal.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.internal.transition;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.RectEvaluator;
-import android.animation.TimeInterpolator;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Rect;
-import android.transition.TransitionValues;
-import android.transition.Visibility;
-import android.util.AttributeSet;
-import android.util.Property;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
-import android.view.animation.PathInterpolator;
-
-import com.android.internal.R;
-
-/**
- * EpicenterClipReveal captures the {@link View#getClipBounds()} before and
- * after the scene change and animates between those and the epicenter bounds
- * during a visibility transition.
- */
-public class EpicenterClipReveal extends Visibility {
-    private static final String PROPNAME_CLIP = "android:epicenterReveal:clip";
-    private static final String PROPNAME_BOUNDS = "android:epicenterReveal:bounds";
-
-    private final TimeInterpolator mInterpolatorX;
-    private final TimeInterpolator mInterpolatorY;
-    private final boolean mCenterClipBounds;
-
-    public EpicenterClipReveal() {
-        mInterpolatorX = null;
-        mInterpolatorY = null;
-        mCenterClipBounds = false;
-    }
-
-    public EpicenterClipReveal(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        final TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.EpicenterClipReveal, 0, 0);
-
-        mCenterClipBounds = a.getBoolean(R.styleable.EpicenterClipReveal_centerClipBounds, false);
-
-        final int interpolatorX = a.getResourceId(R.styleable.EpicenterClipReveal_interpolatorX, 0);
-        if (interpolatorX != 0) {
-            mInterpolatorX = AnimationUtils.loadInterpolator(context, interpolatorX);
-        } else {
-            mInterpolatorX = TransitionConstants.LINEAR_OUT_SLOW_IN;
-        }
-
-        final int interpolatorY = a.getResourceId(R.styleable.EpicenterClipReveal_interpolatorY, 0);
-        if (interpolatorY != 0) {
-            mInterpolatorY = AnimationUtils.loadInterpolator(context, interpolatorY);
-        } else {
-            mInterpolatorY = TransitionConstants.FAST_OUT_SLOW_IN;
-        }
-
-        a.recycle();
-    }
-
-    @Override
-    public void captureStartValues(TransitionValues transitionValues) {
-        super.captureStartValues(transitionValues);
-        captureValues(transitionValues);
-    }
-
-    @Override
-    public void captureEndValues(TransitionValues transitionValues) {
-        super.captureEndValues(transitionValues);
-        captureValues(transitionValues);
-    }
-
-    private void captureValues(TransitionValues values) {
-        final View view = values.view;
-        if (view.getVisibility() == View.GONE) {
-            return;
-        }
-
-        final Rect clip = view.getClipBounds();
-        values.values.put(PROPNAME_CLIP, clip);
-
-        if (clip == null) {
-            final Rect bounds = new Rect(0, 0, view.getWidth(), view.getHeight());
-            values.values.put(PROPNAME_BOUNDS, bounds);
-        }
-    }
-
-    @Override
-    public Animator onAppear(ViewGroup sceneRoot, View view,
-            TransitionValues startValues, TransitionValues endValues) {
-        if (endValues == null) {
-            return null;
-        }
-
-        final Rect end = getBestRect(endValues);
-        final Rect start = getEpicenterOrCenter(end);
-
-        // Prepare the view.
-        view.setClipBounds(start);
-
-        return createRectAnimator(view, start, end, endValues, mInterpolatorX, mInterpolatorY);
-    }
-
-    @Override
-    public Animator onDisappear(ViewGroup sceneRoot, View view,
-            TransitionValues startValues, TransitionValues endValues) {
-        if (startValues == null) {
-            return null;
-        }
-
-        final Rect start = getBestRect(startValues);
-        final Rect end = getEpicenterOrCenter(start);
-
-        // Prepare the view.
-        view.setClipBounds(start);
-
-        return createRectAnimator(view, start, end, endValues, mInterpolatorX, mInterpolatorY);
-    }
-
-    private Rect getEpicenterOrCenter(Rect bestRect) {
-        final Rect epicenter = getEpicenter();
-        if (epicenter != null) {
-            // Translate the clip bounds to be centered within the target bounds.
-            if (mCenterClipBounds) {
-                final int offsetX = bestRect.centerX() - epicenter.centerX();
-                final int offsetY = bestRect.centerY() - epicenter.centerY();
-                epicenter.offset(offsetX, offsetY);
-            }
-            return epicenter;
-        }
-
-        final int centerX = bestRect.centerX();
-        final int centerY = bestRect.centerY();
-        return new Rect(centerX, centerY, centerX, centerY);
-    }
-
-    private Rect getBestRect(TransitionValues values) {
-        final Rect clipRect = (Rect) values.values.get(PROPNAME_CLIP);
-        if (clipRect == null) {
-            return (Rect) values.values.get(PROPNAME_BOUNDS);
-        }
-        return clipRect;
-    }
-
-    private static Animator createRectAnimator(final View view, Rect start, Rect end,
-            TransitionValues endValues, TimeInterpolator interpolatorX,
-            TimeInterpolator interpolatorY) {
-        final RectEvaluator evaluator = new RectEvaluator(new Rect());
-        final Rect terminalClip = (Rect) endValues.values.get(PROPNAME_CLIP);
-
-        final ClipDimenProperty propX = new ClipDimenProperty(ClipDimenProperty.TARGET_X);
-        final ObjectAnimator animX = ObjectAnimator.ofObject(view, propX, evaluator, start, end);
-        if (interpolatorX != null) {
-            animX.setInterpolator(interpolatorX);
-        }
-
-        final ClipDimenProperty propY = new ClipDimenProperty(ClipDimenProperty.TARGET_Y);
-        final ObjectAnimator animY = ObjectAnimator.ofObject(view, propY, evaluator, start, end);
-        if (interpolatorY != null) {
-            animY.setInterpolator(interpolatorY);
-        }
-
-        final AnimatorSet animSet = new AnimatorSet();
-        animSet.playTogether(animX, animY);
-        animSet.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                view.setClipBounds(terminalClip);
-            }
-        });
-        return animSet;
-    }
-
-    private static class ClipDimenProperty extends Property<View, Rect> {
-        public static final char TARGET_X = 'x';
-        public static final char TARGET_Y = 'y';
-
-        private final Rect mTempRect = new Rect();
-
-        private final int mTargetDimension;
-
-        public ClipDimenProperty(char targetDimension) {
-            super(Rect.class, "clip_bounds_" + targetDimension);
-
-            mTargetDimension = targetDimension;
-        }
-
-        @Override
-        public Rect get(View object) {
-            final Rect tempRect = mTempRect;
-            if (!object.getClipBounds(tempRect)) {
-                tempRect.setEmpty();
-            }
-            return tempRect;
-        }
-
-        @Override
-        public void set(View object, Rect value) {
-            final Rect tempRect = mTempRect;
-            if (object.getClipBounds(tempRect)) {
-                if (mTargetDimension == TARGET_X) {
-                    tempRect.left = value.left;
-                    tempRect.right = value.right;
-                } else {
-                    tempRect.top = value.top;
-                    tempRect.bottom = value.bottom;
-                }
-                object.setClipBounds(tempRect);
-            }
-        }
-    }
-}
diff --git a/core/java/com/android/internal/transition/EpicenterTranslate.java b/core/java/com/android/internal/transition/EpicenterTranslate.java
deleted file mode 100644
index eac3ff8..0000000
--- a/core/java/com/android/internal/transition/EpicenterTranslate.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.internal.transition;
-
-import com.android.internal.R;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.TimeInterpolator;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Rect;
-import android.transition.TransitionValues;
-import android.transition.Visibility;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
-
-/**
- * EpicenterTranslate captures the {@link View#getTranslationX()} and
- * {@link View#getTranslationY()} before and after the scene change and
- * animates between those and the epicenter's center during a visibility
- * transition.
- */
-public class EpicenterTranslate extends Visibility {
-    private static final String PROPNAME_BOUNDS = "android:epicenterReveal:bounds";
-    private static final String PROPNAME_TRANSLATE_X = "android:epicenterReveal:translateX";
-    private static final String PROPNAME_TRANSLATE_Y = "android:epicenterReveal:translateY";
-    private static final String PROPNAME_TRANSLATE_Z = "android:epicenterReveal:translateZ";
-    private static final String PROPNAME_Z = "android:epicenterReveal:z";
-
-    private final TimeInterpolator mInterpolatorX;
-    private final TimeInterpolator mInterpolatorY;
-    private final TimeInterpolator mInterpolatorZ;
-
-    public EpicenterTranslate() {
-        mInterpolatorX = null;
-        mInterpolatorY = null;
-        mInterpolatorZ = null;
-    }
-
-    public EpicenterTranslate(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        final TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.EpicenterTranslate, 0, 0);
-
-        final int interpolatorX = a.getResourceId(R.styleable.EpicenterTranslate_interpolatorX, 0);
-        if (interpolatorX != 0) {
-            mInterpolatorX = AnimationUtils.loadInterpolator(context, interpolatorX);
-        } else {
-            mInterpolatorX = TransitionConstants.FAST_OUT_SLOW_IN;
-        }
-
-        final int interpolatorY = a.getResourceId(R.styleable.EpicenterTranslate_interpolatorY, 0);
-        if (interpolatorY != 0) {
-            mInterpolatorY = AnimationUtils.loadInterpolator(context, interpolatorY);
-        } else {
-            mInterpolatorY = TransitionConstants.FAST_OUT_SLOW_IN;
-        }
-
-        final int interpolatorZ = a.getResourceId(R.styleable.EpicenterTranslate_interpolatorZ, 0);
-        if (interpolatorZ != 0) {
-            mInterpolatorZ = AnimationUtils.loadInterpolator(context, interpolatorZ);
-        } else {
-            mInterpolatorZ = TransitionConstants.FAST_OUT_SLOW_IN;
-        }
-
-        a.recycle();
-    }
-
-    @Override
-    public void captureStartValues(TransitionValues transitionValues) {
-        super.captureStartValues(transitionValues);
-        captureValues(transitionValues);
-    }
-
-    @Override
-    public void captureEndValues(TransitionValues transitionValues) {
-        super.captureEndValues(transitionValues);
-        captureValues(transitionValues);
-    }
-
-    private void captureValues(TransitionValues values) {
-        final View view = values.view;
-        if (view.getVisibility() == View.GONE) {
-            return;
-        }
-
-        final Rect bounds = new Rect(0, 0, view.getWidth(), view.getHeight());
-        values.values.put(PROPNAME_BOUNDS, bounds);
-        values.values.put(PROPNAME_TRANSLATE_X, view.getTranslationX());
-        values.values.put(PROPNAME_TRANSLATE_Y, view.getTranslationY());
-        values.values.put(PROPNAME_TRANSLATE_Z, view.getTranslationZ());
-        values.values.put(PROPNAME_Z, view.getZ());
-    }
-
-    @Override
-    public Animator onAppear(ViewGroup sceneRoot, View view,
-            TransitionValues startValues, TransitionValues endValues) {
-        if (endValues == null) {
-            return null;
-        }
-
-        final Rect end = (Rect) endValues.values.get(PROPNAME_BOUNDS);
-        final Rect start = getEpicenterOrCenter(end);
-        final float startX = start.centerX() - end.centerX();
-        final float startY = start.centerY() - end.centerY();
-        final float startZ = 0 - (float) endValues.values.get(PROPNAME_Z);
-
-        // Translate the view to be centered on the epicenter.
-        view.setTranslationX(startX);
-        view.setTranslationY(startY);
-        view.setTranslationZ(startZ);
-
-        final float endX = (float) endValues.values.get(PROPNAME_TRANSLATE_X);
-        final float endY = (float) endValues.values.get(PROPNAME_TRANSLATE_Y);
-        final float endZ = (float) endValues.values.get(PROPNAME_TRANSLATE_Z);
-        return createAnimator(view, startX, startY, startZ, endX, endY, endZ,
-                mInterpolatorX, mInterpolatorY, mInterpolatorZ);
-    }
-
-    @Override
-    public Animator onDisappear(ViewGroup sceneRoot, View view,
-            TransitionValues startValues, TransitionValues endValues) {
-        if (startValues == null) {
-            return null;
-        }
-
-        final Rect start = (Rect) endValues.values.get(PROPNAME_BOUNDS);
-        final Rect end = getEpicenterOrCenter(start);
-        final float endX = end.centerX() - start.centerX();
-        final float endY = end.centerY() - start.centerY();
-        final float endZ = 0 - (float) startValues.values.get(PROPNAME_Z);
-
-        final float startX = (float) endValues.values.get(PROPNAME_TRANSLATE_X);
-        final float startY = (float) endValues.values.get(PROPNAME_TRANSLATE_Y);
-        final float startZ = (float) endValues.values.get(PROPNAME_TRANSLATE_Z);
-        return createAnimator(view, startX, startY, startZ, endX, endY, endZ,
-                mInterpolatorX, mInterpolatorY, mInterpolatorZ);
-    }
-
-    private Rect getEpicenterOrCenter(Rect bestRect) {
-        final Rect epicenter = getEpicenter();
-        if (epicenter != null) {
-            return epicenter;
-        }
-
-        final int centerX = bestRect.centerX();
-        final int centerY = bestRect.centerY();
-        return new Rect(centerX, centerY, centerX, centerY);
-    }
-
-    private static Animator createAnimator(final View view, float startX, float startY,
-            float startZ, float endX, float endY, float endZ, TimeInterpolator interpolatorX,
-            TimeInterpolator interpolatorY, TimeInterpolator interpolatorZ) {
-        final ObjectAnimator animX = ObjectAnimator.ofFloat(view, View.TRANSLATION_X, startX, endX);
-        if (interpolatorX != null) {
-            animX.setInterpolator(interpolatorX);
-        }
-
-        final ObjectAnimator animY = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, startY, endY);
-        if (interpolatorY != null) {
-            animY.setInterpolator(interpolatorY);
-        }
-
-        final ObjectAnimator animZ = ObjectAnimator.ofFloat(view, View.TRANSLATION_Z, startZ, endZ);
-        if (interpolatorZ != null) {
-            animZ.setInterpolator(interpolatorZ);
-        }
-
-        final AnimatorSet animSet = new AnimatorSet();
-        animSet.playTogether(animX, animY, animZ);
-        return animSet;
-    }
-}
diff --git a/core/java/com/android/internal/transition/EpicenterTranslateClipReveal.java b/core/java/com/android/internal/transition/EpicenterTranslateClipReveal.java
new file mode 100644
index 0000000..2c10297
--- /dev/null
+++ b/core/java/com/android/internal/transition/EpicenterTranslateClipReveal.java
@@ -0,0 +1,328 @@
+/*
+ * 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.internal.transition;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.TimeInterpolator;
+import android.animation.TypeEvaluator;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Rect;
+import android.transition.TransitionValues;
+import android.transition.Visibility;
+import android.util.AttributeSet;
+import android.util.Property;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
+
+import com.android.internal.R;
+
+/**
+ * EpicenterTranslateClipReveal captures the clip bounds and translation values
+ * before and after the scene change and animates between those and the
+ * epicenter bounds during a visibility transition.
+ */
+public class EpicenterTranslateClipReveal extends Visibility {
+    private static final String PROPNAME_CLIP = "android:epicenterReveal:clip";
+    private static final String PROPNAME_BOUNDS = "android:epicenterReveal:bounds";
+    private static final String PROPNAME_TRANSLATE_X = "android:epicenterReveal:translateX";
+    private static final String PROPNAME_TRANSLATE_Y = "android:epicenterReveal:translateY";
+    private static final String PROPNAME_TRANSLATE_Z = "android:epicenterReveal:translateZ";
+    private static final String PROPNAME_Z = "android:epicenterReveal:z";
+
+    private final TimeInterpolator mInterpolatorX;
+    private final TimeInterpolator mInterpolatorY;
+    private final TimeInterpolator mInterpolatorZ;
+
+    public EpicenterTranslateClipReveal() {
+        mInterpolatorX = null;
+        mInterpolatorY = null;
+        mInterpolatorZ = null;
+    }
+
+    public EpicenterTranslateClipReveal(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                R.styleable.EpicenterTranslateClipReveal, 0, 0);
+
+        final int interpolatorX = a.getResourceId(
+                R.styleable.EpicenterTranslateClipReveal_interpolatorX, 0);
+        if (interpolatorX != 0) {
+            mInterpolatorX = AnimationUtils.loadInterpolator(context, interpolatorX);
+        } else {
+            mInterpolatorX = TransitionConstants.LINEAR_OUT_SLOW_IN;
+        }
+
+        final int interpolatorY = a.getResourceId(
+                R.styleable.EpicenterTranslateClipReveal_interpolatorY, 0);
+        if (interpolatorY != 0) {
+            mInterpolatorY = AnimationUtils.loadInterpolator(context, interpolatorY);
+        } else {
+            mInterpolatorY = TransitionConstants.FAST_OUT_SLOW_IN;
+        }
+
+        final int interpolatorZ = a.getResourceId(
+                R.styleable.EpicenterTranslateClipReveal_interpolatorZ, 0);
+        if (interpolatorZ != 0) {
+            mInterpolatorZ = AnimationUtils.loadInterpolator(context, interpolatorZ);
+        } else {
+            mInterpolatorZ = TransitionConstants.FAST_OUT_SLOW_IN;
+        }
+
+        a.recycle();
+    }
+
+    @Override
+    public void captureStartValues(TransitionValues transitionValues) {
+        super.captureStartValues(transitionValues);
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public void captureEndValues(TransitionValues transitionValues) {
+        super.captureEndValues(transitionValues);
+        captureValues(transitionValues);
+    }
+
+    private void captureValues(TransitionValues values) {
+        final View view = values.view;
+        if (view.getVisibility() == View.GONE) {
+            return;
+        }
+
+        final Rect bounds = new Rect(0, 0, view.getWidth(), view.getHeight());
+        values.values.put(PROPNAME_BOUNDS, bounds);
+        values.values.put(PROPNAME_TRANSLATE_X, view.getTranslationX());
+        values.values.put(PROPNAME_TRANSLATE_Y, view.getTranslationY());
+        values.values.put(PROPNAME_TRANSLATE_Z, view.getTranslationZ());
+        values.values.put(PROPNAME_Z, view.getZ());
+
+        final Rect clip = view.getClipBounds();
+        values.values.put(PROPNAME_CLIP, clip);
+    }
+
+    @Override
+    public Animator onAppear(ViewGroup sceneRoot, View view,
+            TransitionValues startValues, TransitionValues endValues) {
+        if (endValues == null) {
+            return null;
+        }
+
+        final Rect endBounds = (Rect) endValues.values.get(PROPNAME_BOUNDS);
+        final Rect startBounds = getEpicenterOrCenter(endBounds);
+        final float startX = startBounds.centerX() - endBounds.centerX();
+        final float startY = startBounds.centerY() - endBounds.centerY();
+        final float startZ = 0 - (float) endValues.values.get(PROPNAME_Z);
+
+        // Translate the view to be centered on the epicenter.
+        view.setTranslationX(startX);
+        view.setTranslationY(startY);
+        view.setTranslationZ(startZ);
+
+        final float endX = (float) endValues.values.get(PROPNAME_TRANSLATE_X);
+        final float endY = (float) endValues.values.get(PROPNAME_TRANSLATE_Y);
+        final float endZ = (float) endValues.values.get(PROPNAME_TRANSLATE_Z);
+
+        final Rect endClip = getBestRect(endValues);
+        final Rect startClip = getEpicenterOrCenter(endClip);
+
+        // Prepare the view.
+        view.setClipBounds(startClip);
+
+        final State startStateX = new State(startClip.left, startClip.right, startX);
+        final State endStateX = new State(endClip.left, endClip.right, endX);
+        final State startStateY = new State(startClip.top, startClip.bottom, startY);
+        final State endStateY = new State(endClip.top, endClip.bottom, endY);
+
+        return createRectAnimator(view, startStateX, startStateY, startZ, endStateX, endStateY,
+                endZ, endValues, mInterpolatorX, mInterpolatorY, mInterpolatorZ);
+    }
+
+    @Override
+    public Animator onDisappear(ViewGroup sceneRoot, View view,
+            TransitionValues startValues, TransitionValues endValues) {
+        if (startValues == null) {
+            return null;
+        }
+
+        final Rect startBounds = (Rect) endValues.values.get(PROPNAME_BOUNDS);
+        final Rect endBounds = getEpicenterOrCenter(startBounds);
+        final float endX = endBounds.centerX() - startBounds.centerX();
+        final float endY = endBounds.centerY() - startBounds.centerY();
+        final float endZ = 0 - (float) startValues.values.get(PROPNAME_Z);
+
+        final float startX = (float) endValues.values.get(PROPNAME_TRANSLATE_X);
+        final float startY = (float) endValues.values.get(PROPNAME_TRANSLATE_Y);
+        final float startZ = (float) endValues.values.get(PROPNAME_TRANSLATE_Z);
+
+        final Rect startClip = getBestRect(startValues);
+        final Rect endClip = getEpicenterOrCenter(startClip);
+
+        // Prepare the view.
+        view.setClipBounds(startClip);
+
+        final State startStateX = new State(startClip.left, startClip.right, startX);
+        final State endStateX = new State(endClip.left, endClip.right, endX);
+        final State startStateY = new State(startClip.top, startClip.bottom, startY);
+        final State endStateY = new State(endClip.top, endClip.bottom, endY);
+
+        return createRectAnimator(view, startStateX, startStateY, startZ, endStateX, endStateY,
+                endZ, endValues, mInterpolatorX, mInterpolatorY, mInterpolatorZ);
+    }
+
+    private Rect getEpicenterOrCenter(Rect bestRect) {
+        final Rect epicenter = getEpicenter();
+        if (epicenter != null) {
+            return epicenter;
+        }
+
+        final int centerX = bestRect.centerX();
+        final int centerY = bestRect.centerY();
+        return new Rect(centerX, centerY, centerX, centerY);
+    }
+
+    private Rect getBestRect(TransitionValues values) {
+        final Rect clipRect = (Rect) values.values.get(PROPNAME_CLIP);
+        if (clipRect == null) {
+            return (Rect) values.values.get(PROPNAME_BOUNDS);
+        }
+        return clipRect;
+    }
+
+    private static Animator createRectAnimator(final View view, State startX, State startY,
+            float startZ, State endX, State endY, float endZ, TransitionValues endValues,
+            TimeInterpolator interpolatorX, TimeInterpolator interpolatorY,
+            TimeInterpolator interpolatorZ) {
+        final StateEvaluator evaluator = new StateEvaluator();
+
+        final ObjectAnimator animZ = ObjectAnimator.ofFloat(view, View.TRANSLATION_Z, startZ, endZ);
+        if (interpolatorZ != null) {
+            animZ.setInterpolator(interpolatorZ);
+        }
+
+        final StateProperty propX = new StateProperty(StateProperty.TARGET_X);
+        final ObjectAnimator animX = ObjectAnimator.ofObject(view, propX, evaluator, startX, endX);
+        if (interpolatorX != null) {
+            animX.setInterpolator(interpolatorX);
+        }
+
+        final StateProperty propY = new StateProperty(StateProperty.TARGET_Y);
+        final ObjectAnimator animY = ObjectAnimator.ofObject(view, propY, evaluator, startY, endY);
+        if (interpolatorY != null) {
+            animY.setInterpolator(interpolatorY);
+        }
+
+        final Rect terminalClip = (Rect) endValues.values.get(PROPNAME_CLIP);
+        final AnimatorListenerAdapter animatorListener = new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                view.setClipBounds(terminalClip);
+            }
+        };
+
+        final AnimatorSet animSet = new AnimatorSet();
+        animSet.playTogether(animX, animY, animZ);
+        animSet.addListener(animatorListener);
+        return animSet;
+    }
+
+    private static class State {
+        int lower;
+        int upper;
+        float trans;
+
+        public State() {}
+
+        public State(int lower, int upper, float trans) {
+            this.lower = lower;
+            this.upper = upper;
+            this.trans = trans;
+        }
+    }
+
+    private static class StateEvaluator implements TypeEvaluator<State> {
+        private final State mTemp = new State();
+
+        @Override
+        public State evaluate(float fraction, State startValue, State endValue) {
+            mTemp.upper = startValue.upper + (int) ((endValue.upper - startValue.upper) * fraction);
+            mTemp.lower = startValue.lower + (int) ((endValue.lower - startValue.lower) * fraction);
+            mTemp.trans = startValue.trans + (int) ((endValue.trans - startValue.trans) * fraction);
+            return mTemp;
+        }
+    }
+
+    private static class StateProperty extends Property<View, State> {
+        public static final char TARGET_X = 'x';
+        public static final char TARGET_Y = 'y';
+
+        private final Rect mTempRect = new Rect();
+        private final State mTempState = new State();
+
+        private final int mTargetDimension;
+
+        public StateProperty(char targetDimension) {
+            super(State.class, "state_" + targetDimension);
+
+            mTargetDimension = targetDimension;
+        }
+
+        @Override
+        public State get(View object) {
+            final Rect tempRect = mTempRect;
+            if (!object.getClipBounds(tempRect)) {
+                tempRect.setEmpty();
+            }
+            final State tempState = mTempState;
+            if (mTargetDimension == TARGET_X) {
+                tempState.trans = object.getTranslationX();
+                tempState.lower = tempRect.left + (int) tempState.trans;
+                tempState.upper = tempRect.right + (int) tempState.trans;
+            } else {
+                tempState.trans = object.getTranslationY();
+                tempState.lower = tempRect.top + (int) tempState.trans;
+                tempState.upper = tempRect.bottom + (int) tempState.trans;
+            }
+            return tempState;
+        }
+
+        @Override
+        public void set(View object, State value) {
+            final Rect tempRect = mTempRect;
+            if (object.getClipBounds(tempRect)) {
+                if (mTargetDimension == TARGET_X) {
+                    tempRect.left = value.lower - (int) value.trans;
+                    tempRect.right = value.upper - (int) value.trans;
+                } else {
+                    tempRect.top = value.lower - (int) value.trans;
+                    tempRect.bottom = value.upper - (int) value.trans;
+                }
+                object.setClipBounds(tempRect);
+            }
+
+            if (mTargetDimension == TARGET_X) {
+                object.setTranslationX(value.trans);
+            } else {
+                object.setTranslationY(value.trans);
+            }
+        }
+    }
+}
diff --git a/core/java/com/android/internal/util/AsyncChannel.java b/core/java/com/android/internal/util/AsyncChannel.java
index 34f62ba..bd0e6ce 100644
--- a/core/java/com/android/internal/util/AsyncChannel.java
+++ b/core/java/com/android/internal/util/AsyncChannel.java
@@ -462,10 +462,8 @@
         } catch(Exception e) {
         }
         // Tell source we're disconnected.
-        if (mSrcHandler != null) {
-            replyDisconnected(STATUS_SUCCESSFUL);
-            mSrcHandler = null;
-        }
+        replyDisconnected(STATUS_SUCCESSFUL);
+        mSrcHandler = null;
         // Unlink only when bindService isn't used
         if (mConnection == null && mDstMessenger != null && mDeathMonitor!= null) {
             mDstMessenger.getBinder().unlinkToDeath(mDeathMonitor, 0);
@@ -871,6 +869,8 @@
      * @param status to be stored in msg.arg1
      */
     private void replyDisconnected(int status) {
+        // Can't reply if already disconnected. Avoid NullPointerException.
+        if (mSrcHandler == null) return;
         Message msg = mSrcHandler.obtainMessage(CMD_CHANNEL_DISCONNECTED);
         msg.arg1 = status;
         msg.obj = this;
diff --git a/core/java/com/android/internal/util/CallbackRegistry.java b/core/java/com/android/internal/util/CallbackRegistry.java
new file mode 100644
index 0000000..0f228d4
--- /dev/null
+++ b/core/java/com/android/internal/util/CallbackRegistry.java
@@ -0,0 +1,395 @@
+/*
+ * 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.internal.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tracks callbacks for the event. This class supports reentrant modification
+ * of the callbacks during notification without adversely disrupting notifications.
+ * A common pattern for callbacks is to receive a notification and then remove
+ * themselves. This class handles this behavior with constant memory under
+ * most circumstances.
+ *
+ * <p>A subclass of {@link CallbackRegistry.NotifierCallback} must be passed to
+ * the constructor to define how notifications should be called. That implementation
+ * does the actual notification on the listener.</p>
+ *
+ * <p>This class supports only callbacks with at most two parameters.
+ * Typically, these are the notification originator and a parameter, but these may
+ * be used as required. If more than two parameters are required or primitive types
+ * must be used, <code>A</code> should be some kind of containing structure that
+ * the subclass may reuse between notifications.</p>
+ *
+ * @param <C> The callback type.
+ * @param <T> The notification sender type. Typically this is the containing class.
+ * @param <A> Opaque argument used to pass additional data beyond an int.
+ */
+public class CallbackRegistry<C, T, A> implements Cloneable {
+    private static final String TAG = "CallbackRegistry";
+
+    /** An ordered collection of listeners waiting to be notified. */
+    private List<C> mCallbacks = new ArrayList<C>();
+
+    /**
+     * A bit flag for the first 64 listeners that are removed during notification.
+     * The lowest significant bit corresponds to the 0th index into mCallbacks.
+     * For a small number of callbacks, no additional array of objects needs to
+     * be allocated.
+     */
+    private long mFirst64Removed = 0x0;
+
+    /**
+     * Bit flags for the remaining callbacks that are removed during notification.
+     * When there are more than 64 callbacks and one is marked for removal, a dynamic
+     * array of bits are allocated for the callbacks.
+     */
+    private long[] mRemainderRemoved;
+
+    /**
+     * The reentrancy level of the notification. When we notify a callback, it may cause
+     * further notifications. The reentrancy level must be tracked to let us clean up
+     * the callback state when all notifications have been processed.
+     */
+    private int mNotificationLevel;
+
+    /** The notification mechanism for notifying an event. */
+    private final NotifierCallback<C, T, A> mNotifier;
+
+    /**
+     * Creates an EventRegistry that notifies the event with notifier.
+     * @param notifier The class to use to notify events.
+     */
+    public CallbackRegistry(NotifierCallback<C, T, A> notifier) {
+        mNotifier = notifier;
+    }
+
+    /**
+     * Notify all callbacks.
+     *
+     * @param sender The originator. This is an opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg2 An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     */
+    public synchronized void notifyCallbacks(T sender, int arg, A arg2) {
+        mNotificationLevel++;
+        notifyRecurseLocked(sender, arg, arg2);
+        mNotificationLevel--;
+        if (mNotificationLevel == 0) {
+            if (mRemainderRemoved != null) {
+                for (int i = mRemainderRemoved.length - 1; i >= 0; i--) {
+                    final long removedBits = mRemainderRemoved[i];
+                    if (removedBits != 0) {
+                        removeRemovedCallbacks((i + 1) * Long.SIZE, removedBits);
+                        mRemainderRemoved[i] = 0;
+                    }
+                }
+            }
+            if (mFirst64Removed != 0) {
+                removeRemovedCallbacks(0, mFirst64Removed);
+                mFirst64Removed = 0;
+            }
+        }
+    }
+
+    /**
+     * Notify up to the first Long.SIZE callbacks that don't have a bit set in <code>removed</code>.
+     *
+     * @param sender The originator. This is an opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg2 An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     */
+    private void notifyFirst64Locked(T sender, int arg, A arg2) {
+        final int maxNotified = Math.min(Long.SIZE, mCallbacks.size());
+        notifyCallbacksLocked(sender, arg, arg2, 0, maxNotified, mFirst64Removed);
+    }
+
+    /**
+     * Notify all callbacks using a recursive algorithm to avoid allocating on the heap.
+     * This part captures the callbacks beyond Long.SIZE that have no bits allocated for
+     * removal before it recurses into {@link #notifyRemainderLocked(Object, int, A, int)}.
+     * <p>
+     * Recursion is used to avoid allocating temporary state on the heap. Each stack has one
+     * long (64 callbacks) worth of information of which has been removed.
+     *
+     * @param sender The originator. This is an opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg2 An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     */
+    private void notifyRecurseLocked(T sender, int arg, A arg2) {
+        final int callbackCount = mCallbacks.size();
+        final int remainderIndex = mRemainderRemoved == null ? -1 : mRemainderRemoved.length - 1;
+
+        // Now we've got all callbacks that have no mRemainderRemoved value, so notify the
+        // others.
+        notifyRemainderLocked(sender, arg, arg2, remainderIndex);
+
+        // notifyRemainderLocked notifies all at maxIndex, so we'd normally start at maxIndex + 1
+        // However, we must also keep track of those in mFirst64Removed, so we add 2 instead:
+        final int startCallbackIndex = (remainderIndex + 2) * Long.SIZE;
+
+        // The remaining have no bit set
+        notifyCallbacksLocked(sender, arg, arg2, startCallbackIndex, callbackCount, 0);
+    }
+
+    /**
+     * Notify callbacks that have mRemainderRemoved bits set for remainderIndex. If
+     * remainderIndex is -1, the first 64 will be notified instead.
+     *
+     * @param sender The originator. This is an opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg2 An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param remainderIndex The index into mRemainderRemoved that should be notified.
+     */
+    private void notifyRemainderLocked(T sender, int arg, A arg2, int remainderIndex) {
+        if (remainderIndex < 0) {
+            notifyFirst64Locked(sender, arg, arg2);
+        } else {
+            final long bits = mRemainderRemoved[remainderIndex];
+            final int startIndex = (remainderIndex + 1) * Long.SIZE;
+            final int endIndex = Math.min(mCallbacks.size(), startIndex + Long.SIZE);
+            notifyRemainderLocked(sender, arg, arg2, remainderIndex - 1);
+            notifyCallbacksLocked(sender, arg, arg2, startIndex, endIndex, bits);
+        }
+    }
+
+    /**
+     * Notify callbacks from startIndex to endIndex, using bits as the bit status
+     * for whether they have been removed or not. bits should be from mRemainderRemoved or
+     * mFirst64Removed. bits set to 0 indicates that all callbacks from startIndex to
+     * endIndex should be notified.
+     *
+     * @param sender The originator. This is an opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param arg2 An opaque parameter passed to
+     *      {@link CallbackRegistry.NotifierCallback#onNotifyCallback(Object, Object, int, A)}
+     * @param startIndex The index into the mCallbacks to start notifying.
+     * @param endIndex One past the last index into mCallbacks to notify.
+     * @param bits A bit field indicating which callbacks have been removed and shouldn't
+     *             be notified.
+     */
+    private void notifyCallbacksLocked(T sender, int arg, A arg2, final int startIndex,
+            final int endIndex, final long bits) {
+        long bitMask = 1;
+        for (int i = startIndex; i < endIndex; i++) {
+            if ((bits & bitMask) == 0) {
+                mNotifier.onNotifyCallback(mCallbacks.get(i), sender, arg, arg2);
+            }
+            bitMask <<= 1;
+        }
+    }
+
+    /**
+     * Add a callback to be notified. If the callback is already in the list, another won't
+     * be added. This does not affect current notifications.
+     * @param callback The callback to add.
+     */
+    public synchronized void add(C callback) {
+        int index = mCallbacks.lastIndexOf(callback);
+        if (index < 0 || isRemovedLocked(index)) {
+            mCallbacks.add(callback);
+        }
+    }
+
+    /**
+     * Returns true if the callback at index has been marked for removal.
+     *
+     * @param index The index into mCallbacks to check.
+     * @return true if the callback at index has been marked for removal.
+     */
+    private boolean isRemovedLocked(int index) {
+        if (index < Long.SIZE) {
+            // It is in the first 64 callbacks, just check the bit.
+            final long bitMask = 1L << index;
+            return (mFirst64Removed & bitMask) != 0;
+        } else if (mRemainderRemoved == null) {
+            // It is after the first 64 callbacks, but nothing else was marked for removal.
+            return false;
+        } else {
+            final int maskIndex = (index / Long.SIZE) - 1;
+            if (maskIndex >= mRemainderRemoved.length) {
+                // There are some items in mRemainderRemoved, but nothing at the given index.
+                return false;
+            } else {
+                // There is something marked for removal, so we have to check the bit.
+                final long bits = mRemainderRemoved[maskIndex];
+                final long bitMask = 1L << (index % Long.SIZE);
+                return (bits & bitMask) != 0;
+            }
+        }
+    }
+
+    /**
+     * Removes callbacks from startIndex to startIndex + Long.SIZE, based
+     * on the bits set in removed.
+     * @param startIndex The index into the mCallbacks to start removing callbacks.
+     * @param removed The bits indicating removal, where each bit is set for one callback
+     *                to be removed.
+     */
+    private void removeRemovedCallbacks(int startIndex, long removed) {
+        // The naive approach should be fine. There may be a better bit-twiddling approach.
+        final int endIndex = startIndex + Long.SIZE;
+
+        long bitMask = 1L << (Long.SIZE - 1);
+        for (int i = endIndex - 1; i >= startIndex; i--) {
+            if ((removed & bitMask) != 0) {
+                mCallbacks.remove(i);
+            }
+            bitMask >>>= 1;
+        }
+    }
+
+    /**
+     * Remove a callback. This callback won't be notified after this call completes.
+     * @param callback The callback to remove.
+     */
+    public synchronized void remove(C callback) {
+        if (mNotificationLevel == 0) {
+            mCallbacks.remove(callback);
+        } else {
+            int index = mCallbacks.lastIndexOf(callback);
+            if (index >= 0) {
+                setRemovalBitLocked(index);
+            }
+        }
+    }
+
+    private void setRemovalBitLocked(int index) {
+        if (index < Long.SIZE) {
+            // It is in the first 64 callbacks, just check the bit.
+            final long bitMask = 1L << index;
+            mFirst64Removed |= bitMask;
+        } else {
+            final int remainderIndex = (index / Long.SIZE) - 1;
+            if (mRemainderRemoved == null) {
+                mRemainderRemoved = new long[mCallbacks.size() / Long.SIZE];
+            } else if (mRemainderRemoved.length < remainderIndex) {
+                // need to make it bigger
+                long[] newRemainders = new long[mCallbacks.size() / Long.SIZE];
+                System.arraycopy(mRemainderRemoved, 0, newRemainders, 0, mRemainderRemoved.length);
+                mRemainderRemoved = newRemainders;
+            }
+            final long bitMask = 1L << (index % Long.SIZE);
+            mRemainderRemoved[remainderIndex] |= bitMask;
+        }
+    }
+
+    /**
+     * Makes a copy of the registered callbacks and returns it.
+     *
+     * @return a copy of the registered callbacks.
+     */
+    public synchronized ArrayList<C> copyListeners() {
+        ArrayList<C> callbacks = new ArrayList<C>(mCallbacks.size());
+        int numListeners = mCallbacks.size();
+        for (int i = 0; i < numListeners; i++) {
+            if (!isRemovedLocked(i)) {
+                callbacks.add(mCallbacks.get(i));
+            }
+        }
+        return callbacks;
+    }
+
+    /**
+     * Returns true if there are no registered callbacks or false otherwise.
+     *
+     * @return true if there are no registered callbacks or false otherwise.
+     */
+    public synchronized boolean isEmpty() {
+        if (mCallbacks.isEmpty()) {
+            return true;
+        } else if (mNotificationLevel == 0) {
+            return false;
+        } else {
+            int numListeners = mCallbacks.size();
+            for (int i = 0; i < numListeners; i++) {
+                if (!isRemovedLocked(i)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    /**
+     * Removes all callbacks from the list.
+     */
+    public synchronized void clear() {
+        if (mNotificationLevel == 0) {
+            mCallbacks.clear();
+        } else if (!mCallbacks.isEmpty()) {
+            for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+                setRemovalBitLocked(i);
+            }
+        }
+    }
+
+    public synchronized CallbackRegistry<C, T, A> clone() {
+        CallbackRegistry<C, T, A> clone = null;
+        try {
+            clone = (CallbackRegistry<C, T, A>) super.clone();
+            clone.mFirst64Removed = 0;
+            clone.mRemainderRemoved = null;
+            clone.mNotificationLevel = 0;
+            clone.mCallbacks = new ArrayList<C>();
+            final int numListeners = mCallbacks.size();
+            for (int i = 0; i < numListeners; i++) {
+                if (!isRemovedLocked(i)) {
+                    clone.mCallbacks.add(mCallbacks.get(i));
+                }
+            }
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return clone;
+    }
+
+    /**
+     * Class used to notify events from CallbackRegistry.
+     *
+     * @param <C> The callback type.
+     * @param <T> The notification sender type. Typically this is the containing class.
+     * @param <A> An opaque argument to pass to the notifier
+     */
+    public abstract static class NotifierCallback<C, T, A> {
+        /**
+         * Used to notify the callback.
+         *
+         * @param callback The callback to notify.
+         * @param sender The opaque sender object.
+         * @param arg The opaque notification parameter.
+         * @param arg2 An opaque argument passed in
+         *        {@link CallbackRegistry#notifyCallbacks}
+         * @see CallbackRegistry#CallbackRegistry(CallbackRegistry.NotifierCallback)
+         */
+        public abstract void onNotifyCallback(C callback, T sender, int arg, A arg2);
+    }
+}
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index 6f104dd..60c5e42 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -59,7 +59,8 @@
             int controlFlags, int softInputMode, int windowFlags,
             in EditorInfo attribute, IInputContext inputContext);
 
-    void showInputMethodPickerFromClient(in IInputMethodClient client);
+    void showInputMethodPickerFromClient(in IInputMethodClient client,
+            int auxiliarySubtypeMode);
     void showInputMethodAndSubtypeEnablerFromClient(in IInputMethodClient client, String topId);
     void setInputMethod(in IBinder token, String id);
     void setInputMethodAndSubtype(in IBinder token, String id, in InputMethodSubtype subtype);
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index 2946456..106272b 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -192,10 +192,10 @@
             mTitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_title);
             mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_subtitle);
             if (mTitleStyleRes != 0) {
-                mTitleView.setTextAppearance(mContext, mTitleStyleRes);
+                mTitleView.setTextAppearance(mTitleStyleRes);
             }
             if (mSubtitleStyleRes != 0) {
-                mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes);
+                mSubtitleView.setTextAppearance(mSubtitleStyleRes);
             }
         }
 
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 6b781c3..825e336 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -813,14 +813,14 @@
             mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_subtitle);
 
             if (mTitleStyleRes != 0) {
-                mTitleView.setTextAppearance(mContext, mTitleStyleRes);
+                mTitleView.setTextAppearance(mTitleStyleRes);
             }
             if (mTitle != null) {
                 mTitleView.setText(mTitle);
             }
 
             if (mSubtitleStyleRes != 0) {
-                mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes);
+                mSubtitleView.setTextAppearance(mSubtitleStyleRes);
             }
             if (mSubtitle != null) {
                 mSubtitleView.setText(mSubtitle);
diff --git a/core/java/com/android/internal/widget/ButtonBarLayout.java b/core/java/com/android/internal/widget/ButtonBarLayout.java
index 64e6c69..f58ab03 100644
--- a/core/java/com/android/internal/widget/ButtonBarLayout.java
+++ b/core/java/com/android/internal/widget/ButtonBarLayout.java
@@ -17,6 +17,7 @@
 package com.android.internal.widget;
 
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.util.AttributeSet;
 import android.view.Gravity;
 import android.view.View;
@@ -29,37 +30,39 @@
  * orientation when it can't fit its child views horizontally.
  */
 public class ButtonBarLayout extends LinearLayout {
-    /** Spacer used in horizontal orientation. */
-    private final View mSpacer;
-
     /** Whether the current configuration allows stacking. */
-    private final boolean mAllowStacked;
+    private final boolean mAllowStacking;
 
     /** Whether the layout is currently stacked. */
     private boolean mStacked;
 
+    private int mLastWidthSize = -1;
+
     public ButtonBarLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
 
-        mAllowStacked = context.getResources().getBoolean(R.bool.allow_stacked_button_bar);
-        mSpacer = findViewById(R.id.spacer);
-    }
+        final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ButtonBarLayout);
+        mAllowStacking = ta.getBoolean(R.styleable.ButtonBarLayout_allowStacking, false);
+        ta.recycle();
 
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-
-        // Maybe we can fit the content now?
-        if (w > oldw && mStacked) {
-            setStacked(false);
-        }
+        mStacked = getOrientation() == VERTICAL;
     }
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        if (mAllowStacking) {
+            final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+            if (widthSize > mLastWidthSize && mStacked) {
+                // We're being measured wider this time, try un-stacking.
+                setStacked(false);
+            }
+
+            mLastWidthSize = widthSize;
+        }
+
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 
-        if (mAllowStacked && getOrientation() == LinearLayout.HORIZONTAL) {
+        if (mAllowStacking && !mStacked) {
             final int measuredWidth = getMeasuredWidthAndState();
             final int measuredWidthState = measuredWidth & MEASURED_STATE_MASK;
             if (measuredWidthState == MEASURED_STATE_TOO_SMALL) {
@@ -75,8 +78,9 @@
         setOrientation(stacked ? LinearLayout.VERTICAL : LinearLayout.HORIZONTAL);
         setGravity(stacked ? Gravity.RIGHT : Gravity.BOTTOM);
 
-        if (mSpacer != null) {
-            mSpacer.setVisibility(stacked ? View.GONE : View.INVISIBLE);
+        final View spacer = findViewById(R.id.spacer);
+        if (spacer != null) {
+            spacer.setVisibility(stacked ? View.GONE : View.INVISIBLE);
         }
 
         // Reverse the child order. This is specific to the Material button
diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java
index 3f7696f..f98fbfc 100644
--- a/core/java/com/android/internal/widget/FloatingToolbar.java
+++ b/core/java/com/android/internal/widget/FloatingToolbar.java
@@ -1247,9 +1247,13 @@
     }
 
     private static int getAdjustedToolbarWidth(Context context, int width) {
-        if (width <= 0 || width > getScreenWidth(context)) {
-            width = context.getResources()
-                    .getDimensionPixelSize(R.dimen.floating_toolbar_default_width);
+        int maximumWidth = getScreenWidth(context) - 2 * context.getResources()
+                .getDimensionPixelSize(R.dimen.floating_toolbar_horizontal_margin);
+
+        if (width <= 0 || width > maximumWidth) {
+            int defaultWidth = context.getResources()
+                    .getDimensionPixelSize(R.dimen.floating_toolbar_preferred_width);
+            width = Math.min(defaultWidth, maximumWidth);
         }
         return width;
     }
diff --git a/core/java/com/android/internal/widget/SwipeDismissLayout.java b/core/java/com/android/internal/widget/SwipeDismissLayout.java
index 191662c..6d4e058 100644
--- a/core/java/com/android/internal/widget/SwipeDismissLayout.java
+++ b/core/java/com/android/internal/widget/SwipeDismissLayout.java
@@ -216,6 +216,8 @@
         if (mVelocityTracker == null) {
             return super.onTouchEvent(ev);
         }
+        // offset because the view is translated during swipe
+        ev.offsetLocation(mTranslationX, 0);
         switch (ev.getActionMasked()) {
             case MotionEvent.ACTION_UP:
                 updateDismiss(ev);
diff --git a/core/java/com/android/internal/widget/ViewPager.java b/core/java/com/android/internal/widget/ViewPager.java
index 441e640..e76302b 100644
--- a/core/java/com/android/internal/widget/ViewPager.java
+++ b/core/java/com/android/internal/widget/ViewPager.java
@@ -47,6 +47,8 @@
 import android.widget.EdgeEffect;
 import android.widget.Scroller;
 
+import com.android.internal.R;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -2720,10 +2722,12 @@
 
         if (canScrollHorizontally(1)) {
             info.addAction(AccessibilityAction.ACTION_SCROLL_FORWARD);
+            info.addAction(AccessibilityAction.ACTION_SCROLL_RIGHT);
         }
 
         if (canScrollHorizontally(-1)) {
             info.addAction(AccessibilityAction.ACTION_SCROLL_BACKWARD);
+            info.addAction(AccessibilityAction.ACTION_SCROLL_LEFT);
         }
     }
 
@@ -2735,12 +2739,14 @@
 
         switch (action) {
             case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD:
+            case R.id.accessibilityActionScrollRight:
                 if (canScrollHorizontally(1)) {
                     setCurrentItem(mCurItem + 1);
                     return true;
                 }
                 return false;
             case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD:
+            case R.id.accessibilityActionScrollLeft:
                 if (canScrollHorizontally(-1)) {
                     setCurrentItem(mCurItem - 1);
                     return true;
diff --git a/core/java/com/android/server/BootReceiver.java b/core/java/com/android/server/BootReceiver.java
index 155f5d3..92d5aea 100644
--- a/core/java/com/android/server/BootReceiver.java
+++ b/core/java/com/android/server/BootReceiver.java
@@ -144,10 +144,6 @@
                     -LOG_SIZE, "SYSTEM_RECOVERY_LOG");
             addFileToDropBox(db, prefs, headers, "/cache/recovery/last_kmsg",
                     -LOG_SIZE, "SYSTEM_RECOVERY_KMSG");
-            addFileToDropBox(db, prefs, headers, "/data/dontpanic/apanic_console",
-                    -LOG_SIZE, "APANIC_CONSOLE");
-            addFileToDropBox(db, prefs, headers, "/data/dontpanic/apanic_threads",
-                    -LOG_SIZE, "APANIC_THREADS");
             addAuditErrorsToDropBox(db, prefs, headers, -LOG_SIZE, "SYSTEM_AUDIT");
             addFsckErrorsToDropBox(db, prefs, headers, -LOG_SIZE, "SYSTEM_FSCK");
         } else {
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index bbdd860..5448214 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -132,6 +132,7 @@
     android_media_AudioRecord.cpp \
     android_media_AudioSystem.cpp \
     android_media_AudioTrack.cpp \
+    android_media_DeviceCallback.cpp \
     android_media_JetPlayer.cpp \
     android_media_RemoteDisplay.cpp \
     android_media_ToneGenerator.cpp \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 88f0697..7c2b28d 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -875,6 +875,19 @@
     parseRuntimeOption("dalvik.vm.zygote.max-boot-retry", cachePruneBuf,
                        "-Xzygote-max-boot-retry=");
 
+    /*
+     * When running with debug.gencfi, add --include-cfi to the compiler options so that the boot
+     * image, if it is compiled on device, will include CFI info, as well as other compilations
+     * started by the runtime.
+     */
+    property_get("debug.gencfi", propBuf, "");
+    if (strcmp(propBuf, "true") == 0) {
+        addOption("-Xcompiler-option");
+        addOption("--include-cfi");
+        addOption("-Ximage-compiler-option");
+        addOption("--include-cfi");
+    }
+
     initArgs.version = JNI_VERSION_1_4;
     initArgs.options = mOptions.editArray();
     initArgs.nOptions = mOptions.size();
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 7a934bd..2785c48 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -1,3 +1,7 @@
+#define LOG_TAG "Bitmap"
+
+#include "Bitmap.h"
+
 #include "Paint.h"
 #include "SkBitmap.h"
 #include "SkPixelRef.h"
@@ -14,11 +18,339 @@
 #include "android_util_Binder.h"
 #include "android_nio_utils.h"
 #include "CreateJavaOutputStreamAdaptor.h"
+#include <Caches.h>
 
 #include "core_jni_helpers.h"
 
 #include <jni.h>
 
+namespace android {
+
+class WrappedPixelRef : public SkPixelRef {
+public:
+    WrappedPixelRef(Bitmap* wrapper, void* storage,
+            const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable)
+            : SkPixelRef(info)
+            , mBitmap(*wrapper)
+            , mStorage(storage) {
+        reconfigure(info, rowBytes, ctable);
+    }
+
+    ~WrappedPixelRef() {
+        // Tell SkRefCnt that everything is as it expects by forcing
+        // the refcnt to 1
+        internal_dispose_restore_refcnt_to_1();
+        SkSafeUnref(mColorTable);
+    }
+
+    void reconfigure(const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable) {
+        if (kIndex_8_SkColorType != info.colorType()) {
+            ctable = nullptr;
+        }
+        mRowBytes = rowBytes;
+        if (mColorTable != ctable) {
+            SkSafeUnref(mColorTable);
+            mColorTable = ctable;
+            SkSafeRef(mColorTable);
+        }
+        // Dirty hack is dirty
+        // TODO: Figure something out here, Skia's current design makes this
+        // really hard to work with. Skia really, really wants immutable objects,
+        // but with the nested-ref-count hackery going on that's just not
+        // feasible without going insane trying to figure it out
+        SkImageInfo* myInfo = const_cast<SkImageInfo*>(&this->info());
+        *myInfo = info;
+
+        // Docs say to only call this in the ctor, but we're going to call
+        // it anyway even if this isn't always the ctor.
+        // TODO: Fix this too as part of the above TODO
+        setPreLocked(mStorage, mRowBytes, mColorTable);
+    }
+
+    // Can't mark as override since SkPixelRef::rowBytes isn't virtual
+    // but that's OK since we just want BitmapWrapper to be able to rely
+    // on calling rowBytes() on an unlocked pixelref, which it will be
+    // doing on a WrappedPixelRef type, not a SkPixelRef, so static
+    // dispatching will do what we want.
+    size_t rowBytes() const { return mRowBytes; }
+    SkColorTable* colorTable() const { return mColorTable; }
+
+    bool hasHardwareMipMap() const {
+        return mHasHardwareMipMap;
+    }
+
+    void setHasHardwareMipMap(bool hasMipMap) {
+        mHasHardwareMipMap = hasMipMap;
+    }
+
+protected:
+    virtual bool onNewLockPixels(LockRec* rec) override {
+        rec->fPixels = mStorage;
+        rec->fRowBytes = mRowBytes;
+        rec->fColorTable = mColorTable;
+        return true;
+    }
+
+    virtual void onUnlockPixels() override {
+        // nothing
+    }
+
+    virtual size_t getAllocatedSizeInBytes() const override {
+        return info().getSafeSize(mRowBytes);
+    }
+
+private:
+    Bitmap& mBitmap;
+    void* mStorage;
+    size_t mRowBytes = 0;
+    SkColorTable* mColorTable = nullptr;
+    bool mHasHardwareMipMap = false;
+
+    virtual void internal_dispose() const override {
+        mBitmap.onStrongRefDestroyed();
+    }
+};
+
+Bitmap::Bitmap(JNIEnv* env, jbyteArray storageObj, void* address,
+            const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable)
+        : mPixelStorageType(PixelStorageType::Java) {
+    env->GetJavaVM(&mPixelStorage.java.jvm);
+    mPixelStorage.java.jweakRef = env->NewWeakGlobalRef(storageObj);
+    mPixelStorage.java.jstrongRef = nullptr;
+    mPixelRef.reset(new WrappedPixelRef(this, address, info, rowBytes, ctable));
+    // Note: this will trigger a call to onStrongRefDestroyed(), but
+    // we want the pixel ref to have a ref count of 0 at this point
+    mPixelRef->unref();
+}
+
+Bitmap::Bitmap(void* address, void* context, FreeFunc freeFunc,
+            const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable)
+        : mPixelStorageType(PixelStorageType::External) {
+    mPixelStorage.external.address = address;
+    mPixelStorage.external.context = context;
+    mPixelStorage.external.freeFunc = freeFunc;
+    mPixelRef.reset(new WrappedPixelRef(this, address, info, rowBytes, ctable));
+    // Note: this will trigger a call to onStrongRefDestroyed(), but
+    // we want the pixel ref to have a ref count of 0 at this point
+    mPixelRef->unref();
+}
+
+Bitmap::~Bitmap() {
+    doFreePixels();
+}
+
+void Bitmap::freePixels() {
+    AutoMutex _lock(mLock);
+    if (mPinnedRefCount == 0) {
+        doFreePixels();
+        mPixelStorageType = PixelStorageType::Invalid;
+    }
+}
+
+void Bitmap::doFreePixels() {
+    switch (mPixelStorageType) {
+    case PixelStorageType::Invalid:
+        // already free'd, nothing to do
+        break;
+    case PixelStorageType::External:
+        mPixelStorage.external.freeFunc(mPixelStorage.external.address,
+                mPixelStorage.external.context);
+        break;
+    case PixelStorageType::Java:
+        JNIEnv* env = jniEnv();
+        LOG_ALWAYS_FATAL_IF(mPixelStorage.java.jstrongRef,
+                "Deleting a bitmap wrapper while there are outstanding strong "
+                "references! mPinnedRefCount = %d", mPinnedRefCount);
+        env->DeleteWeakGlobalRef(mPixelStorage.java.jweakRef);
+        break;
+    }
+
+    if (android::uirenderer::Caches::hasInstance()) {
+        android::uirenderer::Caches::getInstance().textureCache.releaseTexture(
+                mPixelRef->getStableID());
+    }
+}
+
+bool Bitmap::hasHardwareMipMap() {
+    return mPixelRef->hasHardwareMipMap();
+}
+
+void Bitmap::setHasHardwareMipMap(bool hasMipMap) {
+    mPixelRef->setHasHardwareMipMap(hasMipMap);
+}
+
+const SkImageInfo& Bitmap::info() const {
+    assertValid();
+    return mPixelRef->info();
+}
+
+size_t Bitmap::rowBytes() const {
+    return mPixelRef->rowBytes();
+}
+
+SkPixelRef* Bitmap::peekAtPixelRef() const {
+    assertValid();
+    return mPixelRef.get();
+}
+
+SkPixelRef* Bitmap::refPixelRef() {
+    assertValid();
+    android::AutoMutex _lock(mLock);
+    return refPixelRefLocked();
+}
+
+SkPixelRef* Bitmap::refPixelRefLocked() {
+    mPixelRef->ref();
+    if (mPixelRef->unique()) {
+        // We just restored this from 0, pin the pixels and inc the strong count
+        // Note that there *might be* an incoming onStrongRefDestroyed from whatever
+        // last unref'd
+        pinPixelsLocked();
+        mPinnedRefCount++;
+    }
+    return mPixelRef.get();
+}
+
+void Bitmap::reconfigure(const SkImageInfo& info, size_t rowBytes,
+        SkColorTable* ctable) {
+    {
+        android::AutoMutex _lock(mLock);
+        if (mPinnedRefCount) {
+            ALOGW("Called reconfigure on a bitmap that is in use! This may"
+                    " cause graphical corruption!");
+        }
+    }
+    mPixelRef->reconfigure(info, rowBytes, ctable);
+}
+
+void Bitmap::reconfigure(const SkImageInfo& info) {
+    reconfigure(info, info.minRowBytes(), nullptr);
+}
+
+void Bitmap::detachFromJava() {
+    bool disposeSelf;
+    {
+        android::AutoMutex _lock(mLock);
+        mAttachedToJava = false;
+        disposeSelf = shouldDisposeSelfLocked();
+    }
+    if (disposeSelf) {
+        delete this;
+    }
+}
+
+bool Bitmap::shouldDisposeSelfLocked() {
+    return mPinnedRefCount == 0 && !mAttachedToJava;
+}
+
+JNIEnv* Bitmap::jniEnv() {
+    JNIEnv* env;
+    auto success = mPixelStorage.java.jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
+    LOG_ALWAYS_FATAL_IF(success != JNI_OK,
+        "Failed to get JNIEnv* from JVM: %p", mPixelStorage.java.jvm);
+    return env;
+}
+
+void Bitmap::onStrongRefDestroyed() {
+    bool disposeSelf = false;
+    {
+        android::AutoMutex _lock(mLock);
+        if (mPinnedRefCount > 0) {
+            mPinnedRefCount--;
+            if (mPinnedRefCount == 0) {
+                unpinPixelsLocked();
+                disposeSelf = shouldDisposeSelfLocked();
+            }
+        }
+    }
+    if (disposeSelf) {
+        delete this;
+    }
+}
+
+void Bitmap::pinPixelsLocked() {
+    switch (mPixelStorageType) {
+    case PixelStorageType::Invalid:
+        LOG_ALWAYS_FATAL("Cannot pin invalid pixels!");
+        break;
+    case PixelStorageType::External:
+        // Nothing to do
+        break;
+    case PixelStorageType::Java: {
+        JNIEnv* env = jniEnv();
+        if (!mPixelStorage.java.jstrongRef) {
+            mPixelStorage.java.jstrongRef = reinterpret_cast<jbyteArray>(
+                    env->NewGlobalRef(mPixelStorage.java.jweakRef));
+            if (!mPixelStorage.java.jstrongRef) {
+                LOG_ALWAYS_FATAL("Failed to acquire strong reference to pixels");
+            }
+        }
+        break;
+    }
+    }
+}
+
+void Bitmap::unpinPixelsLocked() {
+    switch (mPixelStorageType) {
+    case PixelStorageType::Invalid:
+        LOG_ALWAYS_FATAL("Cannot unpin invalid pixels!");
+        break;
+    case PixelStorageType::External:
+        // Don't need to do anything
+        break;
+    case PixelStorageType::Java: {
+        JNIEnv* env = jniEnv();
+        if (mPixelStorage.java.jstrongRef) {
+            env->DeleteGlobalRef(mPixelStorage.java.jstrongRef);
+            mPixelStorage.java.jstrongRef = nullptr;
+        }
+        break;
+    }
+    }
+}
+
+void Bitmap::getSkBitmap(SkBitmap* outBitmap) {
+    assertValid();
+    android::AutoMutex _lock(mLock);
+    // Safe because mPixelRef is a WrappedPixelRef type, otherwise rowBytes()
+    // would require locking the pixels first.
+    outBitmap->setInfo(mPixelRef->info(), mPixelRef->rowBytes());
+    outBitmap->setPixelRef(refPixelRefLocked())->unref();
+    outBitmap->setHasHardwareMipMap(hasHardwareMipMap());
+}
+
+void Bitmap::assertValid() const {
+    LOG_ALWAYS_FATAL_IF(mPixelStorageType == PixelStorageType::Invalid,
+            "Error, cannot access an invalid/free'd bitmap here!");
+}
+
+} // namespace android
+
+using namespace android;
+
+// Convenience class that does not take a global ref on the pixels, relying
+// on the caller already having a local JNI ref
+class LocalScopedBitmap {
+public:
+    LocalScopedBitmap(jlong bitmapHandle)
+            : mBitmap(reinterpret_cast<Bitmap*>(bitmapHandle)) {}
+
+    Bitmap* operator->() {
+        return mBitmap;
+    }
+
+    void* pixels() {
+        return mBitmap->peekAtPixelRef()->pixels();
+    }
+
+    bool valid() {
+        return mBitmap && mBitmap->valid();
+    }
+
+private:
+    Bitmap* mBitmap;
+};
+
 ///////////////////////////////////////////////////////////////////////////////
 // Conversions to/from SkColor, for get/setPixels, and the create method, which
 // is basically like setPixels
@@ -328,8 +660,8 @@
     SkBitmap bitmap;
     bitmap.setInfo(SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType));
 
-    jbyteArray buff = GraphicsJNI::allocateJavaPixelRef(env, &bitmap, NULL);
-    if (NULL == buff) {
+    Bitmap* nativeBitmap = GraphicsJNI::allocateJavaPixelRef(env, &bitmap, NULL);
+    if (!nativeBitmap) {
         return NULL;
     }
 
@@ -338,39 +670,41 @@
                 0, 0, width, height, bitmap);
     }
 
-    return GraphicsJNI::createBitmap(env, new SkBitmap(bitmap), buff,
-            getPremulBitmapCreateFlags(isMutable), NULL, NULL);
+    return GraphicsJNI::createBitmap(env, nativeBitmap,
+            getPremulBitmapCreateFlags(isMutable));
 }
 
 static jobject Bitmap_copy(JNIEnv* env, jobject, jlong srcHandle,
                            jint dstConfigHandle, jboolean isMutable) {
-    const SkBitmap* src = reinterpret_cast<SkBitmap*>(srcHandle);
+    SkBitmap src;
+    reinterpret_cast<Bitmap*>(srcHandle)->getSkBitmap(&src);
     SkColorType dstCT = GraphicsJNI::legacyBitmapConfigToColorType(dstConfigHandle);
     SkBitmap            result;
     JavaPixelAllocator  allocator(env);
 
-    if (!src->copyTo(&result, dstCT, &allocator)) {
+    if (!src.copyTo(&result, dstCT, &allocator)) {
         return NULL;
     }
-    return GraphicsJNI::createBitmap(env, new SkBitmap(result), allocator.getStorageObj(),
-            getPremulBitmapCreateFlags(isMutable), NULL, NULL);
+    Bitmap* bitmap = allocator.getStorageObjAndReset();
+    return GraphicsJNI::createBitmap(env, bitmap,
+            getPremulBitmapCreateFlags(isMutable));
 }
 
 static void Bitmap_destructor(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    delete bitmap;
+    LocalScopedBitmap bitmap(bitmapHandle);
+    bitmap->detachFromJava();
 }
 
 static jboolean Bitmap_recycle(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    bitmap->setPixels(NULL, NULL);
+    LocalScopedBitmap bitmap(bitmapHandle);
+    bitmap->freePixels();
     return JNI_TRUE;
 }
 
 static void Bitmap_reconfigure(JNIEnv* env, jobject clazz, jlong bitmapHandle,
         jint width, jint height, jint configHandle, jint allocSize,
         jboolean requestPremul) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    LocalScopedBitmap bitmap(bitmapHandle);
     SkColorType colorType = GraphicsJNI::legacyBitmapConfigToColorType(configHandle);
 
     // ARGB_4444 is a deprecated format, convert automatically to 8888
@@ -383,11 +717,9 @@
         doThrowIAE(env, "Bitmap not large enough to support new configuration");
         return;
     }
-    SkPixelRef* ref = bitmap->pixelRef();
-    ref->ref();
     SkAlphaType alphaType;
-    if (bitmap->colorType() != kRGB_565_SkColorType
-            && bitmap->alphaType() == kOpaque_SkAlphaType) {
+    if (bitmap->info().colorType() != kRGB_565_SkColorType
+            && bitmap->info().alphaType() == kOpaque_SkAlphaType) {
         // If the original bitmap was set to opaque, keep that setting, unless it
         // was 565, which is required to be opaque.
         alphaType = kOpaque_SkAlphaType;
@@ -395,22 +727,7 @@
         // Otherwise respect the premultiplied request.
         alphaType = requestPremul ? kPremul_SkAlphaType : kUnpremul_SkAlphaType;
     }
-    bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType));
-    // FIXME: Skia thinks of an SkPixelRef as having a constant SkImageInfo (except for
-    // its alphatype), so it would make more sense from Skia's perspective to create a
-    // new SkPixelRef. That said, libhwui uses the pointer to the SkPixelRef as a key
-    // for its cache, so it won't realize this is the same Java Bitmap.
-    SkImageInfo& info = const_cast<SkImageInfo&>(ref->info());
-    // Use the updated from the SkBitmap, which may have corrected an invalid alphatype.
-    // (e.g. 565 non-opaque)
-    info = bitmap->info();
-    bitmap->setPixelRef(ref);
-
-    // notifyPixelsChanged will increment the generation ID even though the actual pixel data
-    // hasn't been touched. This signals the renderer that the bitmap (including width, height,
-    // colortype and alphatype) has changed.
-    ref->notifyPixelsChanged();
-    ref->unref();
+    bitmap->reconfigure(SkImageInfo::Make(width, height, colorType, alphaType));
 }
 
 // These must match the int values in Bitmap.java
@@ -423,7 +740,8 @@
 static jboolean Bitmap_compress(JNIEnv* env, jobject clazz, jlong bitmapHandle,
                                 jint format, jint quality,
                                 jobject jstream, jbyteArray jstorage) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+
+    LocalScopedBitmap bitmap(bitmapHandle);
     SkImageEncoder::Type fm;
 
     switch (format) {
@@ -440,92 +758,92 @@
         return JNI_FALSE;
     }
 
+    if (!bitmap.valid()) {
+        return JNI_FALSE;
+    }
+
     bool success = false;
-    if (NULL != bitmap) {
-        SkAutoLockPixels alp(*bitmap);
 
-        if (NULL == bitmap->getPixels()) {
-            return JNI_FALSE;
-        }
+    std::unique_ptr<SkWStream> strm(CreateJavaOutputStreamAdaptor(env, jstream, jstorage));
+    if (!strm.get()) {
+        return JNI_FALSE;
+    }
 
-        SkWStream* strm = CreateJavaOutputStreamAdaptor(env, jstream, jstorage);
-        if (NULL == strm) {
-            return JNI_FALSE;
-        }
-
-        SkImageEncoder* encoder = SkImageEncoder::Create(fm);
-        if (NULL != encoder) {
-            success = encoder->encodeStream(strm, *bitmap, quality);
-            delete encoder;
-        }
-        delete strm;
+    std::unique_ptr<SkImageEncoder> encoder(SkImageEncoder::Create(fm));
+    if (encoder.get()) {
+        SkBitmap skbitmap;
+        bitmap->getSkBitmap(&skbitmap);
+        success = encoder->encodeStream(strm.get(), skbitmap, quality);
     }
     return success ? JNI_TRUE : JNI_FALSE;
 }
 
 static void Bitmap_erase(JNIEnv* env, jobject, jlong bitmapHandle, jint color) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    bitmap->eraseColor(color);
+    LocalScopedBitmap bitmap(bitmapHandle);
+    SkBitmap skBitmap;
+    bitmap->getSkBitmap(&skBitmap);
+    skBitmap.eraseColor(color);
 }
 
 static jint Bitmap_rowBytes(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    LocalScopedBitmap bitmap(bitmapHandle);
     return static_cast<jint>(bitmap->rowBytes());
 }
 
 static jint Bitmap_config(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    return GraphicsJNI::colorTypeToLegacyBitmapConfig(bitmap->colorType());
+    LocalScopedBitmap bitmap(bitmapHandle);
+    return GraphicsJNI::colorTypeToLegacyBitmapConfig(bitmap->info().colorType());
 }
 
 static jint Bitmap_getGenerationId(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    return static_cast<jint>(bitmap->getGenerationID());
+    LocalScopedBitmap bitmap(bitmapHandle);
+    return static_cast<jint>(bitmap->peekAtPixelRef()->getGenerationID());
 }
 
 static jboolean Bitmap_isPremultiplied(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    if (bitmap->alphaType() == kPremul_SkAlphaType) {
+    LocalScopedBitmap bitmap(bitmapHandle);
+    if (bitmap->info().alphaType() == kPremul_SkAlphaType) {
         return JNI_TRUE;
     }
     return JNI_FALSE;
 }
 
 static jboolean Bitmap_hasAlpha(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    return !bitmap->isOpaque() ? JNI_TRUE : JNI_FALSE;
+    LocalScopedBitmap bitmap(bitmapHandle);
+    return !bitmap->info().isOpaque() ? JNI_TRUE : JNI_FALSE;
 }
 
 static void Bitmap_setHasAlpha(JNIEnv* env, jobject, jlong bitmapHandle,
         jboolean hasAlpha, jboolean requestPremul) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    LocalScopedBitmap bitmap(bitmapHandle);
     if (hasAlpha) {
-        bitmap->setAlphaType(requestPremul ? kPremul_SkAlphaType : kUnpremul_SkAlphaType);
+        bitmap->peekAtPixelRef()->changeAlphaType(
+                requestPremul ? kPremul_SkAlphaType : kUnpremul_SkAlphaType);
     } else {
-        bitmap->setAlphaType(kOpaque_SkAlphaType);
+        bitmap->peekAtPixelRef()->changeAlphaType(kOpaque_SkAlphaType);
     }
 }
 
 static void Bitmap_setPremultiplied(JNIEnv* env, jobject, jlong bitmapHandle,
         jboolean isPremul) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    if (!bitmap->isOpaque()) {
+    LocalScopedBitmap bitmap(bitmapHandle);
+    if (!bitmap->info().isOpaque()) {
         if (isPremul) {
-            bitmap->setAlphaType(kPremul_SkAlphaType);
+            bitmap->peekAtPixelRef()->changeAlphaType(kPremul_SkAlphaType);
         } else {
-            bitmap->setAlphaType(kUnpremul_SkAlphaType);
+            bitmap->peekAtPixelRef()->changeAlphaType(kUnpremul_SkAlphaType);
         }
     }
 }
 
 static jboolean Bitmap_hasMipMap(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    LocalScopedBitmap bitmap(bitmapHandle);
     return bitmap->hasHardwareMipMap() ? JNI_TRUE : JNI_FALSE;
 }
 
 static void Bitmap_setHasMipMap(JNIEnv* env, jobject, jlong bitmapHandle,
                                 jboolean hasMipMap) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    LocalScopedBitmap bitmap(bitmapHandle);
     bitmap->setHasHardwareMipMap(hasMipMap);
 }
 
@@ -580,8 +898,8 @@
         }
     }
 
-    jbyteArray buffer = GraphicsJNI::allocateJavaPixelRef(env, bitmap.get(), ctable);
-    if (NULL == buffer) {
+    android::Bitmap* nativeBitmap = GraphicsJNI::allocateJavaPixelRef(env, bitmap.get(), ctable);
+    if (!nativeBitmap) {
         SkSafeUnref(ctable);
         return NULL;
     }
@@ -593,6 +911,7 @@
     android::Parcel::ReadableBlob blob;
     android::status_t status = p->readBlob(size, &blob);
     if (status) {
+        nativeBitmap->detachFromJava();
         doThrowRE(env, "Could not read bitmap from parcel blob.");
         return NULL;
     }
@@ -603,7 +922,7 @@
 
     blob.release();
 
-    return GraphicsJNI::createBitmap(env, bitmap.release(), buffer,
+    return GraphicsJNI::createBitmap(env, nativeBitmap,
             getPremulBitmapCreateFlags(isMutable), NULL, NULL, density);
 }
 
@@ -611,24 +930,25 @@
                                      jlong bitmapHandle,
                                      jboolean isMutable, jint density,
                                      jobject parcel) {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
     if (parcel == NULL) {
         SkDebugf("------- writeToParcel null parcel\n");
         return JNI_FALSE;
     }
 
     android::Parcel* p = android::parcelForJavaObject(env, parcel);
+    SkBitmap bitmap;
+    reinterpret_cast<Bitmap*>(bitmapHandle)->getSkBitmap(&bitmap);
 
     p->writeInt32(isMutable);
-    p->writeInt32(bitmap->colorType());
-    p->writeInt32(bitmap->alphaType());
-    p->writeInt32(bitmap->width());
-    p->writeInt32(bitmap->height());
-    p->writeInt32(bitmap->rowBytes());
+    p->writeInt32(bitmap.colorType());
+    p->writeInt32(bitmap.alphaType());
+    p->writeInt32(bitmap.width());
+    p->writeInt32(bitmap.height());
+    p->writeInt32(bitmap.rowBytes());
     p->writeInt32(density);
 
-    if (bitmap->colorType() == kIndex_8_SkColorType) {
-        SkColorTable* ctable = bitmap->getColorTable();
+    if (bitmap.colorType() == kIndex_8_SkColorType) {
+        SkColorTable* ctable = bitmap.getColorTable();
         if (ctable != NULL) {
             int count = ctable->count();
             p->writeInt32(count);
@@ -639,7 +959,7 @@
         }
     }
 
-    size_t size = bitmap->getSize();
+    size_t size = bitmap.getSize();
 
     android::Parcel::WritableBlob blob;
     android::status_t status = p->writeBlob(size, &blob);
@@ -648,14 +968,14 @@
         return JNI_FALSE;
     }
 
-    bitmap->lockPixels();
-    const void* pSrc =  bitmap->getPixels();
+    bitmap.lockPixels();
+    const void* pSrc =  bitmap.getPixels();
     if (pSrc == NULL) {
         memset(blob.data(), 0, size);
     } else {
         memcpy(blob.data(), pSrc, size);
     }
-    bitmap->unlockPixels();
+    bitmap.unlockPixels();
 
     blob.release();
     return JNI_TRUE;
@@ -664,17 +984,17 @@
 static jobject Bitmap_extractAlpha(JNIEnv* env, jobject clazz,
                                    jlong srcHandle, jlong paintHandle,
                                    jintArray offsetXY) {
-    const SkBitmap* src = reinterpret_cast<SkBitmap*>(srcHandle);
+    SkBitmap src;
+    reinterpret_cast<Bitmap*>(srcHandle)->getSkBitmap(&src);
     const android::Paint* paint = reinterpret_cast<android::Paint*>(paintHandle);
     SkIPoint  offset;
-    SkBitmap* dst = new SkBitmap;
+    SkBitmap dst;
     JavaPixelAllocator allocator(env);
 
-    src->extractAlpha(dst, paint, &allocator, &offset);
+    src.extractAlpha(&dst, paint, &allocator, &offset);
     // If Skia can't allocate pixels for destination bitmap, it resets
     // it, that is set its pixels buffer to NULL, and zero width and height.
-    if (dst->getPixels() == NULL && src->getPixels() != NULL) {
-        delete dst;
+    if (dst.getPixels() == NULL && src.getPixels() != NULL) {
         doThrowOOME(env, "failed to allocate pixels for alpha");
         return NULL;
     }
@@ -685,53 +1005,55 @@
         env->ReleaseIntArrayElements(offsetXY, array, 0);
     }
 
-    return GraphicsJNI::createBitmap(env, dst, allocator.getStorageObj(),
-            getPremulBitmapCreateFlags(true), NULL, NULL);
+    return GraphicsJNI::createBitmap(env, allocator.getStorageObjAndReset(),
+            getPremulBitmapCreateFlags(true));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 
 static jint Bitmap_getPixel(JNIEnv* env, jobject, jlong bitmapHandle,
         jint x, jint y) {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkAutoLockPixels alp(*bitmap);
+    SkBitmap bitmap;
+    reinterpret_cast<Bitmap*>(bitmapHandle)->getSkBitmap(&bitmap);
+    SkAutoLockPixels alp(bitmap);
 
-    ToColorProc proc = ChooseToColorProc(*bitmap);
+    ToColorProc proc = ChooseToColorProc(bitmap);
     if (NULL == proc) {
         return 0;
     }
-    const void* src = bitmap->getAddr(x, y);
+    const void* src = bitmap.getAddr(x, y);
     if (NULL == src) {
         return 0;
     }
 
     SkColor dst[1];
-    proc(dst, src, 1, bitmap->getColorTable());
+    proc(dst, src, 1, bitmap.getColorTable());
     return static_cast<jint>(dst[0]);
 }
 
 static void Bitmap_getPixels(JNIEnv* env, jobject, jlong bitmapHandle,
         jintArray pixelArray, jint offset, jint stride,
         jint x, jint y, jint width, jint height) {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkAutoLockPixels alp(*bitmap);
+    SkBitmap bitmap;
+    reinterpret_cast<Bitmap*>(bitmapHandle)->getSkBitmap(&bitmap);
+    SkAutoLockPixels alp(bitmap);
 
-    ToColorProc proc = ChooseToColorProc(*bitmap);
+    ToColorProc proc = ChooseToColorProc(bitmap);
     if (NULL == proc) {
         return;
     }
-    const void* src = bitmap->getAddr(x, y);
+    const void* src = bitmap.getAddr(x, y);
     if (NULL == src) {
         return;
     }
 
-    SkColorTable* ctable = bitmap->getColorTable();
+    SkColorTable* ctable = bitmap.getColorTable();
     jint* dst = env->GetIntArrayElements(pixelArray, NULL);
     SkColor* d = (SkColor*)dst + offset;
     while (--height >= 0) {
         proc(d, src, width, ctable);
         d += stride;
-        src = (void*)((const char*)src + bitmap->rowBytes());
+        src = (void*)((const char*)src + bitmap.rowBytes());
     }
     env->ReleaseIntArrayElements(pixelArray, dst, 0);
 }
@@ -740,79 +1062,85 @@
 
 static void Bitmap_setPixel(JNIEnv* env, jobject, jlong bitmapHandle,
         jint x, jint y, jint colorHandle) {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    SkBitmap bitmap;
+    reinterpret_cast<Bitmap*>(bitmapHandle)->getSkBitmap(&bitmap);
     SkColor color = static_cast<SkColor>(colorHandle);
-    SkAutoLockPixels alp(*bitmap);
-    if (NULL == bitmap->getPixels()) {
+    SkAutoLockPixels alp(bitmap);
+    if (NULL == bitmap.getPixels()) {
         return;
     }
 
-    FromColorProc proc = ChooseFromColorProc(*bitmap);
+    FromColorProc proc = ChooseFromColorProc(bitmap);
     if (NULL == proc) {
         return;
     }
 
-    proc(bitmap->getAddr(x, y), &color, 1, x, y);
-    bitmap->notifyPixelsChanged();
+    proc(bitmap.getAddr(x, y), &color, 1, x, y);
+    bitmap.notifyPixelsChanged();
 }
 
 static void Bitmap_setPixels(JNIEnv* env, jobject, jlong bitmapHandle,
         jintArray pixelArray, jint offset, jint stride,
         jint x, jint y, jint width, jint height) {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    SkBitmap bitmap;
+    reinterpret_cast<Bitmap*>(bitmapHandle)->getSkBitmap(&bitmap);
     GraphicsJNI::SetPixels(env, pixelArray, offset, stride,
-            x, y, width, height, *bitmap);
+            x, y, width, height, bitmap);
 }
 
 static void Bitmap_copyPixelsToBuffer(JNIEnv* env, jobject,
                                       jlong bitmapHandle, jobject jbuffer) {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkAutoLockPixels alp(*bitmap);
-    const void* src = bitmap->getPixels();
+    SkBitmap bitmap;
+    reinterpret_cast<Bitmap*>(bitmapHandle)->getSkBitmap(&bitmap);
+    SkAutoLockPixels alp(bitmap);
+    const void* src = bitmap.getPixels();
 
     if (NULL != src) {
         android::AutoBufferPointer abp(env, jbuffer, JNI_TRUE);
 
         // the java side has already checked that buffer is large enough
-        memcpy(abp.pointer(), src, bitmap->getSize());
+        memcpy(abp.pointer(), src, bitmap.getSize());
     }
 }
 
 static void Bitmap_copyPixelsFromBuffer(JNIEnv* env, jobject,
                                         jlong bitmapHandle, jobject jbuffer) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkAutoLockPixels alp(*bitmap);
-    void* dst = bitmap->getPixels();
+    SkBitmap bitmap;
+    reinterpret_cast<Bitmap*>(bitmapHandle)->getSkBitmap(&bitmap);
+    SkAutoLockPixels alp(bitmap);
+    void* dst = bitmap.getPixels();
 
     if (NULL != dst) {
         android::AutoBufferPointer abp(env, jbuffer, JNI_FALSE);
         // the java side has already checked that buffer is large enough
-        memcpy(dst, abp.pointer(), bitmap->getSize());
-        bitmap->notifyPixelsChanged();
+        memcpy(dst, abp.pointer(), bitmap.getSize());
+        bitmap.notifyPixelsChanged();
     }
 }
 
 static jboolean Bitmap_sameAs(JNIEnv* env, jobject, jlong bm0Handle,
                               jlong bm1Handle) {
-    const SkBitmap* bm0 = reinterpret_cast<SkBitmap*>(bm0Handle);
-    const SkBitmap* bm1 = reinterpret_cast<SkBitmap*>(bm1Handle);
-    if (bm0->width() != bm1->width() ||
-        bm0->height() != bm1->height() ||
-        bm0->colorType() != bm1->colorType()) {
+    SkBitmap bm0;
+    SkBitmap bm1;
+    reinterpret_cast<Bitmap*>(bm0Handle)->getSkBitmap(&bm0);
+    reinterpret_cast<Bitmap*>(bm1Handle)->getSkBitmap(&bm1);
+    if (bm0.width() != bm1.width() ||
+        bm0.height() != bm1.height() ||
+        bm0.colorType() != bm1.colorType()) {
         return JNI_FALSE;
     }
 
-    SkAutoLockPixels alp0(*bm0);
-    SkAutoLockPixels alp1(*bm1);
+    SkAutoLockPixels alp0(bm0);
+    SkAutoLockPixels alp1(bm1);
 
     // if we can't load the pixels, return false
-    if (NULL == bm0->getPixels() || NULL == bm1->getPixels()) {
+    if (NULL == bm0.getPixels() || NULL == bm1.getPixels()) {
         return JNI_FALSE;
     }
 
-    if (bm0->colorType() == kIndex_8_SkColorType) {
-        SkColorTable* ct0 = bm0->getColorTable();
-        SkColorTable* ct1 = bm1->getColorTable();
+    if (bm0.colorType() == kIndex_8_SkColorType) {
+        SkColorTable* ct0 = bm0.getColorTable();
+        SkColorTable* ct1 = bm1.getColorTable();
         if (NULL == ct0 || NULL == ct1) {
             return JNI_FALSE;
         }
@@ -829,16 +1157,16 @@
     // now compare each scanline. We can't do the entire buffer at once,
     // since we don't care about the pixel values that might extend beyond
     // the width (since the scanline might be larger than the logical width)
-    const int h = bm0->height();
-    const size_t size = bm0->width() * bm0->bytesPerPixel();
+    const int h = bm0.height();
+    const size_t size = bm0.width() * bm0.bytesPerPixel();
     for (int y = 0; y < h; y++) {
         // SkBitmap::getAddr(int, int) may return NULL due to unrecognized config
         // (ex: kRLE_Index8_Config). This will cause memcmp method to crash. Since bm0
         // and bm1 both have pixel data() (have passed NULL == getPixels() check),
         // those 2 bitmaps should be valid (only unrecognized), we return JNI_FALSE
         // to warn user those 2 unrecognized config bitmaps may be different.
-        void *bm0Addr = bm0->getAddr(0, y);
-        void *bm1Addr = bm1->getAddr(0, y);
+        void *bm0Addr = bm0.getAddr(0, y);
+        void *bm1Addr = bm1.getAddr(0, y);
 
         if(bm0Addr == NULL || bm1Addr == NULL) {
             return JNI_FALSE;
@@ -851,10 +1179,11 @@
     return JNI_TRUE;
 }
 
-static void Bitmap_prepareToDraw(JNIEnv* env, jobject, jlong bitmapHandle) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    bitmap->lockPixels();
-    bitmap->unlockPixels();
+static jlong Bitmap_refPixelRef(JNIEnv* env, jobject, jlong bitmapHandle) {
+    LocalScopedBitmap bitmap(bitmapHandle);
+    SkPixelRef* pixelRef = bitmap.valid() ? bitmap->peekAtPixelRef() : nullptr;
+    SkSafeRef(pixelRef);
+    return reinterpret_cast<jlong>(pixelRef);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -895,7 +1224,7 @@
     {   "nativeCopyPixelsFromBuffer", "(JLjava/nio/Buffer;)V",
                                             (void*)Bitmap_copyPixelsFromBuffer },
     {   "nativeSameAs",             "(JJ)Z", (void*)Bitmap_sameAs },
-    {   "nativePrepareToDraw",      "(J)V", (void*)Bitmap_prepareToDraw },
+    {   "nativeRefPixelRef",        "(J)J", (void*)Bitmap_refPixelRef },
 };
 
 int register_android_graphics_Bitmap(JNIEnv* env)
diff --git a/core/jni/android/graphics/Bitmap.h b/core/jni/android/graphics/Bitmap.h
new file mode 100644
index 0000000..efeb898
--- /dev/null
+++ b/core/jni/android/graphics/Bitmap.h
@@ -0,0 +1,116 @@
+/*
+ * 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.
+ */
+#ifndef BITMAP_H_
+#define BITMAP_H_
+
+#include <jni.h>
+#include <SkBitmap.h>
+#include <SkColorTable.h>
+#include <SkImageInfo.h>
+#include <utils/Mutex.h>
+#include <memory>
+
+namespace android {
+
+enum class PixelStorageType {
+    Invalid,
+    External,
+    Java,
+};
+
+class WrappedPixelRef;
+
+typedef void (*FreeFunc)(void* addr, void* context);
+
+/**
+ * Glue-thingy that deals with managing the interaction between the Java
+ * Bitmap object & SkBitmap along with trying to map a notion of strong/weak
+ * lifecycles onto SkPixelRef which only has strong counts to avoid requiring
+ * two GC passes to free the byte[] that backs a Bitmap.
+ *
+ * Since not all Bitmaps are byte[]-backed it also supports external allocations,
+ * which currently is used by screenshots to wrap a gralloc buffer.
+ */
+class Bitmap {
+public:
+    Bitmap(JNIEnv* env, jbyteArray storageObj, void* address,
+            const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable);
+    Bitmap(void* address, void* context, FreeFunc freeFunc,
+            const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable);
+
+    const SkImageInfo& info() const;
+
+    // Returns nullptr if it is not backed by a jbyteArray
+    jbyteArray javaByteArray() const {
+        return mPixelStorageType == PixelStorageType::Java
+                ? mPixelStorage.java.jstrongRef : nullptr;
+    }
+
+    int width() const { return info().width(); }
+    int height() const { return info().height(); }
+    size_t rowBytes() const;
+    SkPixelRef* peekAtPixelRef() const;
+    SkPixelRef* refPixelRef();
+    bool valid() const { return mPixelStorageType != PixelStorageType::Invalid; }
+
+    void reconfigure(const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable);
+    void reconfigure(const SkImageInfo& info);
+
+    void getSkBitmap(SkBitmap* outBitmap);
+    void detachFromJava();
+
+    void freePixels();
+
+    bool hasHardwareMipMap();
+    void setHasHardwareMipMap(bool hasMipMap);
+
+private:
+    friend class WrappedPixelRef;
+
+    ~Bitmap();
+    void doFreePixels();
+    void onStrongRefDestroyed();
+
+    void pinPixelsLocked();
+    void unpinPixelsLocked();
+    JNIEnv* jniEnv();
+    bool shouldDisposeSelfLocked();
+    void assertValid() const;
+    SkPixelRef* refPixelRefLocked();
+
+    android::Mutex mLock;
+    int mPinnedRefCount = 0;
+    std::unique_ptr<WrappedPixelRef> mPixelRef;
+    PixelStorageType mPixelStorageType;
+    bool mAttachedToJava = true;
+
+    union {
+        struct {
+            void* address;
+            void* context;
+            FreeFunc freeFunc;
+        } external;
+        struct {
+            JavaVM* jvm;
+            jweak jweakRef;
+            jbyteArray jstrongRef;
+        } java;
+    } mPixelStorage;
+};
+
+} // namespace android
+
+#endif /* BITMAP_H_ */
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 4c4a39d..3ca4e72 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -156,13 +156,11 @@
 
 class RecyclingPixelAllocator : public SkBitmap::Allocator {
 public:
-    RecyclingPixelAllocator(SkPixelRef* pixelRef, unsigned int size)
-            : mPixelRef(pixelRef), mSize(size) {
-        SkSafeRef(mPixelRef);
+    RecyclingPixelAllocator(android::Bitmap* bitmap, unsigned int size)
+            : mBitmap(bitmap), mSize(size) {
     }
 
     ~RecyclingPixelAllocator() {
-        SkSafeUnref(mPixelRef);
     }
 
     virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
@@ -185,11 +183,9 @@
             return false;
         }
 
-        // Create a new pixelref with the new ctable that wraps the previous pixelref
-        SkPixelRef* pr = new AndroidPixelRef(*static_cast<AndroidPixelRef*>(mPixelRef),
-                info, bitmap->rowBytes(), ctable);
+        mBitmap->reconfigure(info, bitmap->rowBytes(), ctable);
+        bitmap->setPixelRef(mBitmap->refPixelRef())->unref();
 
-        bitmap->setPixelRef(pr)->unref();
         // since we're already allocated, we lockPixels right away
         // HeapAllocator/JavaPixelAllocator behaves this way too
         bitmap->lockPixels();
@@ -197,7 +193,7 @@
     }
 
 private:
-    SkPixelRef* const mPixelRef;
+    android::Bitmap* const mBitmap;
     const unsigned int mSize;
 };
 
@@ -258,27 +254,24 @@
     decoder->setPreferQualityOverSpeed(preferQualityOverSpeed);
     decoder->setRequireUnpremultipliedColors(requireUnpremultiplied);
 
-    SkBitmap* outputBitmap = NULL;
+    android::Bitmap* reuseBitmap = nullptr;
     unsigned int existingBufferSize = 0;
     if (javaBitmap != NULL) {
-        outputBitmap = GraphicsJNI::getSkBitmap(env, javaBitmap);
-        if (outputBitmap->isImmutable()) {
+        reuseBitmap = GraphicsJNI::getBitmap(env, javaBitmap);
+        if (reuseBitmap->peekAtPixelRef()->isImmutable()) {
             ALOGW("Unable to reuse an immutable bitmap as an image decoder target.");
             javaBitmap = NULL;
-            outputBitmap = NULL;
+            reuseBitmap = nullptr;
         } else {
             existingBufferSize = GraphicsJNI::getBitmapAllocationByteCount(env, javaBitmap);
         }
     }
 
-    SkAutoTDelete<SkBitmap> adb(outputBitmap == NULL ? new SkBitmap : NULL);
-    if (outputBitmap == NULL) outputBitmap = adb.get();
-
     NinePatchPeeker peeker(decoder);
     decoder->setPeeker(&peeker);
 
     JavaPixelAllocator javaAllocator(env);
-    RecyclingPixelAllocator recyclingAllocator(outputBitmap->pixelRef(), existingBufferSize);
+    RecyclingPixelAllocator recyclingAllocator(reuseBitmap, existingBufferSize);
     ScaleCheckingAllocator scaleCheckingAllocator(scale, existingBufferSize);
     SkBitmap::Allocator* outputAllocator = (javaBitmap != NULL) ?
             (SkBitmap::Allocator*)&recyclingAllocator : (SkBitmap::Allocator*)&javaAllocator;
@@ -374,6 +367,7 @@
         }
     }
 
+    SkBitmap outputBitmap;
     if (willScale) {
         // This is weird so let me explain: we could use the scale parameter
         // directly, but for historical reasons this is how the corresponding
@@ -388,26 +382,27 @@
         // FIXME: If the alphaType is kUnpremul and the image has alpha, the
         // colors may not be correct, since Skia does not yet support drawing
         // to/from unpremultiplied bitmaps.
-        outputBitmap->setInfo(SkImageInfo::Make(scaledWidth, scaledHeight,
+        outputBitmap.setInfo(SkImageInfo::Make(scaledWidth, scaledHeight,
                 colorType, decodingBitmap.alphaType()));
-        if (!outputBitmap->tryAllocPixels(outputAllocator, NULL)) {
+        if (!outputBitmap.tryAllocPixels(outputAllocator, NULL)) {
             return nullObjectReturn("allocation failed for scaled bitmap");
         }
 
         // If outputBitmap's pixels are newly allocated by Java, there is no need
         // to erase to 0, since the pixels were initialized to 0.
         if (outputAllocator != &javaAllocator) {
-            outputBitmap->eraseColor(0);
+            outputBitmap.eraseColor(0);
         }
 
         SkPaint paint;
         paint.setFilterQuality(kLow_SkFilterQuality);
 
-        SkCanvas canvas(*outputBitmap);
+        SkCanvas canvas(outputBitmap);
         canvas.scale(sx, sy);
+        canvas.drawARGB(0x00, 0x00, 0x00, 0x00);
         canvas.drawBitmap(decodingBitmap, 0.0f, 0.0f, &paint);
     } else {
-        outputBitmap->swap(decodingBitmap);
+        outputBitmap.swap(decodingBitmap);
     }
 
     if (padding) {
@@ -422,22 +417,19 @@
 
     // if we get here, we're in kDecodePixels_Mode and will therefore
     // already have a pixelref installed.
-    if (outputBitmap->pixelRef() == NULL) {
+    if (outputBitmap.pixelRef() == NULL) {
         return nullObjectReturn("Got null SkPixelRef");
     }
 
     if (!isMutable && javaBitmap == NULL) {
         // promise we will never change our pixels (great for sharing and pictures)
-        outputBitmap->setImmutable();
+        outputBitmap.setImmutable();
     }
 
-    // detach bitmap from its autodeleter, since we want to own it now
-    adb.detach();
-
     if (javaBitmap != NULL) {
         bool isPremultiplied = !requireUnpremultiplied;
-        GraphicsJNI::reinitBitmap(env, javaBitmap, outputBitmap, isPremultiplied);
-        outputBitmap->notifyPixelsChanged();
+        GraphicsJNI::reinitBitmap(env, javaBitmap, outputBitmap.info(), isPremultiplied);
+        outputBitmap.notifyPixelsChanged();
         // If a java bitmap was passed in for reuse, pass it back
         return javaBitmap;
     }
@@ -447,7 +439,7 @@
     if (!requireUnpremultiplied) bitmapCreateFlags |= GraphicsJNI::kBitmapCreateFlag_Premultiplied;
 
     // now create the java bitmap
-    return GraphicsJNI::createBitmap(env, outputBitmap, javaAllocator.getStorageObj(),
+    return GraphicsJNI::createBitmap(env, javaAllocator.getStorageObjAndReset(),
             bitmapCreateFlags, ninePatchChunk, ninePatchInsets, -1);
 }
 
diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp
index 3525d07..08a3f6f 100644
--- a/core/jni/android/graphics/BitmapRegionDecoder.cpp
+++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp
@@ -212,26 +212,21 @@
     region.fTop = start_y;
     region.fRight = start_x + width;
     region.fBottom = start_y + height;
-    SkBitmap* bitmap = NULL;
-    SkAutoTDelete<SkBitmap> adb;
+    SkBitmap bitmap;
 
     if (tileBitmap != NULL) {
         // Re-use bitmap.
-        bitmap = GraphicsJNI::getSkBitmap(env, tileBitmap);
-    }
-    if (bitmap == NULL) {
-        bitmap = new SkBitmap;
-        adb.reset(bitmap);
+        GraphicsJNI::getSkBitmap(env, tileBitmap, &bitmap);
     }
 
-    if (!brd->decodeRegion(bitmap, region, prefColorType, sampleSize)) {
+    if (!brd->decodeRegion(&bitmap, region, prefColorType, sampleSize)) {
         return nullObjectReturn("decoder->decodeRegion returned false");
     }
 
     // update options (if any)
     if (NULL != options) {
-        env->SetIntField(options, gOptions_widthFieldID, bitmap->width());
-        env->SetIntField(options, gOptions_heightFieldID, bitmap->height());
+        env->SetIntField(options, gOptions_widthFieldID, bitmap.width());
+        env->SetIntField(options, gOptions_heightFieldID, bitmap.height());
         // TODO: set the mimeType field with the data from the codec.
         // but how to reuse a set of strings, rather than allocating new one
         // each time?
@@ -240,19 +235,16 @@
     }
 
     if (tileBitmap != NULL) {
-        bitmap->notifyPixelsChanged();
+        bitmap.notifyPixelsChanged();
         return tileBitmap;
     }
 
-    // detach bitmap from its autodeleter, since we want to own it now
-    adb.detach();
-
     JavaPixelAllocator* allocator = (JavaPixelAllocator*) decoder->getAllocator();
-    jbyteArray buff = allocator->getStorageObjAndReset();
 
     int bitmapCreateFlags = 0;
     if (!requireUnpremultiplied) bitmapCreateFlags |= GraphicsJNI::kBitmapCreateFlag_Premultiplied;
-    return GraphicsJNI::createBitmap(env, bitmap, buff, bitmapCreateFlags, NULL, NULL, -1);
+    return GraphicsJNI::createBitmap(env, allocator->getStorageObjAndReset(),
+            bitmapCreateFlags);
 }
 
 static jint nativeGetHeight(JNIEnv* env, jobject, jlong brdHandle) {
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index 44037dd..1c6f7de 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -154,7 +154,7 @@
 static jfieldID gPointF_yFieldID;
 
 static jclass   gBitmap_class;
-static jfieldID gBitmap_skBitmapPtr;
+static jfieldID gBitmap_nativePtr;
 static jmethodID gBitmap_constructorMethodID;
 static jmethodID gBitmap_reinitMethodID;
 static jmethodID gBitmap_getAllocationByteCountMethodID;
@@ -338,16 +338,24 @@
     return static_cast<SkColorType>(gConfig2ColorType[legacyConfig]);
 }
 
-SkBitmap* GraphicsJNI::getSkBitmap(JNIEnv* env, jobject bitmap) {
+android::Bitmap* GraphicsJNI::getBitmap(JNIEnv* env, jobject bitmap) {
     SkASSERT(env);
     SkASSERT(bitmap);
     SkASSERT(env->IsInstanceOf(bitmap, gBitmap_class));
-    jlong bitmapHandle = env->GetLongField(bitmap, gBitmap_skBitmapPtr);
-    SkBitmap* b = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    jlong bitmapHandle = env->GetLongField(bitmap, gBitmap_nativePtr);
+    android::Bitmap* b = reinterpret_cast<android::Bitmap*>(bitmapHandle);
     SkASSERT(b);
     return b;
 }
 
+void GraphicsJNI::getSkBitmap(JNIEnv* env, jobject bitmap, SkBitmap* outBitmap) {
+    getBitmap(env, bitmap)->getSkBitmap(outBitmap);
+}
+
+SkPixelRef* GraphicsJNI::refSkPixelRef(JNIEnv* env, jobject bitmap) {
+    return getBitmap(env, bitmap)->refPixelRef();
+}
+
 SkColorType GraphicsJNI::getNativeBitmapColorType(JNIEnv* env, jobject jconfig) {
     SkASSERT(env);
     if (NULL == jconfig) {
@@ -383,47 +391,43 @@
 ///////////////////////////////////////////////////////////////////////////////////////////
 
 // Assert that bitmap's SkAlphaType is consistent with isPremultiplied.
-static void assert_premultiplied(const SkBitmap& bitmap, bool isPremultiplied) {
+static void assert_premultiplied(const SkImageInfo& info, bool isPremultiplied) {
     // kOpaque_SkAlphaType and kIgnore_SkAlphaType mean that isPremultiplied is
     // irrelevant. This just tests to ensure that the SkAlphaType is not
     // opposite of isPremultiplied.
     if (isPremultiplied) {
-        SkASSERT(bitmap.alphaType() != kUnpremul_SkAlphaType);
+        SkASSERT(info.alphaType() != kUnpremul_SkAlphaType);
     } else {
-        SkASSERT(bitmap.alphaType() != kPremul_SkAlphaType);
+        SkASSERT(info.alphaType() != kPremul_SkAlphaType);
     }
 }
 
-jobject GraphicsJNI::createBitmap(JNIEnv* env, SkBitmap* bitmap, jbyteArray buffer,
-        int bitmapCreateFlags, jbyteArray ninePatchChunk, jobject ninePatchInsets, int density)
-{
-    SkASSERT(bitmap);
-    SkASSERT(bitmap->pixelRef());
-    SkASSERT(!env->ExceptionCheck());
+jobject GraphicsJNI::createBitmap(JNIEnv* env, android::Bitmap* bitmap,
+        int bitmapCreateFlags, jbyteArray ninePatchChunk, jobject ninePatchInsets,
+        int density) {
     bool isMutable = bitmapCreateFlags & kBitmapCreateFlag_Mutable;
     bool isPremultiplied = bitmapCreateFlags & kBitmapCreateFlag_Premultiplied;
-
     // The caller needs to have already set the alpha type properly, so the
     // native SkBitmap stays in sync with the Java Bitmap.
-    assert_premultiplied(*bitmap, isPremultiplied);
+    assert_premultiplied(bitmap->info(), isPremultiplied);
 
     jobject obj = env->NewObject(gBitmap_class, gBitmap_constructorMethodID,
-            reinterpret_cast<jlong>(bitmap), buffer,
+            reinterpret_cast<jlong>(bitmap), bitmap->javaByteArray(),
             bitmap->width(), bitmap->height(), density, isMutable, isPremultiplied,
             ninePatchChunk, ninePatchInsets);
     hasException(env); // For the side effect of logging.
     return obj;
 }
 
-void GraphicsJNI::reinitBitmap(JNIEnv* env, jobject javaBitmap, SkBitmap* bitmap,
+void GraphicsJNI::reinitBitmap(JNIEnv* env, jobject javaBitmap, const SkImageInfo& info,
         bool isPremultiplied)
 {
     // The caller needs to have already set the alpha type properly, so the
     // native SkBitmap stays in sync with the Java Bitmap.
-    assert_premultiplied(*bitmap, isPremultiplied);
+    assert_premultiplied(info, isPremultiplied);
 
     env->CallVoidMethod(javaBitmap, gBitmap_reinitMethodID,
-            bitmap->width(), bitmap->height(), isPremultiplied);
+            info.width(), info.height(), isPremultiplied);
 }
 
 int GraphicsJNI::getBitmapAllocationByteCount(JNIEnv* env, jobject javaBitmap)
@@ -464,51 +468,6 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-AndroidPixelRef::AndroidPixelRef(JNIEnv* env, const SkImageInfo& info, void* storage,
-        size_t rowBytes, jbyteArray storageObj, SkColorTable* ctable) :
-        SkMallocPixelRef(info, storage, rowBytes, ctable, (storageObj == NULL)),
-        fWrappedPixelRef(NULL) {
-    SkASSERT(storage);
-    SkASSERT(storageObj);
-    SkASSERT(env);
-
-    if (env->GetJavaVM(&fVM) != JNI_OK) {
-        SkDebugf("------ [%p] env->GetJavaVM failed\n", env);
-        sk_throw();
-    }
-
-    fStorageObj = (jbyteArray) env->NewGlobalRef(storageObj);
-}
-
-AndroidPixelRef::AndroidPixelRef(AndroidPixelRef& wrappedPixelRef, const SkImageInfo& info,
-        size_t rowBytes, SkColorTable* ctable) :
-        SkMallocPixelRef(info, wrappedPixelRef.getAddr(), rowBytes, ctable, false),
-        fWrappedPixelRef(wrappedPixelRef.fWrappedPixelRef ?
-                wrappedPixelRef.fWrappedPixelRef : &wrappedPixelRef)
-{
-    SkASSERT(fWrappedPixelRef);
-    SkSafeRef(fWrappedPixelRef);
-
-    // don't need to initialize this, as all the relevant logic delegates to the wrapped ref
-    fStorageObj = NULL;
-}
-
-AndroidPixelRef::~AndroidPixelRef() {
-    if (fWrappedPixelRef) {
-        SkSafeUnref(fWrappedPixelRef);
-    } else {
-        SkASSERT(fStorageObj);
-        JNIEnv* env = vm2env(fVM);
-        env->DeleteGlobalRef(fStorageObj);
-    }
-
-    if (android::uirenderer::Caches::hasInstance()) {
-        android::uirenderer::Caches::getInstance().textureCache.releaseTexture(getStableID());
-    }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
 static bool computeAllocationSize(const SkBitmap& bitmap, size_t* size) {
     int32_t rowBytes32 = SkToS32(bitmap.rowBytes());
     int64_t bigSize = (int64_t)bitmap.height() * rowBytes32;
@@ -520,7 +479,7 @@
     return true;
 }
 
-jbyteArray GraphicsJNI::allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,
+android::Bitmap* GraphicsJNI::allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,
                                              SkColorTable* ctable) {
     const SkImageInfo& info = bitmap->info();
     if (info.fColorType == kUnknown_SkColorType) {
@@ -549,13 +508,14 @@
         return NULL;
     }
     SkASSERT(addr);
-    SkPixelRef* pr = new AndroidPixelRef(env, info, (void*) addr, rowBytes, arrayObj, ctable);
-    bitmap->setPixelRef(pr)->unref();
+    android::Bitmap* wrapper = new android::Bitmap(env, arrayObj, (void*) addr,
+            info, rowBytes, ctable);
+    wrapper->getSkBitmap(bitmap);
     // since we're already allocated, we lockPixels right away
     // HeapAllocator behaves this way too
     bitmap->lockPixels();
 
-    return arrayObj;
+    return wrapper;
 }
 
 struct AndroidPixelRefContext {
@@ -614,21 +574,22 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-JavaPixelAllocator::JavaPixelAllocator(JNIEnv* env)
-    : fStorageObj(NULL),
-      fAllocCount(0) {
-    if (env->GetJavaVM(&fVM) != JNI_OK) {
-        SkDebugf("------ [%p] env->GetJavaVM failed\n", env);
-        sk_throw();
+JavaPixelAllocator::JavaPixelAllocator(JNIEnv* env) {
+    LOG_ALWAYS_FATAL_IF(env->GetJavaVM(&mJavaVM) != JNI_OK,
+            "env->GetJavaVM failed");
+}
+
+JavaPixelAllocator::~JavaPixelAllocator() {
+    if (mStorage) {
+        mStorage->detachFromJava();
     }
 }
 
 bool JavaPixelAllocator::allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
-    JNIEnv* env = vm2env(fVM);
+    JNIEnv* env = vm2env(mJavaVM);
 
-    fStorageObj = GraphicsJNI::allocateJavaPixelRef(env, bitmap, ctable);
-    fAllocCount += 1;
-    return fStorageObj != NULL;
+    mStorage = GraphicsJNI::allocateJavaPixelRef(env, bitmap, ctable);
+    return mStorage != nullptr;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -674,7 +635,7 @@
     gPointF_yFieldID = getFieldIDCheck(env, gPointF_class, "y", "F");
 
     gBitmap_class = make_globalref(env, "android/graphics/Bitmap");
-    gBitmap_skBitmapPtr = getFieldIDCheck(env, gBitmap_class, "mSkBitmapPtr", "J");
+    gBitmap_nativePtr = getFieldIDCheck(env, gBitmap_class, "mNativePtr", "J");
     gBitmap_constructorMethodID = env->GetMethodID(gBitmap_class, "<init>", "(J[BIIIZZ[BLandroid/graphics/NinePatch$InsetStruct;)V");
     gBitmap_reinitMethodID = env->GetMethodID(gBitmap_class, "reinit", "(IIZ)V");
     gBitmap_getAllocationByteCountMethodID = env->GetMethodID(gBitmap_class, "getAllocationByteCount", "()I");
diff --git a/core/jni/android/graphics/GraphicsJNI.h b/core/jni/android/graphics/GraphicsJNI.h
index d73507e..ef9c2a9 100644
--- a/core/jni/android/graphics/GraphicsJNI.h
+++ b/core/jni/android/graphics/GraphicsJNI.h
@@ -1,6 +1,7 @@
 #ifndef _ANDROID_GRAPHICS_GRAPHICS_JNI_H_
 #define _ANDROID_GRAPHICS_GRAPHICS_JNI_H_
 
+#include "Bitmap.h"
 #include "SkBitmap.h"
 #include "SkDevice.h"
 #include "SkPixelRef.h"
@@ -49,7 +50,9 @@
     static void point_to_jpointf(const SkPoint& point, JNIEnv*, jobject jpointf);
 
     static android::Canvas* getNativeCanvas(JNIEnv*, jobject canvas);
-    static SkBitmap* getSkBitmap(JNIEnv*, jobject bitmap);
+    static android::Bitmap* getBitmap(JNIEnv*, jobject bitmap);
+    static void getSkBitmap(JNIEnv*, jobject bitmap, SkBitmap* outBitmap);
+    static SkPixelRef* refSkPixelRef(JNIEnv*, jobject bitmap);
     static SkRegion* getNativeRegion(JNIEnv*, jobject region);
 
     // Given the 'native' long held by the Rasterizer.java object, return a
@@ -69,22 +72,18 @@
     */
     static SkColorType getNativeBitmapColorType(JNIEnv*, jobject jconfig);
 
-    /** Create a java Bitmap object given the native bitmap (required) and optional
-        storage array (may be null).
-        bitmap's SkAlphaType must already be in sync with bitmapCreateFlags.
+    /*
+     * Create a java Bitmap object given the native bitmap
+     * bitmap's SkAlphaType must already be in sync with bitmapCreateFlags.
     */
-    static jobject createBitmap(JNIEnv* env, SkBitmap* bitmap, jbyteArray buffer,
-            int bitmapCreateFlags, jbyteArray ninePatch, jobject ninePatchInsets, int density = -1);
-
-    static jobject createBitmap(JNIEnv* env, SkBitmap* bitmap, int bitmapCreateFlags,
-            jbyteArray ninePatch, int density = -1) {
-        return createBitmap(env, bitmap, NULL, bitmapCreateFlags, ninePatch, NULL, density);
-    }
+    static jobject createBitmap(JNIEnv* env, android::Bitmap* bitmap,
+            int bitmapCreateFlags, jbyteArray ninePatchChunk = NULL,
+            jobject ninePatchInsets = NULL, int density = -1);
 
     /** Reinitialize a bitmap. bitmap must already have its SkAlphaType set in
         sync with isPremultiplied
     */
-    static void reinitBitmap(JNIEnv* env, jobject javaBitmap, SkBitmap* bitmap,
+    static void reinitBitmap(JNIEnv* env, jobject javaBitmap, const SkImageInfo& info,
             bool isPremultiplied);
 
     static int getBitmapAllocationByteCount(JNIEnv* env, jobject javaBitmap);
@@ -93,7 +92,7 @@
 
     static jobject createBitmapRegionDecoder(JNIEnv* env, SkBitmapRegionDecoder* bitmap);
 
-    static jbyteArray allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,
+    static android::Bitmap* allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,
             SkColorTable* ctable);
 
     /**
@@ -111,30 +110,6 @@
     static bool SetPixels(JNIEnv* env, jintArray colors, int srcOffset,
             int srcStride, int x, int y, int width, int height,
             const SkBitmap& dstBitmap);
-
-    static jbyteArray getBitmapStorageObj(SkPixelRef *pixref);
-};
-
-class AndroidPixelRef : public SkMallocPixelRef {
-public:
-    AndroidPixelRef(JNIEnv* env, const SkImageInfo& info, void* storage, size_t rowBytes,
-            jbyteArray storageObj, SkColorTable* ctable);
-
-    /**
-     * Creates an AndroidPixelRef that wraps (and refs) another to reuse/share
-     * the same storage and java byte array refcounting, yet have a different
-     * color table.
-     */
-    AndroidPixelRef(AndroidPixelRef& wrappedPixelRef, const SkImageInfo& info,
-            size_t rowBytes, SkColorTable* ctable);
-
-    virtual ~AndroidPixelRef();
-
-private:
-    AndroidPixelRef* const fWrappedPixelRef; // if set, delegate memory management calls to this
-
-    JavaVM* fVM;
-    jbyteArray fStorageObj; // The Java byte[] object used as the bitmap backing store
 };
 
 /** Allocator which allocates the backing buffer in the Java heap.
@@ -145,30 +120,22 @@
 class JavaPixelAllocator : public SkBitmap::Allocator {
 public:
     JavaPixelAllocator(JNIEnv* env);
-    // overrides
-    virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable);
+    ~JavaPixelAllocator();
 
-    /** Return the Java array object created for the last allocation.
-     *  This returns a local JNI reference which the caller is responsible
-     *  for storing appropriately (usually by passing it to the Bitmap
-     *  constructor).
-     */
-    jbyteArray getStorageObj() { return fStorageObj; }
+    virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) override;
 
-    /** Same as getStorageObj(), but also resets the allocator so that it
-     *  can allocate again.
+    /**
+     * Fetches the backing allocation object. Must be called!
      */
-    jbyteArray getStorageObjAndReset() {
-        jbyteArray result = fStorageObj;
-        fStorageObj = NULL;
-        fAllocCount = 0;
+    android::Bitmap* getStorageObjAndReset() {
+        android::Bitmap* result = mStorage;
+        mStorage = NULL;
         return result;
     };
 
 private:
-    JavaVM* fVM;
-    jbyteArray fStorageObj;
-    int fAllocCount;
+    JavaVM* mJavaVM;
+    android::Bitmap* mStorage = nullptr;
 };
 
 enum JNIAccess {
diff --git a/core/jni/android/graphics/NinePatch.cpp b/core/jni/android/graphics/NinePatch.cpp
index 3f8bfe2..348b0ec 100644
--- a/core/jni/android/graphics/NinePatch.cpp
+++ b/core/jni/android/graphics/NinePatch.cpp
@@ -64,7 +64,7 @@
         return JNI_FALSE;
     }
 
-    static jlong validateNinePatchChunk(JNIEnv* env, jobject, jlong, jbyteArray obj) {
+    static jlong validateNinePatchChunk(JNIEnv* env, jobject, jbyteArray obj) {
         size_t chunkSize = env->GetArrayLength(obj);
         if (chunkSize < (int) (sizeof(Res_png_9patch))) {
             jniThrowRuntimeException(env, "Array too small for chunk.");
@@ -88,13 +88,13 @@
         }
     }
 
-    static void draw(JNIEnv* env, SkCanvas* canvas, SkRect& bounds, const SkBitmap* bitmap,
+    static void draw(JNIEnv* env, SkCanvas* canvas, SkRect& bounds, const SkBitmap& bitmap,
             Res_png_9patch* chunk, const SkPaint* paint, jint destDensity, jint srcDensity) {
         if (destDensity == srcDensity || destDensity == 0 || srcDensity == 0) {
             ALOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)",
                     SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop),
                     SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom));
-            NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL);
+            NinePatch_Draw(canvas, bounds, bitmap, *chunk, paint, NULL);
         } else {
             canvas->save();
 
@@ -111,25 +111,25 @@
                     SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom),
                     srcDensity, destDensity);
 
-            NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL);
+            NinePatch_Draw(canvas, bounds, bitmap, *chunk, paint, NULL);
 
             canvas->restore();
         }
     }
 
     static void drawF(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRectF,
-            jlong bitmapHandle, jlong chunkHandle, jlong paintHandle,
+            jobject jbitmap, jlong chunkHandle, jlong paintHandle,
             jint destDensity, jint srcDensity) {
         SkCanvas* canvas       = reinterpret_cast<Canvas*>(canvasHandle)->asSkCanvas();
-        const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
         Res_png_9patch* chunk  = reinterpret_cast<Res_png_9patch*>(chunkHandle);
         const Paint* paint     = reinterpret_cast<Paint*>(paintHandle);
         SkASSERT(canvas);
         SkASSERT(boundsRectF);
-        SkASSERT(bitmap);
         SkASSERT(chunk);
         // paint is optional
 
+        SkBitmap bitmap;
+        GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
         SkRect bounds;
         GraphicsJNI::jrectf_to_rect(env, boundsRectF, &bounds);
 
@@ -137,36 +137,36 @@
     }
 
     static void drawI(JNIEnv* env, jobject, jlong canvasHandle, jobject boundsRect,
-            jlong bitmapHandle, jlong chunkHandle, jlong paintHandle,
+            jobject jbitmap, jlong chunkHandle, jlong paintHandle,
             jint destDensity, jint srcDensity) {
         SkCanvas* canvas       = reinterpret_cast<Canvas*>(canvasHandle)->asSkCanvas();
-        const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
         Res_png_9patch* chunk  = reinterpret_cast<Res_png_9patch*>(chunkHandle);
         const Paint* paint     = reinterpret_cast<Paint*>(paintHandle);
         SkASSERT(canvas);
         SkASSERT(boundsRect);
-        SkASSERT(bitmap);
         SkASSERT(chunk);
         // paint is optional
 
+        SkBitmap bitmap;
+        GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
         SkRect bounds;
         GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds);
         draw(env, canvas, bounds, bitmap, chunk, paint, destDensity, srcDensity);
     }
 
-    static jlong getTransparentRegion(JNIEnv* env, jobject, jlong bitmapHandle,
+    static jlong getTransparentRegion(JNIEnv* env, jobject, jobject jbitmap,
             jlong chunkHandle, jobject boundsRect) {
-        const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
         Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle);
-        SkASSERT(bitmap);
         SkASSERT(chunk);
         SkASSERT(boundsRect);
 
+        SkBitmap bitmap;
+        GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
         SkRect bounds;
         GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds);
 
         SkRegion* region = NULL;
-        NinePatch_Draw(NULL, bounds, *bitmap, *chunk, NULL, &region);
+        NinePatch_Draw(NULL, bounds, bitmap, *chunk, NULL, &region);
 
         return reinterpret_cast<jlong>(region);
     }
@@ -176,13 +176,16 @@
 /////////////////////////////////////////////////////////////////////////////////////////
 
 static JNINativeMethod gNinePatchMethods[] = {
-    { "isNinePatchChunk", "([B)Z",                        (void*) SkNinePatchGlue::isNinePatchChunk },
-    { "validateNinePatchChunk", "(J[B)J",                 (void*) SkNinePatchGlue::validateNinePatchChunk },
-    { "nativeFinalize", "(J)V",                           (void*) SkNinePatchGlue::finalize },
-    { "nativeDraw", "(JLandroid/graphics/RectF;JJJII)V",  (void*) SkNinePatchGlue::drawF },
-    { "nativeDraw", "(JLandroid/graphics/Rect;JJJII)V",   (void*) SkNinePatchGlue::drawI },
-    { "nativeGetTransparentRegion", "(JJLandroid/graphics/Rect;)J",
-                                                          (void*) SkNinePatchGlue::getTransparentRegion }
+    { "isNinePatchChunk", "([B)Z", (void*) SkNinePatchGlue::isNinePatchChunk },
+    { "validateNinePatchChunk", "([B)J",
+            (void*) SkNinePatchGlue::validateNinePatchChunk },
+    { "nativeFinalize", "(J)V", (void*) SkNinePatchGlue::finalize },
+    { "nativeDraw", "(JLandroid/graphics/RectF;Landroid/graphics/Bitmap;JJII)V",
+            (void*) SkNinePatchGlue::drawF },
+    { "nativeDraw", "(JLandroid/graphics/Rect;Landroid/graphics/Bitmap;JJII)V",
+            (void*) SkNinePatchGlue::drawI },
+    { "nativeGetTransparentRegion", "(Landroid/graphics/Bitmap;JLandroid/graphics/Rect;)J",
+            (void*) SkNinePatchGlue::getTransparentRegion }
 };
 
 int register_android_graphics_NinePatch(JNIEnv* env) {
diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp
index 6591d29..d0f7591 100644
--- a/core/jni/android/graphics/Shader.cpp
+++ b/core/jni/android/graphics/Shader.cpp
@@ -80,11 +80,12 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////
 
-static jlong BitmapShader_constructor(JNIEnv* env, jobject o, jlong bitmapHandle,
+static jlong BitmapShader_constructor(JNIEnv* env, jobject o, jobject jbitmap,
                                       jint tileModeX, jint tileModeY)
 {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkShader* s = SkShader::CreateBitmapShader(*bitmap,
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
+    SkShader* s = SkShader::CreateBitmapShader(bitmap,
                                         (SkShader::TileMode)tileModeX,
                                         (SkShader::TileMode)tileModeY);
 
@@ -249,7 +250,7 @@
 };
 
 static JNINativeMethod gBitmapShaderMethods[] = {
-    { "nativeCreate",     "(JII)J",  (void*)BitmapShader_constructor },
+    { "nativeCreate",     "(Landroid/graphics/Bitmap;II)J",  (void*)BitmapShader_constructor },
 };
 
 static JNINativeMethod gLinearGradientMethods[] = {
diff --git a/core/jni/android/graphics/pdf/PdfRenderer.cpp b/core/jni/android/graphics/pdf/PdfRenderer.cpp
index fc98cf9..876bea4 100644
--- a/core/jni/android/graphics/pdf/PdfRenderer.cpp
+++ b/core/jni/android/graphics/pdf/PdfRenderer.cpp
@@ -243,19 +243,21 @@
 }
 
 static void nativeRenderPage(JNIEnv* env, jclass thiz, jlong documentPtr, jlong pagePtr,
-        jlong bitmapPtr, jint destLeft, jint destTop, jint destRight, jint destBottom,
+        jobject jbitmap, jint destLeft, jint destTop, jint destRight, jint destBottom,
         jlong matrixPtr, jint renderMode) {
 
     FPDF_PAGE page = reinterpret_cast<FPDF_PAGE>(pagePtr);
-    SkBitmap* skBitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
     SkMatrix* skMatrix = reinterpret_cast<SkMatrix*>(matrixPtr);
 
-    skBitmap->lockPixels();
+    SkBitmap skBitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &skBitmap);
 
-    const int stride = skBitmap->width() * 4;
+    SkAutoLockPixels alp(skBitmap);
 
-    FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(skBitmap->width(), skBitmap->height(),
-            FPDFBitmap_BGRA, skBitmap->getPixels(), stride);
+    const int stride = skBitmap.width() * 4;
+
+    FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(skBitmap.width(), skBitmap.height(),
+            FPDFBitmap_BGRA, skBitmap.getPixels(), stride);
 
     if (!bitmap) {
         ALOGE("Erorr creating bitmap");
@@ -278,8 +280,7 @@
     renderPageBitmap(bitmap, page, destLeft, destTop, destRight,
             destBottom, skMatrix, renderFlags);
 
-    skBitmap->notifyPixelsChanged();
-    skBitmap->unlockPixels();
+    skBitmap.notifyPixelsChanged();
 }
 
 static JNINativeMethod gPdfRenderer_Methods[] = {
@@ -287,7 +288,7 @@
     {"nativeClose", "(J)V", (void*) nativeClose},
     {"nativeGetPageCount", "(J)I", (void*) nativeGetPageCount},
     {"nativeScaleForPrinting", "(J)Z", (void*) nativeScaleForPrinting},
-    {"nativeRenderPage", "(JJJIIIIJI)V", (void*) nativeRenderPage},
+    {"nativeRenderPage", "(JJLandroid/graphics/Bitmap;IIIIJI)V", (void*) nativeRenderPage},
     {"nativeOpenPageAndGetSize", "(JILandroid/graphics/Point;)J", (void*) nativeOpenPageAndGetSize},
     {"nativeClosePage", "(J)V", (void*) nativeClosePage}
 };
diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp
index 5c2d0d0..bce2b33 100644
--- a/core/jni/android/opengl/util.cpp
+++ b/core/jni/android/opengl/util.cpp
@@ -618,23 +618,25 @@
 static jint util_getInternalFormat(JNIEnv *env, jclass clazz,
         jobject jbitmap)
 {
-    SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap);
-    return getInternalFormat(nativeBitmap->colorType());
+    SkBitmap nativeBitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &nativeBitmap);
+    return getInternalFormat(nativeBitmap.colorType());
 }
 
 static jint util_getType(JNIEnv *env, jclass clazz,
         jobject jbitmap)
 {
-    SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap);
-    return getType(nativeBitmap->colorType());
+    SkBitmap nativeBitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &nativeBitmap);
+    return getType(nativeBitmap.colorType());
 }
 
 static jint util_texImage2D(JNIEnv *env, jclass clazz,
         jint target, jint level, jint internalformat,
         jobject jbitmap, jint type, jint border)
 {
-    SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap);
-    const SkBitmap& bitmap(*nativeBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     SkColorType colorType = bitmap.colorType();
     if (internalformat < 0) {
         internalformat = getInternalFormat(colorType);
@@ -680,8 +682,8 @@
         jint target, jint level, jint xoffset, jint yoffset,
         jobject jbitmap, jint format, jint type)
 {
-    SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(env, jbitmap);
-    const SkBitmap& bitmap(*nativeBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     SkColorType colorType = bitmap.colorType();
     if (format < 0) {
         format = getInternalFormat(colorType);
diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp
index 3ae829b..9b5fb3a 100644
--- a/core/jni/android_graphics_Canvas.cpp
+++ b/core/jni/android_graphics_Canvas.cpp
@@ -40,22 +40,21 @@
 
 // Native wrapper constructor used by Canvas(Bitmap)
 static jlong initRaster(JNIEnv* env, jobject, jobject jbitmap) {
-    SkBitmap* bitmap = nullptr;
+    SkBitmap bitmap;
     if (jbitmap != NULL) {
-        bitmap = GraphicsJNI::getSkBitmap(env, jbitmap);
+        GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     }
-    return reinterpret_cast<jlong>(Canvas::create_canvas(
-            bitmap ? *bitmap : SkBitmap()));
+    return reinterpret_cast<jlong>(Canvas::create_canvas(bitmap));
 }
 
 // Set the given bitmap as the new draw target (wrapped in a new SkCanvas),
 // optionally copying canvas matrix & clip state.
 static void setBitmap(JNIEnv* env, jobject, jlong canvasHandle, jobject jbitmap) {
-    SkBitmap* bitmap = nullptr;
+    SkBitmap bitmap;
     if (jbitmap != NULL) {
-        bitmap = GraphicsJNI::getSkBitmap(env, jbitmap);
+        GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     }
-    get_canvas(canvasHandle)->setBitmap(bitmap ? *bitmap : SkBitmap());
+    get_canvas(canvasHandle)->setBitmap(bitmap);
 }
 
 static jboolean isOpaque(JNIEnv*, jobject, jlong canvasHandle) {
@@ -319,11 +318,12 @@
                                            indices, indexCount, *paint);
 }
 
-static void drawBitmap(JNIEnv* env, jobject jcanvas, jlong canvasHandle, jlong bitmapHandle,
+static void drawBitmap(JNIEnv* env, jobject jcanvas, jlong canvasHandle, jobject jbitmap,
                        jfloat left, jfloat top, jlong paintHandle, jint canvasDensity,
                        jint screenDensity, jint bitmapDensity) {
     Canvas* canvas = get_canvas(canvasHandle);
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     const Paint* paint = reinterpret_cast<Paint*>(paintHandle);
 
     if (canvasDensity == bitmapDensity || canvasDensity == 0 || bitmapDensity == 0) {
@@ -333,9 +333,9 @@
                 filteredPaint = *paint;
             }
             filteredPaint.setFilterQuality(kLow_SkFilterQuality);
-            canvas->drawBitmap(*bitmap, left, top, &filteredPaint);
+            canvas->drawBitmap(bitmap, left, top, &filteredPaint);
         } else {
-            canvas->drawBitmap(*bitmap, left, top, paint);
+            canvas->drawBitmap(bitmap, left, top, paint);
         }
     } else {
         canvas->save(SkCanvas::kMatrixClip_SaveFlag);
@@ -349,37 +349,39 @@
         }
         filteredPaint.setFilterQuality(kLow_SkFilterQuality);
 
-        canvas->drawBitmap(*bitmap, 0, 0, &filteredPaint);
+        canvas->drawBitmap(bitmap, 0, 0, &filteredPaint);
         canvas->restore();
     }
 }
 
-static void drawBitmapMatrix(JNIEnv* env, jobject, jlong canvasHandle, jlong bitmapHandle,
+static void drawBitmapMatrix(JNIEnv* env, jobject, jlong canvasHandle, jobject jbitmap,
                              jlong matrixHandle, jlong paintHandle) {
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
     const SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
     const Paint* paint = reinterpret_cast<Paint*>(paintHandle);
-    get_canvas(canvasHandle)->drawBitmap(*bitmap, *matrix, paint);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
+    get_canvas(canvasHandle)->drawBitmap(bitmap, *matrix, paint);
 }
 
-static void drawBitmapRect(JNIEnv* env, jobject, jlong canvasHandle, jlong bitmapHandle,
+static void drawBitmapRect(JNIEnv* env, jobject, jlong canvasHandle, jobject jbitmap,
                            float srcLeft, float srcTop, float srcRight, float srcBottom,
                            float dstLeft, float dstTop, float dstRight, float dstBottom,
                            jlong paintHandle, jint screenDensity, jint bitmapDensity) {
     Canvas* canvas = get_canvas(canvasHandle);
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
     const Paint* paint = reinterpret_cast<Paint*>(paintHandle);
 
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     if (screenDensity != 0 && screenDensity != bitmapDensity) {
         Paint filteredPaint;
         if (paint) {
             filteredPaint = *paint;
         }
         filteredPaint.setFilterQuality(kLow_SkFilterQuality);
-        canvas->drawBitmap(*bitmap, srcLeft, srcTop, srcRight, srcBottom,
+        canvas->drawBitmap(bitmap, srcLeft, srcTop, srcRight, srcBottom,
                            dstLeft, dstTop, dstRight, dstBottom, &filteredPaint);
     } else {
-        canvas->drawBitmap(*bitmap, srcLeft, srcTop, srcRight, srcBottom,
+        canvas->drawBitmap(bitmap, srcLeft, srcTop, srcRight, srcBottom,
                            dstLeft, dstTop, dstRight, dstBottom, paint);
     }
 }
@@ -407,16 +409,17 @@
     get_canvas(canvasHandle)->drawBitmap(bitmap, x, y, paint);
 }
 
-static void drawBitmapMesh(JNIEnv* env, jobject, jlong canvasHandle, jlong bitmapHandle,
+static void drawBitmapMesh(JNIEnv* env, jobject, jlong canvasHandle, jobject jbitmap,
                            jint meshWidth, jint meshHeight, jfloatArray jverts,
                            jint vertIndex, jintArray jcolors, jint colorIndex, jlong paintHandle) {
     const int ptCount = (meshWidth + 1) * (meshHeight + 1);
     AutoJavaFloatArray vertA(env, jverts, vertIndex + (ptCount << 1));
     AutoJavaIntArray colorA(env, jcolors, colorIndex + ptCount);
 
-    const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
     const Paint* paint = reinterpret_cast<Paint*>(paintHandle);
-    get_canvas(canvasHandle)->drawBitmapMesh(*bitmap, meshWidth, meshHeight,
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
+    get_canvas(canvasHandle)->drawBitmapMesh(bitmap, meshWidth, meshHeight,
                                              vertA.ptr(), colorA.ptr(), paint);
 }
 
@@ -701,11 +704,11 @@
     {"native_drawArc","(JFFFFFFZJ)V", (void*) CanvasJNI::drawArc},
     {"native_drawPath","(JJJ)V", (void*) CanvasJNI::drawPath},
     {"nativeDrawVertices", "(JII[FI[FI[II[SIIJ)V", (void*)CanvasJNI::drawVertices},
-    {"native_drawBitmap","(JJFFJIII)V", (void*) CanvasJNI::drawBitmap},
-    {"nativeDrawBitmapMatrix", "(JJJJ)V", (void*)CanvasJNI::drawBitmapMatrix},
-    {"native_drawBitmap","(JJFFFFFFFFJII)V", (void*) CanvasJNI::drawBitmapRect},
+    {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFJIII)V", (void*) CanvasJNI::drawBitmap},
+    {"nativeDrawBitmapMatrix", "(JLandroid/graphics/Bitmap;JJ)V", (void*)CanvasJNI::drawBitmapMatrix},
+    {"native_drawBitmap","(JLandroid/graphics/Bitmap;FFFFFFFFJII)V", (void*) CanvasJNI::drawBitmapRect},
     {"native_drawBitmap", "(J[IIIFFIIZJ)V", (void*)CanvasJNI::drawBitmapArray},
-    {"nativeDrawBitmapMesh", "(JJII[FI[IIJ)V", (void*)CanvasJNI::drawBitmapMesh},
+    {"nativeDrawBitmapMesh", "(JLandroid/graphics/Bitmap;II[FI[IIJ)V", (void*)CanvasJNI::drawBitmapMesh},
     {"native_drawText","(J[CIIFFIJJ)V", (void*) CanvasJNI::drawTextChars},
     {"native_drawText","(JLjava/lang/String;IIFFIJJ)V", (void*) CanvasJNI::drawTextString},
     {"native_drawTextRun","(J[CIIIIFFZJJ)V", (void*) CanvasJNI::drawTextRunChars},
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index 0cf596c..f5f8b1f 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -134,13 +134,21 @@
     return internedString;
 }
 
-static jint
-nativeGetNextSensor(JNIEnv *env, jclass clazz, jobject sensor, jint next)
+static jlong
+nativeCreate
+(JNIEnv *env, jclass clazz, jstring opPackageName)
 {
-    SensorManager& mgr(SensorManager::getInstance());
+    ScopedUtfChars opPackageNameUtf(env, opPackageName);
+    return (jlong) new SensorManager(String16(opPackageNameUtf.c_str()));
+}
+
+static jint
+nativeGetNextSensor(JNIEnv *env, jclass clazz, jlong sensorManager, jobject sensor, jint next)
+{
+    SensorManager* mgr = reinterpret_cast<SensorManager*>(sensorManager);
 
     Sensor const* const* sensorList;
-    size_t count = mgr.getSensorList(&sensorList);
+    size_t count = mgr->getSensorList(&sensorList);
     if (size_t(next) >= count) {
         return -1;
     }
@@ -174,9 +182,10 @@
     return size_t(next) < count ? next : 0;
 }
 
-static int nativeEnableDataInjection(JNIEnv *_env, jclass _this, jboolean enable) {
-     SensorManager& mgr(SensorManager::getInstance());
-     return mgr.enableDataInjection(enable);
+static int nativeEnableDataInjection(JNIEnv *_env, jclass _this, jlong sensorManager,
+        jboolean enable) {
+    SensorManager* mgr = reinterpret_cast<SensorManager*>(sensorManager);
+    return mgr->enableDataInjection(enable);
 }
 
 //----------------------------------------------------------------------------
@@ -281,12 +290,12 @@
     }
 };
 
-static jlong nativeInitSensorEventQueue(JNIEnv *env, jclass clazz, jobject eventQWeak, jobject msgQ,
-        jfloatArray scratch, jstring packageName, jint mode) {
-    SensorManager& mgr(SensorManager::getInstance());
+static jlong nativeInitSensorEventQueue(JNIEnv *env, jclass clazz, jlong sensorManager,
+        jobject eventQWeak, jobject msgQ, jfloatArray scratch, jstring packageName, jint mode) {
+    SensorManager* mgr = reinterpret_cast<SensorManager*>(sensorManager);
     ScopedUtfChars packageUtf(env, packageName);
     String8 clientName(packageUtf.c_str());
-    sp<SensorEventQueue> queue(mgr.createEventQueue(clientName, mode));
+    sp<SensorEventQueue> queue(mgr->createEventQueue(clientName, mode));
 
     sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, msgQ);
     if (messageQueue == NULL) {
@@ -339,20 +348,23 @@
     {"nativeClassInit",
             "()V",
             (void*)nativeClassInit },
+    {"nativeCreate",
+             "(Ljava/lang/String;)J",
+             (void*)nativeCreate },
 
     {"nativeGetNextSensor",
-            "(Landroid/hardware/Sensor;I)I",
+            "(JLandroid/hardware/Sensor;I)I",
             (void*)nativeGetNextSensor },
 
     {"nativeEnableDataInjection",
-            "(Z)I",
+            "(JZ)I",
             (void*)nativeEnableDataInjection },
 };
 
 static JNINativeMethod gBaseEventQueueMethods[] = {
     {"nativeInitBaseEventQueue",
-     "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;[FLjava/lang/String;I)J",
-     (void*)nativeInitSensorEventQueue },
+             "(JLjava/lang/ref/WeakReference;Landroid/os/MessageQueue;[FLjava/lang/String;ILjava/lang/String;)J",
+             (void*)nativeInitSensorEventQueue },
 
     {"nativeEnableSensor",
             "(JIII)I",
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index 6afb226..87b81d5 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -30,6 +30,7 @@
 
 #include "android_media_AudioFormat.h"
 #include "android_media_AudioErrors.h"
+#include "android_media_DeviceCallback.h"
 
 // ----------------------------------------------------------------------------
 
@@ -44,6 +45,7 @@
     jmethodID postNativeEventInJava; //... event post callback method
     jfieldID  nativeRecorderInJavaObj; // provides access to the C++ AudioRecord object
     jfieldID  nativeCallbackCookie;    // provides access to the AudioRecord callback data
+    jfieldID  nativeDeviceCallback;    // provides access to the JNIDeviceCallback instance
 };
 struct audio_attributes_fields_t {
     jfieldID  fieldRecSource;    // AudioAttributes.mSource
@@ -120,6 +122,33 @@
     }
 }
 
+static sp<JNIDeviceCallback> getJniDeviceCallback(JNIEnv* env, jobject thiz)
+{
+    Mutex::Autolock l(sLock);
+    JNIDeviceCallback* const cb =
+            (JNIDeviceCallback*)env->GetLongField(thiz,
+                                                  javaAudioRecordFields.nativeDeviceCallback);
+    return sp<JNIDeviceCallback>(cb);
+}
+
+static sp<JNIDeviceCallback> setJniDeviceCallback(JNIEnv* env,
+                                                  jobject thiz,
+                                                  const sp<JNIDeviceCallback>& cb)
+{
+    Mutex::Autolock l(sLock);
+    sp<JNIDeviceCallback> old =
+            (JNIDeviceCallback*)env->GetLongField(thiz,
+                                                  javaAudioRecordFields.nativeDeviceCallback);
+    if (cb.get()) {
+        cb->incStrong((void*)setJniDeviceCallback);
+    }
+    if (old != 0) {
+        old->decStrong((void*)setJniDeviceCallback);
+    }
+    env->SetLongField(thiz, javaAudioRecordFields.nativeDeviceCallback, (jlong)cb.get());
+    return old;
+}
+
 // ----------------------------------------------------------------------------
 static sp<AudioRecord> getAudioRecord(JNIEnv* env, jobject thiz)
 {
@@ -252,6 +281,7 @@
         sessionId,
         AudioRecord::TRANSFER_DEFAULT,
         flags,
+        -1, -1,        // default uid, pid
         paa);
 
     if (status != NO_ERROR) {
@@ -592,9 +622,63 @@
         JNIEnv *env,  jobject thiz, jint device_id) {
 
     sp<AudioRecord> lpRecorder = getAudioRecord(env, thiz);
+    if (lpRecorder == 0) {
+        return 0;
+    }
     return lpRecorder->setInputDevice(device_id) == NO_ERROR;
 }
 
+static jint android_media_AudioRecord_getRoutedDeviceId(
+                JNIEnv *env,  jobject thiz) {
+
+    sp<AudioRecord> lpRecorder = getAudioRecord(env, thiz);
+    if (lpRecorder == 0) {
+        return 0;
+    }
+    return (jint)lpRecorder->getRoutedDeviceId();
+}
+
+static void android_media_AudioRecord_enableDeviceCallback(
+                JNIEnv *env,  jobject thiz) {
+
+    sp<AudioRecord> lpRecorder = getAudioRecord(env, thiz);
+    if (lpRecorder == 0) {
+        return;
+    }
+    sp<JNIDeviceCallback> cb = getJniDeviceCallback(env, thiz);
+    if (cb != 0) {
+        return;
+    }
+    audiorecord_callback_cookie *cookie =
+            (audiorecord_callback_cookie *)env->GetLongField(thiz,
+                                                     javaAudioRecordFields.nativeCallbackCookie);
+    if (cookie == NULL) {
+        return;
+    }
+
+    cb = new JNIDeviceCallback(env, thiz, cookie->audioRecord_ref,
+                               javaAudioRecordFields.postNativeEventInJava);
+    status_t status = lpRecorder->addAudioDeviceCallback(cb);
+    if (status == NO_ERROR) {
+        setJniDeviceCallback(env, thiz, cb);
+    }
+}
+
+static void android_media_AudioRecord_disableDeviceCallback(
+                JNIEnv *env,  jobject thiz) {
+
+    sp<AudioRecord> lpRecorder = getAudioRecord(env, thiz);
+    if (lpRecorder == 0) {
+        return;
+    }
+    sp<JNIDeviceCallback> cb = setJniDeviceCallback(env, thiz, 0);
+    if (cb != 0) {
+        lpRecorder->removeAudioDeviceCallback(cb);
+    }
+}
+
+
+
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 static JNINativeMethod gMethods[] = {
@@ -627,12 +711,17 @@
     {"native_get_min_buff_size",
                              "(III)I",   (void *)android_media_AudioRecord_get_min_buff_size},
     {"native_setInputDevice", "(I)Z", (void *)android_media_AudioRecord_setInputDevice},
+    {"native_getRoutedDeviceId", "()I", (void *)android_media_AudioRecord_getRoutedDeviceId},
+    {"native_enableDeviceCallback", "()V", (void *)android_media_AudioRecord_enableDeviceCallback},
+    {"native_disableDeviceCallback", "()V",
+                                        (void *)android_media_AudioRecord_disableDeviceCallback},
 };
 
 // field names found in android/media/AudioRecord.java
 #define JAVA_POSTEVENT_CALLBACK_NAME  "postEventFromNative"
 #define JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME  "mNativeRecorderInJavaObj"
 #define JAVA_NATIVECALLBACKINFO_FIELD_NAME       "mNativeCallbackCookie"
+#define JAVA_NATIVEDEVICECALLBACK_FIELD_NAME       "mNativeDeviceCallback"
 
 // ----------------------------------------------------------------------------
 int register_android_media_AudioRecord(JNIEnv *env)
@@ -640,6 +729,7 @@
     javaAudioRecordFields.postNativeEventInJava = NULL;
     javaAudioRecordFields.nativeRecorderInJavaObj = NULL;
     javaAudioRecordFields.nativeCallbackCookie = NULL;
+    javaAudioRecordFields.nativeDeviceCallback = NULL;
 
 
     // Get the AudioRecord class
@@ -657,6 +747,9 @@
     javaAudioRecordFields.nativeCallbackCookie = GetFieldIDOrDie(env,
             audioRecordClass, JAVA_NATIVECALLBACKINFO_FIELD_NAME, "J");
 
+    javaAudioRecordFields.nativeDeviceCallback = GetFieldIDOrDie(env,
+            audioRecordClass, JAVA_NATIVEDEVICECALLBACK_FIELD_NAME, "J");
+
     // Get the AudioAttributes class and fields
     jclass audioAttrClass = FindClassOrDie(env, kAudioAttributesClassPathName);
     javaAudioAttrFields.fieldRecSource = GetFieldIDOrDie(env, audioAttrClass, "mSource", "I");
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index fc05a6d..eab5668 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -111,6 +111,7 @@
     jfieldID    mRouteFlags;
     jfieldID    mRegistrationId;
     jfieldID    mMixType;
+    jfieldID    mCallbackFlags;
 } gAudioMixFields;
 
 static jclass gAudioFormatClass;
@@ -149,6 +150,10 @@
     jmethodID    postEventFromNative;
 } gAudioPortEventHandlerMethods;
 
+static struct {
+    jmethodID postDynPolicyEventFromNative;
+} gDynPolicyEventHandlerMethods;
+
 static Mutex gLock;
 
 enum AudioError {
@@ -166,7 +171,7 @@
 #define MAX_PORT_GENERATION_SYNC_ATTEMPTS 5
 
 // ----------------------------------------------------------------------------
-// ref-counted object for callbacks
+// ref-counted object for audio port callbacks
 class JNIAudioPortCallback: public AudioSystem::AudioPortCallback
 {
 public:
@@ -361,6 +366,26 @@
     env->DeleteLocalRef(clazz);
 }
 
+static void
+android_media_AudioSystem_dyn_policy_callback(int event, String8 regId, int val)
+{
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    if (env == NULL) {
+        return;
+    }
+
+    jclass clazz = env->FindClass(kClassPathName);
+    const char* zechars = regId.string();
+    jstring zestring = env->NewStringUTF(zechars);
+
+    env->CallStaticVoidMethod(clazz, gDynPolicyEventHandlerMethods.postDynPolicyEventFromNative,
+            event, zestring, val);
+
+    env->ReleaseStringUTFChars(zestring, zechars);
+    env->DeleteLocalRef(clazz);
+
+}
+
 static jint
 android_media_AudioSystem_setDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jint state, jstring device_address, jstring device_name)
 {
@@ -912,7 +937,8 @@
     } else if (nAudioPort->type == AUDIO_PORT_TYPE_MIX) {
         ALOGV("convertAudioPortFromNative is a mix");
         *jAudioPort = env->NewObject(gAudioMixPortClass, gAudioMixPortCstor,
-                                     jHandle, nAudioPort->role, jDeviceName,
+                                     jHandle, nAudioPort->ext.mix.handle,
+                                     nAudioPort->role, jDeviceName,
                                      jSamplingRates, jChannelMasks,
                                      jFormats, jGains);
     } else {
@@ -1402,7 +1428,11 @@
     return (jint)AudioSystem::getAudioHwSyncForSession((audio_session_t)sessionId);
 }
 
-
+static void
+android_media_AudioSystem_registerDynPolicyCallback(JNIEnv *env, jobject thiz)
+{
+    AudioSystem::setDynPolicyCallback(android_media_AudioSystem_dyn_policy_callback);
+}
 
 
 static jint convertAudioMixToNative(JNIEnv *env,
@@ -1419,6 +1449,8 @@
     env->ReleaseStringUTFChars(jRegistrationId, nRegistrationId);
     env->DeleteLocalRef(jRegistrationId);
 
+    nAudioMix->mCbFlags = env->GetIntField(jAudioMix, gAudioMixFields.mCallbackFlags);
+
     jobject jFormat = env->GetObjectField(jAudioMix, gAudioMixFields.mFormat);
     nAudioMix->mFormat.sample_rate = env->GetIntField(jFormat,
                                                      gAudioFormatFields.mSampleRate);
@@ -1567,7 +1599,8 @@
                                     (void *)android_media_AudioSystem_getAudioHwSyncForSession},
     {"registerPolicyMixes",    "(Ljava/util/ArrayList;Z)I",
                                             (void *)android_media_AudioSystem_registerPolicyMixes},
-
+    {"native_register_dynamic_policy_callback", "()V",
+                                    (void *)android_media_AudioSystem_registerDynPolicyCallback},
 };
 
 
@@ -1638,7 +1671,7 @@
     jclass audioMixPortClass = FindClassOrDie(env, "android/media/AudioMixPort");
     gAudioMixPortClass = MakeGlobalRefOrDie(env, audioMixPortClass);
     gAudioMixPortCstor = GetMethodIDOrDie(env, audioMixPortClass, "<init>",
-            "(Landroid/media/AudioHandle;ILjava/lang/String;[I[I[I[Landroid/media/AudioGain;)V");
+            "(Landroid/media/AudioHandle;IILjava/lang/String;[I[I[I[Landroid/media/AudioGain;)V");
 
     jclass audioGainClass = FindClassOrDie(env, "android/media/AudioGain");
     gAudioGainClass = MakeGlobalRefOrDie(env, audioGainClass);
@@ -1670,6 +1703,10 @@
     gEventHandlerFields.mJniCallback = GetFieldIDOrDie(env,
                                                     eventHandlerClass, "mJniCallback", "J");
 
+    gDynPolicyEventHandlerMethods.postDynPolicyEventFromNative =
+            GetStaticMethodIDOrDie(env, env->FindClass(kClassPathName),
+                    "dynamicPolicyCallbackFromNative", "(ILjava/lang/String;I)V");
+
     jclass audioMixClass = FindClassOrDie(env, "android/media/audiopolicy/AudioMix");
     gAudioMixClass = MakeGlobalRefOrDie(env, audioMixClass);
     gAudioMixFields.mRule = GetFieldIDOrDie(env, audioMixClass, "mRule",
@@ -1680,6 +1717,7 @@
     gAudioMixFields.mRegistrationId = GetFieldIDOrDie(env, audioMixClass, "mRegistrationId",
                                                       "Ljava/lang/String;");
     gAudioMixFields.mMixType = GetFieldIDOrDie(env, audioMixClass, "mMixType", "I");
+    gAudioMixFields.mCallbackFlags = GetFieldIDOrDie(env, audioMixClass, "mCallbackFlags", "I");
 
     jclass audioFormatClass = FindClassOrDie(env, "android/media/AudioFormat");
     gAudioFormatClass = MakeGlobalRefOrDie(env, audioFormatClass);
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 26b82c5..aeb058b 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -35,7 +35,8 @@
 
 #include "android_media_AudioFormat.h"
 #include "android_media_AudioErrors.h"
-#include "android_media_PlaybackSettings.h"
+#include "android_media_PlaybackParams.h"
+#include "android_media_DeviceCallback.h"
 
 // ----------------------------------------------------------------------------
 
@@ -60,7 +61,7 @@
 };
 static audio_track_fields_t      javaAudioTrackFields;
 static audio_attributes_fields_t javaAudioAttrFields;
-static PlaybackSettings::fields_t gPlaybackSettingsFields;
+static PlaybackParams::fields_t gPlaybackParamsFields;
 
 struct audiotrack_callback_cookie {
     jclass      audioTrack_class;
@@ -79,6 +80,7 @@
         sp<MemoryHeapBase>         mMemHeap;
         sp<MemoryBase>             mMemBase;
         audiotrack_callback_cookie mCallbackData;
+        sp<JNIDeviceCallback>      mDeviceCallback;
 
     AudioTrackJniStorage() {
         mCallbackData.audioTrack_class = 0;
@@ -691,8 +693,8 @@
 
 
 // ----------------------------------------------------------------------------
-static void android_media_AudioTrack_set_playback_settings(JNIEnv *env,  jobject thiz,
-        jobject settings) {
+static void android_media_AudioTrack_set_playback_params(JNIEnv *env,  jobject thiz,
+        jobject params) {
     sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
     if (lpTrack == NULL) {
         jniThrowException(env, "java/lang/IllegalStateException",
@@ -700,10 +702,10 @@
         return;
     }
 
-    PlaybackSettings pbs;
-    pbs.fillFromJobject(env, gPlaybackSettingsFields, settings);
+    PlaybackParams pbs;
+    pbs.fillFromJobject(env, gPlaybackParamsFields, params);
 
-    ALOGV("setPlaybackSettings: %d:%f %d:%f %d:%u %d:%u",
+    ALOGV("setPlaybackParams: %d:%f %d:%f %d:%u %d:%u",
             pbs.speedSet, pbs.audioRate.mSpeed,
             pbs.pitchSet, pbs.audioRate.mPitch,
             pbs.audioFallbackModeSet, pbs.audioRate.mFallbackMode,
@@ -717,8 +719,8 @@
 
 
 // ----------------------------------------------------------------------------
-static jobject android_media_AudioTrack_get_playback_settings(JNIEnv *env,  jobject thiz,
-        jobject settings) {
+static jobject android_media_AudioTrack_get_playback_params(JNIEnv *env,  jobject thiz,
+        jobject params) {
     sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
     if (lpTrack == NULL) {
         jniThrowException(env, "java/lang/IllegalStateException",
@@ -726,13 +728,13 @@
         return NULL;
     }
 
-    PlaybackSettings pbs;
+    PlaybackParams pbs;
     pbs.audioRate = lpTrack->getPlaybackRate();
     pbs.speedSet = true;
     pbs.pitchSet = true;
     pbs.audioFallbackModeSet = true;
     pbs.audioStretchModeSet = true;
-    return pbs.asJobject(env, gPlaybackSettingsFields);
+    return pbs.asJobject(env, gPlaybackParamsFields);
 }
 
 
@@ -977,6 +979,51 @@
     return lpTrack->setOutputDevice(device_id) == NO_ERROR;
 }
 
+static jint android_media_AudioTrack_getRoutedDeviceId(
+                JNIEnv *env,  jobject thiz) {
+
+    sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
+    if (lpTrack == NULL) {
+        return 0;
+    }
+    return (jint)lpTrack->getRoutedDeviceId();
+}
+
+static void android_media_AudioTrack_enableDeviceCallback(
+                JNIEnv *env,  jobject thiz) {
+
+    sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
+    if (lpTrack == NULL) {
+        return;
+    }
+    AudioTrackJniStorage* pJniStorage = (AudioTrackJniStorage *)env->GetLongField(
+        thiz, javaAudioTrackFields.jniData);
+    if (pJniStorage == NULL || pJniStorage->mDeviceCallback != 0) {
+        return;
+    }
+    pJniStorage->mDeviceCallback =
+    new JNIDeviceCallback(env, thiz, pJniStorage->mCallbackData.audioTrack_ref,
+                          javaAudioTrackFields.postNativeEventInJava);
+    lpTrack->addAudioDeviceCallback(pJniStorage->mDeviceCallback);
+}
+
+static void android_media_AudioTrack_disableDeviceCallback(
+                JNIEnv *env,  jobject thiz) {
+
+    sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
+    if (lpTrack == NULL) {
+        return;
+    }
+    AudioTrackJniStorage* pJniStorage = (AudioTrackJniStorage *)env->GetLongField(
+        thiz, javaAudioTrackFields.jniData);
+    if (pJniStorage == NULL || pJniStorage->mDeviceCallback == 0) {
+        return;
+    }
+    lpTrack->removeAudioDeviceCallback(pJniStorage->mDeviceCallback);
+    pJniStorage->mDeviceCallback.clear();
+}
+
+
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 static JNINativeMethod gMethods[] = {
@@ -1002,12 +1049,12 @@
                              "(I)I",     (void *)android_media_AudioTrack_set_playback_rate},
     {"native_get_playback_rate",
                              "()I",      (void *)android_media_AudioTrack_get_playback_rate},
-    {"native_set_playback_settings",
-                             "(Landroid/media/PlaybackSettings;)V",
-                                         (void *)android_media_AudioTrack_set_playback_settings},
-    {"native_get_playback_settings",
-                             "()Landroid/media/PlaybackSettings;",
-                                         (void *)android_media_AudioTrack_get_playback_settings},
+    {"native_set_playback_params",
+                             "(Landroid/media/PlaybackParams;)V",
+                                         (void *)android_media_AudioTrack_set_playback_params},
+    {"native_get_playback_params",
+                             "()Landroid/media/PlaybackParams;",
+                                         (void *)android_media_AudioTrack_get_playback_params},
     {"native_set_marker_pos","(I)I",     (void *)android_media_AudioTrack_set_marker_pos},
     {"native_get_marker_pos","()I",      (void *)android_media_AudioTrack_get_marker_pos},
     {"native_set_pos_update_period",
@@ -1030,6 +1077,9 @@
                              "(I)I",     (void *)android_media_AudioTrack_attachAuxEffect},
     {"native_setOutputDevice", "(I)Z",
                              (void *)android_media_AudioTrack_setOutputDevice},
+    {"native_getRoutedDeviceId", "()I", (void *)android_media_AudioTrack_getRoutedDeviceId},
+    {"native_enableDeviceCallback", "()V", (void *)android_media_AudioTrack_enableDeviceCallback},
+    {"native_disableDeviceCallback", "()V", (void *)android_media_AudioTrack_disableDeviceCallback},
 };
 
 
@@ -1094,8 +1144,8 @@
 
     env->DeleteLocalRef(audioAttrClass);
 
-    // initialize PlaybackSettings field info
-    gPlaybackSettingsFields.init(env);
+    // initialize PlaybackParams field info
+    gPlaybackParamsFields.init(env);
 
     return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
 }
diff --git a/core/jni/android_media_DeviceCallback.cpp b/core/jni/android_media_DeviceCallback.cpp
new file mode 100644
index 0000000..e159373
--- /dev/null
+++ b/core/jni/android_media_DeviceCallback.cpp
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ */
+
+//#define LOG_NDEBUG 0
+
+#define LOG_TAG "AudioDeviceCallback-JNI"
+
+#include <utils/Log.h>
+#include <JNIHelp.h>
+#include <JniConstants.h>
+#include "core_jni_helpers.h"
+#include <media/AudioSystem.h>
+
+#include "android_media_DeviceCallback.h"
+
+
+// ----------------------------------------------------------------------------
+
+using namespace android;
+
+JNIDeviceCallback::JNIDeviceCallback(JNIEnv* env, jobject thiz, jobject weak_thiz,
+                                     jmethodID postEventFromNative)
+{
+
+    // Hold onto the AudioTrack/AudioRecord class for use in calling the static method
+    // that posts events to the application thread.
+    jclass clazz = env->GetObjectClass(thiz);
+    if (clazz == NULL) {
+        return;
+    }
+    mClass = (jclass)env->NewGlobalRef(clazz);
+
+    // We use a weak reference so the AudioTrack/AudioRecord object can be garbage collected.
+    // The reference is only used as a proxy for callbacks.
+    mObject  = env->NewGlobalRef(weak_thiz);
+
+    mPostEventFromNative = postEventFromNative;
+}
+
+JNIDeviceCallback::~JNIDeviceCallback()
+{
+    // remove global references
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    if (env == NULL) {
+        return;
+    }
+    env->DeleteGlobalRef(mObject);
+    env->DeleteGlobalRef(mClass);
+}
+
+void JNIDeviceCallback::onAudioDeviceUpdate(audio_io_handle_t audioIo,
+                                            audio_port_handle_t deviceId)
+{
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+    if (env == NULL) {
+        return;
+    }
+
+    ALOGV("%s audioIo %d deviceId %d", __FUNCTION__, audioIo, deviceId);
+    env->CallStaticVoidMethod(mClass,
+                              mPostEventFromNative,
+                              mObject,
+                              AUDIO_NATIVE_EVENT_ROUTING_CHANGE, deviceId, 0, NULL);
+    if (env->ExceptionCheck()) {
+        ALOGW("An exception occurred while notifying an event.");
+        env->ExceptionClear();
+    }
+}
+
diff --git a/core/jni/android_media_DeviceCallback.h b/core/jni/android_media_DeviceCallback.h
new file mode 100644
index 0000000..7ae788e
--- /dev/null
+++ b/core/jni/android_media_DeviceCallback.h
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+#ifndef ANDROID_MEDIA_DEVICE_CALLBACK_H
+#define ANDROID_MEDIA_DEVICE_CALLBACK_H
+
+#include <system/audio.h>
+#include <media/AudioSystem.h>
+
+namespace android {
+
+// keep in sync with AudioSystem.java
+#define AUDIO_NATIVE_EVENT_ROUTING_CHANGE      1000
+
+class JNIDeviceCallback: public AudioSystem::AudioDeviceCallback
+{
+public:
+    JNIDeviceCallback(JNIEnv* env, jobject thiz, jobject weak_thiz, jmethodID postEventFromNative);
+    ~JNIDeviceCallback();
+
+    virtual void onAudioDeviceUpdate(audio_io_handle_t audioIo,
+                                     audio_port_handle_t deviceId);
+
+private:
+    void sendEvent(int event);
+
+    jclass      mClass;     // Reference to AudioTrack/AudioRecord class
+    jobject     mObject;    // Weak ref to AudioTrack/AudioRecord Java object to call on
+    jmethodID   mPostEventFromNative; // postEventFromNative method ID.
+};
+
+}; // namespace android
+
+#endif // ANDROID_MEDIA_DEVICE_CALLBACK_H
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index d4fb572..2692ad8 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -270,49 +270,10 @@
 
             if ((strstr(name, "[heap]") == name)) {
                 whichHeap = HEAP_NATIVE;
-            } else if (strncmp(name, "/dev/ashmem", 11) == 0) {
-                if (strncmp(name, "/dev/ashmem/dalvik-", 19) == 0) {
-                    whichHeap = HEAP_DALVIK_OTHER;
-                    if (strstr(name, "/dev/ashmem/dalvik-LinearAlloc") == name) {
-                        subHeap = HEAP_DALVIK_LINEARALLOC;
-                    } else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) ||
-                               (strstr(name, "/dev/ashmem/dalvik-main space") == name)) {
-                        // This is the regular Dalvik heap.
-                        whichHeap = HEAP_DALVIK;
-                        subHeap = HEAP_DALVIK_NORMAL;
-                    } else if (strstr(name, "/dev/ashmem/dalvik-large object space") == name) {
-                        whichHeap = HEAP_DALVIK;
-                        subHeap = HEAP_DALVIK_LARGE;
-                    } else if (strstr(name, "/dev/ashmem/dalvik-non moving space") == name) {
-                        whichHeap = HEAP_DALVIK;
-                        subHeap = HEAP_DALVIK_NON_MOVING;
-                    } else if (strstr(name, "/dev/ashmem/dalvik-zygote space") == name) {
-                        whichHeap = HEAP_DALVIK;
-                        subHeap = HEAP_DALVIK_ZYGOTE;
-                    } else if (strstr(name, "/dev/ashmem/dalvik-indirect ref") == name) {
-                        subHeap = HEAP_DALVIK_INDIRECT_REFERENCE_TABLE;
-                    } else if (strstr(name, "/dev/ashmem/dalvik-jit-code-cache") == name) {
-                        subHeap = HEAP_DALVIK_CODE_CACHE;
-                    } else {
-                        subHeap = HEAP_DALVIK_ACCOUNTING;  // Default to accounting.
-                    }
-                } else if (strncmp(name, "/dev/ashmem/CursorWindow", 24) == 0) {
-                    whichHeap = HEAP_CURSOR;
-                } else if (strncmp(name, "/dev/ashmem/libc malloc", 23) == 0) {
-                    whichHeap = HEAP_NATIVE;
-                } else {
-                    whichHeap = HEAP_ASHMEM;
-                }
             } else if (strncmp(name, "[anon:libc_malloc]", 18) == 0) {
                 whichHeap = HEAP_NATIVE;
             } else if (strncmp(name, "[stack", 6) == 0) {
                 whichHeap = HEAP_STACK;
-            } else if (strncmp(name, "/dev/", 5) == 0) {
-                if (strncmp(name, "/dev/kgsl-3d0", 13) == 0) {
-                    whichHeap = HEAP_GL_DEV;
-                } else {
-                    whichHeap = HEAP_UNKNOWN_DEV;
-                }
             } else if (nameLen > 3 && strcmp(name+nameLen-3, ".so") == 0) {
                 whichHeap = HEAP_SO;
                 is_swappable = true;
@@ -325,7 +286,7 @@
             } else if (nameLen > 4 && strcmp(name+nameLen-4, ".ttf") == 0) {
                 whichHeap = HEAP_TTF;
                 is_swappable = true;
-            } else if ((nameLen > 4 && strcmp(name+nameLen-4, ".dex") == 0) ||
+            } else if ((nameLen > 4 && strstr(name, ".dex") != NULL) ||
                        (nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0)) {
                 whichHeap = HEAP_DEX;
                 is_swappable = true;
@@ -335,6 +296,45 @@
             } else if (nameLen > 4 && strcmp(name+nameLen-4, ".art") == 0) {
                 whichHeap = HEAP_ART;
                 is_swappable = true;
+            } else if (strncmp(name, "/dev/", 5) == 0) {
+                if (strncmp(name, "/dev/kgsl-3d0", 13) == 0) {
+                    whichHeap = HEAP_GL_DEV;
+                } else if (strncmp(name, "/dev/ashmem", 11) == 0) {
+                    if (strncmp(name, "/dev/ashmem/dalvik-", 19) == 0) {
+                        whichHeap = HEAP_DALVIK_OTHER;
+                        if (strstr(name, "/dev/ashmem/dalvik-LinearAlloc") == name) {
+                            subHeap = HEAP_DALVIK_LINEARALLOC;
+                        } else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) ||
+                                   (strstr(name, "/dev/ashmem/dalvik-main space") == name)) {
+                            // This is the regular Dalvik heap.
+                            whichHeap = HEAP_DALVIK;
+                            subHeap = HEAP_DALVIK_NORMAL;
+                        } else if (strstr(name, "/dev/ashmem/dalvik-large object space") == name) {
+                            whichHeap = HEAP_DALVIK;
+                            subHeap = HEAP_DALVIK_LARGE;
+                        } else if (strstr(name, "/dev/ashmem/dalvik-non moving space") == name) {
+                            whichHeap = HEAP_DALVIK;
+                            subHeap = HEAP_DALVIK_NON_MOVING;
+                        } else if (strstr(name, "/dev/ashmem/dalvik-zygote space") == name) {
+                            whichHeap = HEAP_DALVIK;
+                            subHeap = HEAP_DALVIK_ZYGOTE;
+                        } else if (strstr(name, "/dev/ashmem/dalvik-indirect ref") == name) {
+                            subHeap = HEAP_DALVIK_INDIRECT_REFERENCE_TABLE;
+                        } else if (strstr(name, "/dev/ashmem/dalvik-jit-code-cache") == name) {
+                            subHeap = HEAP_DALVIK_CODE_CACHE;
+                        } else {
+                            subHeap = HEAP_DALVIK_ACCOUNTING;  // Default to accounting.
+                        }
+                    } else if (strncmp(name, "/dev/ashmem/CursorWindow", 24) == 0) {
+                        whichHeap = HEAP_CURSOR;
+                    } else if (strncmp(name, "/dev/ashmem/libc malloc", 23) == 0) {
+                        whichHeap = HEAP_NATIVE;
+                    } else {
+                        whichHeap = HEAP_ASHMEM;
+                    }
+                } else {
+                    whichHeap = HEAP_UNKNOWN_DEV;
+                }
             } else if (strncmp(name, "[anon:", 6) == 0) {
                 whichHeap = HEAP_UNKNOWN;
             } else if (nameLen > 0) {
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index daf5a61..74a9e4e 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -976,6 +976,12 @@
     dest->setTo(*src);
 }
 
+static void android_content_AssetManager_clearTheme(JNIEnv* env, jobject clazz, jlong themeHandle)
+{
+    ResTable::Theme* theme = reinterpret_cast<ResTable::Theme*>(themeHandle);
+    theme->clear();
+}
+
 static jint android_content_AssetManager_loadThemeAttributeValue(
     JNIEnv* env, jobject clazz, jlong themeHandle, jint ident, jobject outValue, jboolean resolve)
 {
@@ -999,6 +1005,13 @@
     return block >= 0 ? copyValue(env, outValue, &res, value, ref, block, typeSpecFlags) : block;
 }
 
+static jint android_content_AssetManager_getThemeChangingConfigurations(JNIEnv* env, jobject clazz,
+                                                                        jlong themeHandle)
+{
+    ResTable::Theme* theme = reinterpret_cast<ResTable::Theme*>(themeHandle);
+    return theme->getChangingConfigurations();
+}
+
 static void android_content_AssetManager_dumpTheme(JNIEnv* env, jobject clazz,
                                                    jlong themeHandle, jint pri,
                                                    jstring tag, jstring prefix)
@@ -2101,8 +2114,12 @@
         (void*) android_content_AssetManager_applyThemeStyle },
     { "copyTheme", "(JJ)V",
         (void*) android_content_AssetManager_copyTheme },
+    { "clearTheme", "(J)V",
+        (void*) android_content_AssetManager_clearTheme },
     { "loadThemeAttributeValue", "(JILandroid/util/TypedValue;Z)I",
         (void*) android_content_AssetManager_loadThemeAttributeValue },
+    { "getThemeChangingConfigurations", "(J)I",
+        (void*) android_content_AssetManager_getThemeChangingConfigurations },
     { "dumpTheme", "(JILjava/lang/String;Ljava/lang/String;)V",
         (void*) android_content_AssetManager_dumpTheme },
     { "applyStyle","(JIIJ[I[I[I)Z",
diff --git a/core/jni/android_view_DisplayListCanvas.cpp b/core/jni/android_view_DisplayListCanvas.cpp
index a362684..bb8ef83 100644
--- a/core/jni/android_view_DisplayListCanvas.cpp
+++ b/core/jni/android_view_DisplayListCanvas.cpp
@@ -86,24 +86,6 @@
     renderer->finish();
 }
 
-static void android_view_DisplayListCanvas_setProperty(JNIEnv* env,
-        jobject clazz, jstring name, jstring value) {
-    if (!Caches::hasInstance()) {
-        ALOGW("can't set property, no Caches instance");
-        return;
-    }
-
-    if (name == NULL || value == NULL) {
-        ALOGW("can't set prop, null passed");
-    }
-
-    const char* nameCharArray = env->GetStringUTFChars(name, NULL);
-    const char* valueCharArray = env->GetStringUTFChars(value, NULL);
-    Caches::getInstance().setTempProperty(nameCharArray, valueCharArray);
-    env->ReleaseStringUTFChars(name, nameCharArray);
-    env->ReleaseStringUTFChars(name, valueCharArray);
-}
-
 // ----------------------------------------------------------------------------
 // Functor
 // ----------------------------------------------------------------------------
@@ -132,10 +114,10 @@
 // ----------------------------------------------------------------------------
 
 static void android_view_DisplayListCanvas_drawPatch(JNIEnv* env, jobject clazz,
-        jlong rendererPtr, jlong bitmapPtr, jlong patchPtr,
+        jlong rendererPtr, jobject jbitmap, jlong patchPtr,
         float left, float top, float right, float bottom, jlong paintPtr) {
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
-
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr);
     Res_png_9patch* patch = reinterpret_cast<Res_png_9patch*>(patchPtr);
     Paint* paint = reinterpret_cast<Paint*>(paintPtr);
@@ -268,12 +250,10 @@
     { "nPrepare",           "(J)V",            (void*) android_view_DisplayListCanvas_prepare },
     { "nPrepareDirty",      "(JIIII)V",        (void*) android_view_DisplayListCanvas_prepareDirty },
     { "nFinish",            "(J)V",            (void*) android_view_DisplayListCanvas_finish },
-    { "nSetProperty",       "(Ljava/lang/String;Ljava/lang/String;)V",
-            (void*) android_view_DisplayListCanvas_setProperty },
 
     { "nCallDrawGLFunction", "(JJ)V",          (void*) android_view_DisplayListCanvas_callDrawGLFunction },
 
-    { "nDrawPatch",         "(JJJFFFFJ)V",     (void*) android_view_DisplayListCanvas_drawPatch },
+    { "nDrawPatch",         "(JLandroid/graphics/Bitmap;JFFFFJ)V",     (void*) android_view_DisplayListCanvas_drawPatch },
 
     { "nDrawRects",         "(JJJ)V",          (void*) android_view_DisplayListCanvas_drawRegionAsRects },
     { "nDrawRoundRect",     "(JJJJJJJJ)V",     (void*) android_view_DisplayListCanvas_drawRoundRectProps },
diff --git a/core/jni/android_view_PointerIcon.cpp b/core/jni/android_view_PointerIcon.cpp
index f6d9a1a..d04adbf 100644
--- a/core/jni/android_view_PointerIcon.cpp
+++ b/core/jni/android_view_PointerIcon.cpp
@@ -80,10 +80,7 @@
 
     jobject bitmapObj = env->GetObjectField(loadedPointerIconObj, gPointerIconClassInfo.mBitmap);
     if (bitmapObj) {
-        SkBitmap* bitmap = GraphicsJNI::getSkBitmap(env, bitmapObj);
-        if (bitmap) {
-            outPointerIcon->bitmap = *bitmap; // use a shared pixel ref
-        }
+        GraphicsJNI::getSkBitmap(env, bitmapObj, &(outPointerIcon->bitmap));
         env->DeleteLocalRef(bitmapObj);
     }
 
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index a8355c2..77af341 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -23,6 +23,7 @@
 
 #include "android_os_Parcel.h"
 #include "android_util_Binder.h"
+#include "android/graphics/Bitmap.h"
 #include "android/graphics/GraphicsJNI.h"
 #include "android/graphics/Region.h"
 
@@ -168,22 +169,19 @@
         }
     }
 
-    const ssize_t rowBytes =
+    const size_t rowBytes =
             screenshot->getStride() * android::bytesPerPixel(screenshot->getFormat());
 
-    SkBitmap* bitmap = new SkBitmap();
-    bitmap->setInfo(screenshotInfo, (size_t)rowBytes);
-    if (screenshotInfo.fWidth > 0 && screenshotInfo.fHeight > 0) {
-        // takes ownership of ScreenshotClient
-        SkMallocPixelRef* pixels = SkMallocPixelRef::NewWithProc(screenshotInfo,
-                (size_t) rowBytes, NULL, (void*) screenshot->getPixels(), &DeleteScreenshot,
-                (void*) (screenshot.get()));
-        screenshot.detach();
-        pixels->setImmutable();
-        bitmap->setPixelRef(pixels)->unref();
-        bitmap->lockPixels();
+    if (!screenshotInfo.fWidth || !screenshotInfo.fHeight) {
+        return NULL;
     }
 
+    Bitmap* bitmap = new Bitmap(
+            (void*) screenshot->getPixels(), (void*) screenshot.get(), DeleteScreenshot,
+            screenshotInfo, rowBytes, nullptr);
+    screenshot.detach();
+    bitmap->peekAtPixelRef()->setImmutable();
+
     return GraphicsJNI::createBitmap(env, bitmap,
             GraphicsJNI::kBitmapCreateFlag_Premultiplied, NULL);
 }
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index 11b3805..5d5465b 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -21,6 +21,7 @@
 #include "jni.h"
 #include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
+#include <GraphicsJNI.h>
 #include <ScopedPrimitiveArray.h>
 
 #include <EGL/egl.h>
@@ -347,10 +348,11 @@
 }
 
 static jboolean android_view_ThreadedRenderer_copyLayerInto(JNIEnv* env, jobject clazz,
-        jlong proxyPtr, jlong layerPtr, jlong bitmapPtr) {
+        jlong proxyPtr, jlong layerPtr, jobject jbitmap) {
     RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
     DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr);
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
     return proxy->copyLayerInto(layer, bitmap);
 }
 
@@ -386,6 +388,15 @@
     RenderProxy::trimMemory(level);
 }
 
+static void android_view_ThreadedRenderer_overrideProperty(JNIEnv* env, jobject clazz,
+        jstring name, jstring value) {
+    const char* nameCharArray = env->GetStringUTFChars(name, NULL);
+    const char* valueCharArray = env->GetStringUTFChars(value, NULL);
+    RenderProxy::overrideProperty(nameCharArray, valueCharArray);
+    env->ReleaseStringUTFChars(name, nameCharArray);
+    env->ReleaseStringUTFChars(name, valueCharArray);
+}
+
 static void android_view_ThreadedRenderer_fence(JNIEnv* env, jobject clazz,
         jlong proxyPtr) {
     RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
@@ -458,12 +469,13 @@
     { "nInvokeFunctor", "(JZ)V", (void*) android_view_ThreadedRenderer_invokeFunctor },
     { "nCreateTextureLayer", "(J)J", (void*) android_view_ThreadedRenderer_createTextureLayer },
     { "nBuildLayer", "(JJ)V", (void*) android_view_ThreadedRenderer_buildLayer },
-    { "nCopyLayerInto", "(JJJ)Z", (void*) android_view_ThreadedRenderer_copyLayerInto },
+    { "nCopyLayerInto", "(JJLandroid/graphics/Bitmap;)Z", (void*) android_view_ThreadedRenderer_copyLayerInto },
     { "nPushLayerUpdate", "(JJ)V", (void*) android_view_ThreadedRenderer_pushLayerUpdate },
     { "nCancelLayerUpdate", "(JJ)V", (void*) android_view_ThreadedRenderer_cancelLayerUpdate },
     { "nDetachSurfaceTexture", "(JJ)V", (void*) android_view_ThreadedRenderer_detachSurfaceTexture },
     { "nDestroyHardwareResources", "(J)V", (void*) android_view_ThreadedRenderer_destroyHardwareResources },
     { "nTrimMemory", "(I)V", (void*) android_view_ThreadedRenderer_trimMemory },
+    { "nOverrideProperty", "(Ljava/lang/String;Ljava/lang/String;)V",  (void*) android_view_ThreadedRenderer_overrideProperty },
     { "nFence", "(J)V", (void*) android_view_ThreadedRenderer_fence },
     { "nStopDrawing", "(J)V", (void*) android_view_ThreadedRenderer_stopDrawing },
     { "nNotifyFramePending", "(J)V", (void*) android_view_ThreadedRenderer_notifyFramePending },
diff --git a/core/jni/com_google_android_gles_jni_EGLImpl.cpp b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
index 7080e2a..baeb7dd 100644
--- a/core/jni/com_google_android_gles_jni_EGLImpl.cpp
+++ b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
@@ -277,8 +277,9 @@
     EGLConfig  cnf = getConfig(_env, config);
     jint* base = 0;
 
-    SkBitmap const * nativeBitmap = GraphicsJNI::getSkBitmap(_env, native_pixmap);
-    SkPixelRef* ref = nativeBitmap ? nativeBitmap->pixelRef() : 0;
+    SkBitmap nativeBitmap;
+    GraphicsJNI::getSkBitmap(_env, native_pixmap, &nativeBitmap);
+    SkPixelRef* ref = nativeBitmap.pixelRef();
     if (ref == NULL) {
         jniThrowException(_env, "java/lang/IllegalArgumentException", "Bitmap has no PixelRef");
         return;
@@ -289,10 +290,10 @@
 
     egl_native_pixmap_t pixmap;
     pixmap.version = sizeof(pixmap);
-    pixmap.width  = nativeBitmap->width();
-    pixmap.height = nativeBitmap->height();
-    pixmap.stride = nativeBitmap->rowBytes() / nativeBitmap->bytesPerPixel();
-    pixmap.format = convertPixelFormat(nativeBitmap->colorType());
+    pixmap.width  = nativeBitmap.width();
+    pixmap.height = nativeBitmap.height();
+    pixmap.stride = nativeBitmap.rowBytes() / nativeBitmap.bytesPerPixel();
+    pixmap.format = convertPixelFormat(nativeBitmap.colorType());
     pixmap.data   = (uint8_t*)ref->pixels();
 
     base = beginNativeAttribList(_env, attrib_list);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 942e6a6..e5bba6e 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -2103,7 +2103,8 @@
 
     <!-- @SystemApi Allows an application to collect component usage
          statistics
-         <p>Not for use by third-party applications. -->
+         <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|development|appop" />
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
@@ -2352,11 +2353,6 @@
     <permission android:name="android.permission.BIND_CONDITION_PROVIDER_SERVICE"
         android:protectionLevel="signature" />
 
-    <!-- Must be required by a {@link android.media.routing.MediaRouteService},
-         to ensure that only the system can bind to it. -->
-    <permission android:name="android.permission.BIND_MEDIA_ROUTE_SERVICE"
-        android:protectionLevel="signature" />
-
     <!-- Must be required by an {@link android.service.dreams.DreamService},
          to ensure that only the system can bind to it. -->
     <permission android:name="android.permission.BIND_DREAM_SERVICE"
@@ -2433,6 +2429,12 @@
     <permission android:name="android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT"
                 android:protectionLevel="signature" />
 
+    <!-- @SystemApi Allows applications to kill UIDs.
+        <p>Not for use by third-party applications.
+         @hide -->
+    <permission android:name="android.permission.KILL_UID"
+                android:protectionLevel="signature" />
+
     <!-- The system process is explicitly the only one allowed to launch the
          confirmation UI for full backup/restore -->
     <uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP"/>
@@ -2445,7 +2447,8 @@
                  android:backupAgent="com.android.server.backup.SystemBackupAgent"
                  android:killAfterRestore="false"
                  android:icon="@drawable/ic_launcher_android"
-                 android:supportsRtl="true">
+                 android:supportsRtl="true"
+                 android:theme="@style/Theme.Material.DayNight.DarkActionBar">
         <activity android:name="com.android.internal.app.ChooserActivity"
                 android:theme="@style/Theme.DeviceDefault.Resolver"
                 android:finishOnCloseSystemDialogs="true"
@@ -2478,7 +2481,7 @@
                 android:label="@string/managed_profile_label">
         </activity-alias>
         <activity android:name="com.android.internal.app.HeavyWeightSwitcherActivity"
-                android:theme="@style/Theme.Material.Light.Dialog"
+                android:theme="@style/Theme.Material.DayNight.Dialog"
                 android:label="@string/heavy_weight_switcher_title"
                 android:finishOnCloseSystemDialogs="true"
                 android:excludeFromRecents="true"
@@ -2511,7 +2514,7 @@
         <activity android:name="android.accounts.ChooseAccountActivity"
                 android:excludeFromRecents="true"
                 android:exported="true"
-                android:theme="@style/Theme.Material.Light.Dialog"
+                android:theme="@style/Theme.Material.DayNight.Dialog"
                 android:label="@string/choose_account_label"
                 android:process=":ui">
         </activity>
@@ -2519,14 +2522,14 @@
         <activity android:name="android.accounts.ChooseTypeAndAccountActivity"
                 android:excludeFromRecents="true"
                 android:exported="true"
-                android:theme="@style/Theme.Material.Light.Dialog"
+                android:theme="@style/Theme.Material.DayNight.Dialog"
                 android:label="@string/choose_account_label"
                 android:process=":ui">
         </activity>
 
         <activity android:name="android.accounts.ChooseAccountTypeActivity"
                 android:excludeFromRecents="true"
-                android:theme="@style/Theme.Material.Light.Dialog"
+                android:theme="@style/Theme.Material.DayNight.Dialog"
                 android:label="@string/choose_account_label"
                 android:process=":ui">
         </activity>
@@ -2534,19 +2537,19 @@
         <activity android:name="android.accounts.CantAddAccountActivity"
                 android:excludeFromRecents="true"
                 android:exported="true"
-                android:theme="@style/Theme.Material.Light.Dialog.NoActionBar"
+                android:theme="@style/Theme.Material.DayNight.Dialog.NoActionBar"
                 android:process=":ui">
         </activity>
 
         <activity android:name="android.accounts.GrantCredentialsPermissionActivity"
                 android:excludeFromRecents="true"
                 android:exported="true"
-                android:theme="@style/Theme.Material.Light.DialogWhenLarge"
+                android:theme="@style/Theme.Material.DayNight.DialogWhenLarge"
                 android:process=":ui">
         </activity>
 
         <activity android:name="android.content.SyncActivityTooManyDeletes"
-               android:theme="@style/Theme.Material.Light.Dialog"
+               android:theme="@style/Theme.Material.DayNight.Dialog"
                android:label="@string/sync_too_many_deletes"
                android:process=":ui">
         </activity>
@@ -2566,22 +2569,11 @@
         </activity>
 
         <activity android:name="com.android.internal.app.NetInitiatedActivity"
-                android:theme="@style/Theme.Material.Light.Dialog.Alert"
+                android:theme="@style/Theme.Material.DayNight.Dialog.Alert"
                 android:excludeFromRecents="true"
                 android:process=":ui">
         </activity>
 
-        <activity android:name="com.android.internal.app.RestrictionsPinActivity"
-                android:theme="@style/Theme.Material.Light.Dialog.Alert"
-                android:excludeFromRecents="true"
-                android:windowSoftInputMode="adjustPan"
-                android:process=":ui">
-            <intent-filter android:priority="100">
-                <action android:name="android.intent.action.RESTRICTIONS_CHALLENGE" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
         <receiver android:name="com.android.server.BootReceiver"
                 android:primaryUserOnly="true">
             <intent-filter android:priority="1000">
diff --git a/core/res/res/anim/ic_checkbox_unchecked_box_inner_merged_animation.xml b/core/res/res/anim/ic_checkbox_to_checked_box_inner_merged_animation.xml
similarity index 93%
rename from core/res/res/anim/ic_checkbox_unchecked_box_inner_merged_animation.xml
rename to core/res/res/anim/ic_checkbox_to_checked_box_inner_merged_animation.xml
index b5ad5e9d..e522453 100644
--- a/core/res/res/anim/ic_checkbox_unchecked_box_inner_merged_animation.xml
+++ b/core/res/res/anim/ic_checkbox_to_checked_box_inner_merged_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,8 +14,7 @@
      limitations under the License.
 -->
 
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
+<set xmlns:android="http://schemas.android.com/apk/res/android">
     <objectAnimator
         android:duration="166"
         android:propertyName="pathData"
@@ -24,8 +22,7 @@
         android:valueTo="M 0.0,-0.05 l 0.0,0.0 c 0.02761423749,0.0 0.05,0.02238576251 0.05,0.05 l 0.0,0.0 c 0.0,0.02761423749 -0.02238576251,0.05 -0.05,0.05 l 0.0,0.0 c -0.02761423749,0.0 -0.05,-0.02238576251 -0.05,-0.05 l 0.0,0.0 c 0.0,-0.02761423749 0.02238576251,-0.05 0.05,-0.05 Z M 7.0,-9.0 c 0.0,0.0 -14.0,0.0 -14.0,0.0 c -1.1044921875,0.0 -2.0,0.8955078125 -2.0,2.0 c 0.0,0.0 0.0,14.0 0.0,14.0 c 0.0,1.1044921875 0.8955078125,2.0 2.0,2.0 c 0.0,0.0 14.0,0.0 14.0,0.0 c 1.1044921875,0.0 2.0,-0.8955078125 2.0,-2.0 c 0.0,0.0 0.0,-14.0 0.0,-14.0 c 0.0,-1.1044921875 -0.8955078125,-2.0 -2.0,-2.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z"
         android:valueType="pathType"
         android:interpolator="@interpolator/ic_checkbox_unchecked_animation_interpolator_1" />
-    <set
-        android:ordering="sequentially" >
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="166"
             android:propertyName="fillAlpha"
diff --git a/core/res/res/anim/ic_checkbox_unchecked_box_outer_merged_animation.xml b/core/res/res/anim/ic_checkbox_to_checked_box_outer_merged_animation.xml
similarity index 95%
rename from core/res/res/anim/ic_checkbox_unchecked_box_outer_merged_animation.xml
rename to core/res/res/anim/ic_checkbox_to_checked_box_outer_merged_animation.xml
index 066971a..628e967 100644
--- a/core/res/res/anim/ic_checkbox_unchecked_box_outer_merged_animation.xml
+++ b/core/res/res/anim/ic_checkbox_to_checked_box_outer_merged_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,10 +14,8 @@
      limitations under the License.
 -->
 
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <set
-        android:ordering="sequentially" >
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="200"
             android:propertyName="pathData"
@@ -34,8 +31,7 @@
             android:valueType="pathType"
             android:interpolator="@interpolator/ic_checkbox_unchecked_animation_interpolator_1" />
     </set>
-    <set
-        android:ordering="sequentially" >
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="166"
             android:propertyName="fillAlpha"
diff --git a/core/res/res/anim/ic_checkbox_unchecked_icon_null_animation.xml b/core/res/res/anim/ic_checkbox_to_checked_icon_null_animation.xml
similarity index 88%
rename from core/res/res/anim/ic_checkbox_unchecked_icon_null_animation.xml
rename to core/res/res/anim/ic_checkbox_to_checked_icon_null_animation.xml
index fc40d47..6fa3fd5 100644
--- a/core/res/res/anim/ic_checkbox_unchecked_icon_null_animation.xml
+++ b/core/res/res/anim/ic_checkbox_to_checked_icon_null_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,10 +14,8 @@
      limitations under the License.
 -->
 
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <set
-        android:ordering="sequentially" >
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="200"
             android:propertyName="scaleX"
@@ -32,8 +29,7 @@
             android:valueTo="0.2"
             android:interpolator="@interpolator/ic_checkbox_unchecked_animation_interpolator_1" />
     </set>
-    <set
-        android:ordering="sequentially" >
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="200"
             android:propertyName="scaleY"
diff --git a/core/res/res/anim/ic_checkbox_checked_box_inner_merged_animation.xml b/core/res/res/anim/ic_checkbox_to_unchecked_box_inner_merged_animation.xml
similarity index 94%
rename from core/res/res/anim/ic_checkbox_checked_box_inner_merged_animation.xml
rename to core/res/res/anim/ic_checkbox_to_unchecked_box_inner_merged_animation.xml
index 7be32af..d35b426 100644
--- a/core/res/res/anim/ic_checkbox_checked_box_inner_merged_animation.xml
+++ b/core/res/res/anim/ic_checkbox_to_unchecked_box_inner_merged_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,10 +14,8 @@
      limitations under the License.
 -->
 
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <set
-        android:ordering="sequentially" >
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="166"
             android:propertyName="pathData"
@@ -34,8 +31,7 @@
             android:valueType="pathType"
             android:interpolator="@interpolator/ic_checkbox_checked_animation_interpolator_1" />
     </set>
-    <set
-        android:ordering="sequentially" >
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="133"
             android:propertyName="fillAlpha"
diff --git a/core/res/res/anim/ic_checkbox_checked_check_path_merged_animation.xml b/core/res/res/anim/ic_checkbox_to_unchecked_check_path_merged_animation.xml
similarity index 94%
rename from core/res/res/anim/ic_checkbox_checked_check_path_merged_animation.xml
rename to core/res/res/anim/ic_checkbox_to_unchecked_check_path_merged_animation.xml
index fcba2c8..a5d814e 100644
--- a/core/res/res/anim/ic_checkbox_checked_check_path_merged_animation.xml
+++ b/core/res/res/anim/ic_checkbox_to_unchecked_check_path_merged_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,8 +14,7 @@
      limitations under the License.
 -->
 
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
+<set xmlns:android="http://schemas.android.com/apk/res/android">
     <objectAnimator
         android:duration="166"
         android:propertyName="pathData"
@@ -24,8 +22,7 @@
         android:valueTo="M 7.0,-9.0 c 0.0,0.0 -14.0,0.0 -14.0,0.0 c -1.1044921875,0.0 -2.0,0.8955078125 -2.0,2.0 c 0.0,0.0 0.0,14.0 0.0,14.0 c 0.0,1.1044921875 0.8955078125,2.0 2.0,2.0 c 0.0,0.0 14.0,0.0 14.0,0.0 c 1.1044921875,0.0 2.0,-0.8955078125 2.0,-2.0 c 0.0,0.0 0.0,-14.0 0.0,-14.0 c 0.0,-1.1044921875 -0.8955078125,-2.0 -2.0,-2.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z M 0.0,1.42500305176 c 0.0,0.0 -1.4234161377,-1.40159606934 -1.4234161377,-1.40159606934 c 0.0,0.0 1.41409301758,-1.41409301758 1.41409301758,-1.41409301758 c 0.0,0.0 0.00932312011719,-0.0124053955078 0.00932312011719,-0.0124053955078 c 0.0,0.0 0.0234069824219,-0.0235137939453 0.0234069824219,-0.0235137939453 c 0.0,0.0 1.41409301758,1.41409301758 1.41409301758,1.41409301758 c 0.0,0.0 -1.4375,1.43751525879 -1.4375,1.43751525879 Z"
         android:valueType="pathType"
         android:interpolator="@interpolator/ic_checkbox_checked_animation_interpolator_1" />
-    <set
-        android:ordering="sequentially" >
+    <set android:ordering="sequentially" >
         <objectAnimator
             android:duration="133"
             android:propertyName="fillAlpha"
diff --git a/core/res/res/anim/ic_checkbox_checked_icon_null_animation.xml b/core/res/res/anim/ic_checkbox_to_unchecked_icon_null_animation.xml
similarity index 88%
rename from core/res/res/anim/ic_checkbox_checked_icon_null_animation.xml
rename to core/res/res/anim/ic_checkbox_to_unchecked_icon_null_animation.xml
index 312003f..0f07b0e 100644
--- a/core/res/res/anim/ic_checkbox_checked_icon_null_animation.xml
+++ b/core/res/res/anim/ic_checkbox_to_unchecked_icon_null_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,10 +14,8 @@
      limitations under the License.
 -->
 
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <set
-        android:ordering="sequentially" >
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="166"
             android:propertyName="scaleX"
@@ -32,8 +29,7 @@
             android:valueTo="0.2"
             android:interpolator="@interpolator/ic_checkbox_checked_animation_interpolator_1" />
     </set>
-    <set
-        android:ordering="sequentially" >
+    <set android:ordering="sequentially">
         <objectAnimator
             android:duration="166"
             android:propertyName="scaleY"
diff --git a/core/res/res/drawable-hdpi/text_cursor_mtrl_alpha.9.png b/core/res/res/drawable-hdpi/text_cursor_mtrl_alpha.9.png
deleted file mode 100644
index 0179433..0000000
--- a/core/res/res/drawable-hdpi/text_cursor_mtrl_alpha.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_cursor_mtrl_alpha.9.png b/core/res/res/drawable-mdpi/text_cursor_mtrl_alpha.9.png
deleted file mode 100644
index e5760be..0000000
--- a/core/res/res/drawable-mdpi/text_cursor_mtrl_alpha.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_cursor_mtrl_alpha.9.png b/core/res/res/drawable-xhdpi/text_cursor_mtrl_alpha.9.png
deleted file mode 100644
index 3939214..0000000
--- a/core/res/res/drawable-xhdpi/text_cursor_mtrl_alpha.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_cursor_mtrl_alpha.9.png b/core/res/res/drawable-xxhdpi/text_cursor_mtrl_alpha.9.png
deleted file mode 100644
index 432c385..0000000
--- a/core/res/res/drawable-xxhdpi/text_cursor_mtrl_alpha.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/btn_check_material_anim.xml b/core/res/res/drawable/btn_check_material_anim.xml
index 7cb1b89..710a291 100644
--- a/core/res/res/drawable/btn_check_material_anim.xml
+++ b/core/res/res/drawable/btn_check_material_anim.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!-- 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.
@@ -15,24 +15,19 @@
 -->
 
 <animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
-
     <item
-        android:id="@+id/on"
+        android:id="@+id/checked"
         android:state_checked="true"
         android:drawable="@drawable/ic_checkbox_checked" />
-
     <item
-        android:id="@+id/off"
+        android:id="@+id/unchecked"
         android:drawable="@drawable/ic_checkbox_unchecked" />
-
     <transition
-        android:fromId="@+id/off"
-        android:toId="@+id/on"
-        android:drawable="@drawable/ic_checkbox_unchecked_animation" />
-
+        android:fromId="@+id/unchecked"
+        android:toId="@+id/checked"
+        android:drawable="@drawable/ic_checkbox_unchecked_to_checked_animation" />
     <transition
-        android:fromId="@+id/on"
-        android:toId="@+id/off"
-        android:drawable="@drawable/ic_checkbox_checked_animation" />
-
+        android:fromId="@+id/checked"
+        android:toId="@+id/unchecked"
+        android:drawable="@drawable/ic_checkbox_checked_to_unchecked_animation" />
 </animated-selector>
diff --git a/core/res/res/drawable/ic_checkbox_checked.xml b/core/res/res/drawable/ic_checkbox_checked.xml
index cc7b5df..ecde414 100644
--- a/core/res/res/drawable/ic_checkbox_checked.xml
+++ b/core/res/res/drawable/ic_checkbox_checked.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,24 +14,23 @@
      limitations under the License.
 -->
 
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="ic_checkbox_checked"
-    android:width="32dp"
-    android:viewportWidth="48"
-    android:height="32dp"
-    android:viewportHeight="48"
-    android:tint="?attr/colorControlActivated" >
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:name="ic_checkbox_checked"
+        android:width="32dp"
+        android:viewportWidth="48"
+        android:height="32dp"
+        android:viewportHeight="48"
+        android:tint="@color/control_checkable_material">
     <group
         android:name="icon_null"
         android:translateX="24"
         android:translateY="24"
         android:scaleX="0.2"
-        android:scaleY="0.2" >
+        android:scaleY="0.2">
         <group
             android:name="check"
             android:scaleX="7.5"
-            android:scaleY="7.5" >
+            android:scaleY="7.5">
             <path
                 android:name="check_path_merged"
                 android:pathData="M 7.0,-9.0 c 0.0,0.0 -14.0,0.0 -14.0,0.0 c -1.1044921875,0.0 -2.0,0.8955078125 -2.0,2.0 c 0.0,0.0 0.0,14.0 0.0,14.0 c 0.0,1.1044921875 0.8955078125,2.0 2.0,2.0 c 0.0,0.0 14.0,0.0 14.0,0.0 c 1.1044921875,0.0 2.0,-0.8955078125 2.0,-2.0 c 0.0,0.0 0.0,-14.0 0.0,-14.0 c 0.0,-1.1044921875 -0.8955078125,-2.0 -2.0,-2.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z M -2.0,5.00001525879 c 0.0,0.0 -5.0,-5.00001525879 -5.0,-5.00001525879 c 0.0,0.0 1.41409301758,-1.41409301758 1.41409301758,-1.41409301758 c 0.0,0.0 3.58590698242,3.58601379395 3.58590698242,3.58601379395 c 0.0,0.0 7.58590698242,-7.58601379395 7.58590698242,-7.58601379395 c 0.0,0.0 1.41409301758,1.41409301758 1.41409301758,1.41409301758 c 0.0,0.0 -9.0,9.00001525879 -9.0,9.00001525879 Z"
@@ -41,7 +39,7 @@
         <group
             android:name="box_dilate"
             android:scaleX="7.5"
-            android:scaleY="7.5" >
+            android:scaleY="7.5">
             <path
                 android:name="box_inner_merged"
                 android:pathData="M 0.0,-1.0 l 0.0,0.0 c 0.5522847498,0.0 1.0,0.4477152502 1.0,1.0 l 0.0,0.0 c 0.0,0.5522847498 -0.4477152502,1.0 -1.0,1.0 l 0.0,0.0 c -0.5522847498,0.0 -1.0,-0.4477152502 -1.0,-1.0 l 0.0,0.0 c 0.0,-0.5522847498 0.4477152502,-1.0 1.0,-1.0 Z M 7.0,-9.0 c 0.0,0.0 -14.0,0.0 -14.0,0.0 c -1.1044921875,0.0 -2.0,0.8955078125 -2.0,2.0 c 0.0,0.0 0.0,14.0 0.0,14.0 c 0.0,1.1044921875 0.8955078125,2.0 2.0,2.0 c 0.0,0.0 14.0,0.0 14.0,0.0 c 1.1044921875,0.0 2.0,-0.8955078125 2.0,-2.0 c 0.0,0.0 0.0,-14.0 0.0,-14.0 c 0.0,-1.1044921875 -0.8955078125,-2.0 -2.0,-2.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z"
diff --git a/core/res/res/drawable/ic_checkbox_checked_animation.xml b/core/res/res/drawable/ic_checkbox_checked_to_unchecked_animation.xml
similarity index 63%
rename from core/res/res/drawable/ic_checkbox_checked_animation.xml
rename to core/res/res/drawable/ic_checkbox_checked_to_unchecked_animation.xml
index af5eeee..fad2233 100644
--- a/core/res/res/drawable/ic_checkbox_checked_animation.xml
+++ b/core/res/res/drawable/ic_checkbox_checked_to_unchecked_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,16 +14,15 @@
      limitations under the License.
 -->
 
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/ic_checkbox_checked" >
+<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+                 android:drawable="@drawable/ic_checkbox_checked">
     <target
         android:name="icon_null"
-        android:animation="@anim/ic_checkbox_checked_icon_null_animation" />
+        android:animation="@anim/ic_checkbox_to_unchecked_icon_null_animation" />
     <target
         android:name="check_path_merged"
-        android:animation="@anim/ic_checkbox_checked_check_path_merged_animation" />
+        android:animation="@anim/ic_checkbox_to_unchecked_check_path_merged_animation" />
     <target
         android:name="box_inner_merged"
-        android:animation="@anim/ic_checkbox_checked_box_inner_merged_animation" />
+        android:animation="@anim/ic_checkbox_to_unchecked_box_inner_merged_animation" />
 </animated-vector>
diff --git a/core/res/res/drawable/ic_checkbox_unchecked.xml b/core/res/res/drawable/ic_checkbox_unchecked.xml
index 410f0bc..3329b46 100644
--- a/core/res/res/drawable/ic_checkbox_unchecked.xml
+++ b/core/res/res/drawable/ic_checkbox_unchecked.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,24 +14,23 @@
      limitations under the License.
 -->
 
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="ic_checkbox_unchecked"
-    android:width="32dp"
-    android:viewportWidth="48"
-    android:height="32dp"
-    android:viewportHeight="48"
-    android:tint="?attr/colorControlNormal" >
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:name="ic_checkbox_unchecked"
+        android:width="32dp"
+        android:viewportWidth="48"
+        android:height="32dp"
+        android:viewportHeight="48"
+        android:tint="@color/control_checkable_material">
     <group
         android:name="icon_null"
         android:translateX="24"
         android:translateY="24"
         android:scaleX="0.2"
-        android:scaleY="0.2" >
+        android:scaleY="0.2">
         <group
             android:name="check"
             android:scaleX="7.5"
-            android:scaleY="7.5" >
+            android:scaleY="7.5">
             <path
                 android:name="box_outer_merged"
                 android:pathData="M 7.0,-9.0 c 0.0,0.0 -14.0,0.0 -14.0,0.0 c -1.1044921875,0.0 -2.0,0.8955078125 -2.0,2.0 c 0.0,0.0 0.0,14.0 0.0,14.0 c 0.0,1.1044921875 0.8955078125,2.0 2.0,2.0 c 0.0,0.0 14.0,0.0 14.0,0.0 c 1.1044921875,0.0 2.0,-0.8955078125 2.0,-2.0 c 0.0,0.0 0.0,-14.0 0.0,-14.0 c 0.0,-1.1044921875 -0.8955078125,-2.0 -2.0,-2.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z M -2.0,5.00001525879 c 0.0,0.0 -1.4234161377,-1.40159606934 -1.4234161377,-1.40159606934 c 0.0,0.0 1.41409301758,-1.41409301758 1.41409301758,-1.41409301758 c 0.0,0.0 0.00932312011719,-0.0124053955078 0.00932312011719,-0.0124053955078 c 0.0,0.0 0.0234069824219,-0.0235137939453 0.0234069824219,-0.0235137939453 c 0.0,0.0 1.41409301758,1.41409301758 1.41409301758,1.41409301758 c 0.0,0.0 -1.4375,1.43751525879 -1.4375,1.43751525879 Z"
@@ -42,7 +40,7 @@
         <group
             android:name="box_dilate"
             android:scaleX="7.5"
-            android:scaleY="7.5" >
+            android:scaleY="7.5">
             <path
                 android:name="box_inner_merged"
                 android:pathData="M -7.0,-7.0 l 14.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,14.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l -14.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-14.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z M 7.0,-9.0 c 0.0,0.0 -14.0,0.0 -14.0,0.0 c -1.1044921875,0.0 -2.0,0.8955078125 -2.0,2.0 c 0.0,0.0 0.0,14.0 0.0,14.0 c 0.0,1.1044921875 0.8955078125,2.0 2.0,2.0 c 0.0,0.0 14.0,0.0 14.0,0.0 c 1.1044921875,0.0 2.0,-0.8955078125 2.0,-2.0 c 0.0,0.0 0.0,-14.0 0.0,-14.0 c 0.0,-1.1044921875 -0.8955078125,-2.0 -2.0,-2.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z"
diff --git a/core/res/res/drawable/ic_checkbox_unchecked_animation.xml b/core/res/res/drawable/ic_checkbox_unchecked_to_checked_animation.xml
similarity index 63%
rename from core/res/res/drawable/ic_checkbox_unchecked_animation.xml
rename to core/res/res/drawable/ic_checkbox_unchecked_to_checked_animation.xml
index 605fce1..68351701 100644
--- a/core/res/res/drawable/ic_checkbox_unchecked_animation.xml
+++ b/core/res/res/drawable/ic_checkbox_unchecked_to_checked_animation.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -15,16 +14,15 @@
      limitations under the License.
 -->
 
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/ic_checkbox_unchecked" >
+<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+                 android:drawable="@drawable/ic_checkbox_unchecked">
     <target
         android:name="icon_null"
-        android:animation="@anim/ic_checkbox_unchecked_icon_null_animation" />
+        android:animation="@anim/ic_checkbox_to_checked_icon_null_animation" />
     <target
         android:name="box_outer_merged"
-        android:animation="@anim/ic_checkbox_unchecked_box_outer_merged_animation" />
+        android:animation="@anim/ic_checkbox_to_checked_box_outer_merged_animation" />
     <target
         android:name="box_inner_merged"
-        android:animation="@anim/ic_checkbox_unchecked_box_inner_merged_animation" />
+        android:animation="@anim/ic_checkbox_to_checked_box_inner_merged_animation" />
 </animated-vector>
diff --git a/packages/IntentFilterVerifier/res/values/strings.xml b/core/res/res/drawable/scroll_indicator_material.xml
similarity index 64%
rename from packages/IntentFilterVerifier/res/values/strings.xml
rename to core/res/res/drawable/scroll_indicator_material.xml
index 22f3cd5..63cd584 100644
--- a/packages/IntentFilterVerifier/res/values/strings.xml
+++ b/core/res/res/drawable/scroll_indicator_material.xml
@@ -14,10 +14,10 @@
      limitations under the License.
 -->
 
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Package name shown to users when they look at installed applications
-         and running processes. This service verifies packages that are
-         requested to be installed. [CHAR LIMIT=50] -->
-    <string name="service_name">Basic Intent Filter Verification Service</string>
-
-</resources>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:tint="?attr/colorForeground">
+    <solid android:color="#1f000000" />
+    <size
+        android:height="1dp"
+        android:width="1dp" />
+</shape>
diff --git a/core/res/res/drawable/text_cursor_material.xml b/core/res/res/drawable/text_cursor_material.xml
index a350c47..0bedaa9 100644
--- a/core/res/res/drawable/text_cursor_material.xml
+++ b/core/res/res/drawable/text_cursor_material.xml
@@ -14,6 +14,15 @@
      limitations under the License.
 -->
 
-<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/text_cursor_mtrl_alpha"
-    android:tint="?attr/colorControlActivated" />
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+       android:inset="2dp">
+    <shape
+        android:tint="?attr/colorControlActivated"
+        android:shape="rectangle">
+        <size
+            android:height="2dp"
+            android:width="2dp" />
+        <solid
+            android:color="@color/white" />
+    </shape>
+</inset>
diff --git a/core/res/res/layout-land/time_picker_material.xml b/core/res/res/layout-land/time_picker_material.xml
index 89c3749..4b544d2 100644
--- a/core/res/res/layout-land/time_picker_material.xml
+++ b/core/res/res/layout-land/time_picker_material.xml
@@ -16,7 +16,6 @@
 -->
 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
 
@@ -27,8 +26,7 @@
         android:layout_column="0"
         android:layout_row="0"
         android:layout_rowSpan="3"
-        android:layout_gravity="center|fill"
-        tools:background="@color/accent_material_light" />
+        android:layout_gravity="center|fill" />
 
     <RelativeLayout
         android:layout_width="wrap_content"
@@ -56,20 +54,14 @@
                 android:textAppearance="@style/TextAppearance.Material.TimePicker.TimeLabel"
                 android:singleLine="true"
                 android:ellipsize="none"
-                android:gravity="right"
-                tools:text="23"
-                tools:textSize="@dimen/timepicker_time_label_size"
-                tools:textColor="@color/white" />
+                android:gravity="right" />
 
             <TextView
                 android:id="@+id/separator"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:textAppearance="@style/TextAppearance.Material.TimePicker.TimeLabel"
-                android:importantForAccessibility="no"
-                tools:text=":"
-                tools:textSize="@dimen/timepicker_time_label_size"
-                tools:textColor="@color/white" />
+                android:importantForAccessibility="no" />
 
             <!-- The minutes should always be to the right of the separator,
                  regardless of the current locale's layout direction. -->
@@ -80,10 +72,7 @@
                 android:textAppearance="@style/TextAppearance.Material.TimePicker.TimeLabel"
                 android:singleLine="true"
                 android:ellipsize="none"
-                android:gravity="left"
-                tools:text="59"
-                tools:textSize="@dimen/timepicker_time_label_size"
-                tools:textColor="@color/white" />
+                android:gravity="left" />
         </LinearLayout>
 
         <!-- The layout alignment of this view will switch between toRightOf
@@ -106,10 +95,7 @@
                 android:paddingTop="@dimen/timepicker_am_top_padding"
                 android:lines="1"
                 android:ellipsize="none"
-                android:includeFontPadding="false"
-                tools:text="AM"
-                tools:textSize="@dimen/timepicker_ampm_label_size"
-                tools:textColor="@color/white" />
+                android:includeFontPadding="false" />
 
             <CheckedTextView
                 android:id="@+id/pm_label"
@@ -121,10 +107,7 @@
                 android:paddingTop="@dimen/timepicker_pm_top_padding"
                 android:lines="1"
                 android:ellipsize="none"
-                android:includeFontPadding="false"
-                tools:text="PM"
-                tools:textSize="@dimen/timepicker_ampm_label_size"
-                tools:textColor="@color/white" />
+                android:includeFontPadding="false" />
         </LinearLayout>
     </RelativeLayout>
 
diff --git a/core/res/res/layout/alert_dialog_button_bar_material.xml b/core/res/res/layout/alert_dialog_button_bar_material.xml
index 1eea4e1..6e102f3 100644
--- a/core/res/res/layout/alert_dialog_button_bar_material.xml
+++ b/core/res/res/layout/alert_dialog_button_bar_material.xml
@@ -27,6 +27,7 @@
     android:paddingTop="4dp"
     android:paddingBottom="4dp"
     android:gravity="bottom"
+    android:allowStacking="@bool/allow_stacked_button_bar"
     style="?attr/buttonBarStyle">
 
     <Button
@@ -53,4 +54,4 @@
         style="?attr/buttonBarPositiveButtonStyle"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
-</com.android.internal.widget.ButtonBarLayout>
\ No newline at end of file
+</com.android.internal.widget.ButtonBarLayout>
diff --git a/core/res/res/layout/alert_dialog_material.xml b/core/res/res/layout/alert_dialog_material.xml
index bf1e383..95c2459 100644
--- a/core/res/res/layout/alert_dialog_material.xml
+++ b/core/res/res/layout/alert_dialog_material.xml
@@ -24,52 +24,51 @@
 
     <include layout="@layout/alert_dialog_title_material" />
 
-    <FrameLayout android:id="@+id/contentPanel"
+    <FrameLayout
+        android:id="@+id/contentPanel"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:minHeight="48dp">
-        <View android:id="@+id/scrollIndicatorUp"
-            android:visibility="gone"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_gravity="top"
-            android:background="@drawable/list_divider_material"/>
-        <ScrollView android:id="@+id/scrollView"
+
+        <ScrollView
+            android:id="@+id/scrollView"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:paddingTop="@dimen/dialog_padding_top_material"
             android:clipToPadding="false">
+
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:orientation="vertical">
-                <TextView android:id="@+id/message"
-                          style="@style/TextAppearance.Material.Subhead"
-                          android:layout_width="match_parent"
-                          android:layout_height="wrap_content"
-                          android:paddingStart="?attr/dialogPreferredPadding"
-                          android:paddingTop="@dimen/dialog_padding_top_material"
-                          android:paddingEnd="?attr/dialogPreferredPadding" />
-                <Space android:id="@+id/textSpacerNoButtons"
-                       android:visibility="gone"
-                       android:layout_width="0dp"
-                       android:layout_height="@dimen/dialog_padding_top_material" />
+
+                <TextView
+                    android:id="@+id/message"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:paddingEnd="?attr/dialogPreferredPadding"
+                    android:paddingStart="?attr/dialogPreferredPadding"
+                    style="@style/TextAppearance.Material.Subhead" />
+
+                <Space
+                    android:id="@+id/textSpacerNoButtons"
+                    android:visibility="gone"
+                    android:layout_width="0dp"
+                    android:layout_height="@dimen/dialog_padding_top_material" />
             </LinearLayout>
         </ScrollView>
-        <View android:id="@+id/scrollIndicatorDown"
-            android:visibility="gone"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_gravity="bottom"
-            android:background="@drawable/list_divider_material"/>
     </FrameLayout>
 
-    <FrameLayout android:id="@+id/customPanel"
+    <FrameLayout
+        android:id="@+id/customPanel"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:minHeight="48dp">
-        <FrameLayout android:id="@+id/custom"
+
+        <FrameLayout
+            android:id="@+id/custom"
             android:layout_width="match_parent"
             android:layout_height="wrap_content" />
     </FrameLayout>
diff --git a/core/res/res/layout/chooser_grid.xml b/core/res/res/layout/chooser_grid.xml
index 0fa82eb..dcdfb6c 100644
--- a/core/res/res/layout/chooser_grid.xml
+++ b/core/res/res/layout/chooser_grid.xml
@@ -21,7 +21,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:maxWidth="@dimen/resolver_max_width"
-        android:maxCollapsedHeight="256dp"
+        android:maxCollapsedHeight="288dp"
         android:maxCollapsedHeightSmall="56dp"
         android:id="@id/contentPanel">
 
@@ -30,24 +30,25 @@
             android:layout_height="wrap_content"
             android:layout_alwaysShow="true"
             android:elevation="8dp"
-            android:paddingStart="?attr/dialogPreferredPadding"
+            android:paddingStart="16dp"
             android:background="@color/white" >
         <ImageView android:id="@+id/title_icon"
                    android:layout_width="24dp"
                    android:layout_height="24dp"
                    android:layout_gravity="start|center_vertical"
                    android:layout_marginEnd="16dp"
+                   android:visibility="gone"
                    android:scaleType="fitCenter" />
         <TextView android:id="@+id/title"
                   android:layout_width="0dp"
                   android:layout_height="wrap_content"
                   android:layout_weight="1"
-                  android:minHeight="56dp"
                   android:textAppearance="?attr/textAppearanceMedium"
+                  android:textSize="14sp"
                   android:gravity="start|center_vertical"
                   android:paddingEnd="?attr/dialogPreferredPadding"
-                  android:paddingTop="8dp"
-                  android:paddingBottom="8dp" />
+                  android:paddingTop="12dp"
+                  android:paddingBottom="12dp" />
         <LinearLayout android:id="@+id/profile_button"
                       android:layout_width="wrap_content"
                       android:layout_height="48dp"
@@ -82,23 +83,24 @@
         </LinearLayout>
     </LinearLayout>
 
-    <GridView
+    <ListView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:id="@+id/resolver_list"
             android:clipToPadding="false"
-            android:paddingStart="@dimen/chooser_grid_padding"
-            android:paddingEnd="@dimen/chooser_grid_padding"
             android:scrollbarStyle="outsideOverlay"
             android:background="@color/white"
             android:elevation="8dp"
-            android:numColumns="4"
+            android:listSelector="@color/transparent"
+            android:divider="@null"
+            android:scrollIndicators="top"
             android:nestedScrollingEnabled="true" />
 
     <TextView android:id="@+id/empty"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:layout_alwaysShow="true"
+              android:background="@color/white"
               android:text="@string/noApplications"
               android:padding="32dp"
               android:gravity="center"
diff --git a/core/res/res/layout/chooser_row.xml b/core/res/res/layout/chooser_row.xml
new file mode 100644
index 0000000..9baa32c
--- /dev/null
+++ b/core/res/res/layout/chooser_row.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="horizontal"
+              android:layout_width="match_parent" android:layout_height="wrap_content"
+              android:minHeight="80dp"
+              android:gravity="start|top"
+              android:paddingTop="8dp"
+              android:paddingBottom="8dp"
+              android:paddingStart="@dimen/chooser_grid_padding"
+              android:paddingEnd="@dimen/chooser_grid_padding"
+              android:weightSum="4">
+
+</LinearLayout>
+
diff --git a/core/res/res/layout/date_picker_header_material.xml b/core/res/res/layout/date_picker_header_material.xml
index 2150341..a4388f6 100644
--- a/core/res/res/layout/date_picker_header_material.xml
+++ b/core/res/res/layout/date_picker_header_material.xml
@@ -16,17 +16,13 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:tools="http://schemas.android.com/tools"
               android:id="@+id/date_picker_header"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:paddingBottom="18dp"
               android:paddingStart="?attr/dialogPreferredPadding"
               android:paddingEnd="?attr/dialogPreferredPadding"
-              android:orientation="vertical"
-              tools:background="@color/accent_material_light"
-              tools:paddingStart="24dp"
-              tools:paddingEnd="24dp">
+              android:orientation="vertical">
 
     <!-- Top padding should stay on this view so that
          the touch target is a bit larger. -->
@@ -35,10 +31,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingTop="16dp"
-        android:textAppearance="@style/TextAppearance.Material.DatePicker.YearLabel"
-        tools:text="2015"
-        tools:textSize="@dimen/date_picker_year_label_size"
-        tools:textColor="@color/white" />
+        android:textAppearance="@style/TextAppearance.Material.DatePicker.YearLabel" />
 
     <TextView
         android:id="@+id/date_picker_header_date"
@@ -47,9 +40,6 @@
         android:textAppearance="@style/TextAppearance.Material.DatePicker.DateLabel"
         android:gravity="start"
         android:maxLines="2"
-        android:ellipsize="none"
-        tools:text="Thu, Sep 30"
-        tools:textSize="@dimen/date_picker_date_label_size"
-        tools:textColor="@color/white" />
+        android:ellipsize="none" />
 
 </LinearLayout>
diff --git a/core/res/res/layout/resolve_grid_item.xml b/core/res/res/layout/resolve_grid_item.xml
index 664b02f..1c496f6 100644
--- a/core/res/res/layout/resolve_grid_item.xml
+++ b/core/res/res/layout/resolve_grid_item.xml
@@ -18,18 +18,31 @@
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:orientation="vertical"
-              android:layout_width="match_parent" android:layout_height="wrap_content"
+              android:layout_width="0dp"
+              android:layout_height="wrap_content"
+              android:layout_weight="1"
               android:minWidth="80dp"
               android:gravity="center"
               android:paddingTop="8dp"
               android:paddingBottom="8dp"
-              android:background="?attr/activatedBackgroundIndicator">
+              android:background="?attr/selectableItemBackgroundBorderless">
 
-    <!-- Activity icon when presenting dialog -->
-    <ImageView android:id="@+id/icon"
-               android:layout_width="48dp"
-               android:layout_height="48dp"
-               android:scaleType="fitCenter" />
+    <FrameLayout android:layout_width="wrap_content"
+                 android:layout_height="wrap_content">
+        <ImageView android:id="@+id/icon"
+                   android:layout_width="48dp"
+                   android:layout_height="48dp"
+                   android:layout_marginLeft="3dp"
+                   android:layout_marginRight="3dp"
+                   android:layout_marginBottom="3dp"
+                   android:scaleType="fitCenter" />
+        <ImageView android:id="@+id/target_badge"
+                   android:layout_width="16dp"
+                   android:layout_height="16dp"
+                   android:layout_gravity="end|bottom"
+                   android:visibility="gone"
+                   android:scaleType="fitCenter" />
+    </FrameLayout>
 
     <!-- Activity name -->
     <TextView android:id="@android:id/text1"
@@ -40,21 +53,23 @@
               android:layout_marginRight="4dp"
               android:textAppearance="?attr/textAppearanceSmall"
               android:textColor="?attr/textColorPrimary"
+              android:textSize="12sp"
               android:fontFamily="sans-serif-condensed"
-              android:gravity="center"
+              android:gravity="top|center_horizontal"
               android:minLines="2"
               android:maxLines="2"
               android:ellipsize="marquee" />
     <!-- Extended activity info to distinguish between duplicate activity names -->
     <TextView android:id="@android:id/text2"
               android:textAppearance="?android:attr/textAppearanceSmall"
+              android:textSize="12sp"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginLeft="4dp"
               android:layout_marginRight="4dp"
               android:minLines="2"
               android:maxLines="2"
-              android:gravity="center"
+              android:gravity="top|center_horizontal"
               android:ellipsize="marquee" />
 </LinearLayout>
 
diff --git a/core/res/res/layout/time_picker_header_material.xml b/core/res/res/layout/time_picker_header_material.xml
index be9e443..3f5e300 100644
--- a/core/res/res/layout/time_picker_header_material.xml
+++ b/core/res/res/layout/time_picker_header_material.xml
@@ -18,13 +18,11 @@
 <!-- This layout is duplicated in land/time_picker_material.xml, so any
      changes made here need to be manually copied over. -->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:tools="http://schemas.android.com/tools"
                 android:id="@+id/time_header"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:orientation="horizontal"
-                android:padding="@dimen/timepicker_separator_padding"
-                tools:background="@color/accent_material_light">
+                android:padding="@dimen/timepicker_separator_padding">
 
     <!-- The hour should always be to the left of the separator,
          regardless of the current locale's layout direction. -->
@@ -37,10 +35,7 @@
         android:textAppearance="@style/TextAppearance.Material.TimePicker.TimeLabel"
         android:singleLine="true"
         android:ellipsize="none"
-        android:gravity="right"
-        tools:text="23"
-        tools:textSize="@dimen/timepicker_time_label_size"
-        tools:textColor="@color/white" />
+        android:gravity="right" />
 
     <TextView
         android:id="@+id/separator"
@@ -50,10 +45,7 @@
         android:layout_marginRight="@dimen/timepicker_separator_padding"
         android:layout_centerInParent="true"
         android:textAppearance="@style/TextAppearance.Material.TimePicker.TimeLabel"
-        android:importantForAccessibility="no"
-        tools:text=":"
-        tools:textSize="@dimen/timepicker_time_label_size"
-        tools:textColor="@color/white" />
+        android:importantForAccessibility="no" />
 
     <!-- The minutes should always be to the left of the separator,
          regardless of the current locale's layout direction. -->
@@ -66,10 +58,7 @@
         android:textAppearance="@style/TextAppearance.Material.TimePicker.TimeLabel"
         android:singleLine="true"
         android:ellipsize="none"
-        android:gravity="left"
-        tools:text="59"
-        tools:textSize="@dimen/timepicker_time_label_size"
-        tools:textColor="@color/white" />
+        android:gravity="left" />
 
     <!-- The layout alignment of this view will switch between toRightOf
          @id/minutes and toLeftOf @id/hours depending on the locale. -->
@@ -90,10 +79,7 @@
             android:paddingTop="@dimen/timepicker_am_top_padding"
             android:textAppearance="@style/TextAppearance.Material.TimePicker.AmPmLabel"
             android:lines="1"
-            android:ellipsize="none"
-            tools:text="AM"
-            tools:textSize="@dimen/timepicker_ampm_label_size"
-            tools:textColor="@color/white" />
+            android:ellipsize="none" />
         <CheckedTextView
             android:id="@+id/pm_label"
             android:layout_width="wrap_content"
@@ -103,9 +89,6 @@
             android:paddingTop="@dimen/timepicker_pm_top_padding"
             android:textAppearance="@style/TextAppearance.Material.TimePicker.AmPmLabel"
             android:lines="1"
-            android:ellipsize="none"
-            tools:text="PM"
-            tools:textSize="@dimen/timepicker_ampm_label_size"
-            tools:textColor="@color/white" />
+            android:ellipsize="none" />
     </LinearLayout>
 </RelativeLayout>
diff --git a/core/res/res/transition/popup_window_enter.xml b/core/res/res/transition/popup_window_enter.xml
index 38c41f0..c4c8dac 100644
--- a/core/res/res/transition/popup_window_enter.xml
+++ b/core/res/res/transition/popup_window_enter.xml
@@ -16,17 +16,14 @@
 
 <transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
                android:transitionOrdering="together">
-    <!-- Start from location of epicenter, move to popup location. -->
-    <transition
-        class="com.android.internal.transition.EpicenterTranslate"
-        android:duration="300" />
-
     <!-- Start from size of epicenter, expand to full width/height. -->
     <transition
-        class="com.android.internal.transition.EpicenterClipReveal"
-        android:centerClipBounds="true"
-        android:duration="300" />
+        class="com.android.internal.transition.EpicenterTranslateClipReveal"
+        android:duration="250" />
 
     <!-- Quickly fade in. -->
-    <fade android:duration="100" />
+    <fade
+        android:duration="100"
+        android:fromAlpha="0.1"
+        android:toAlpha="1.0" />
 </transitionSet>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index ad596db..204e43e 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Af"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Verkieslik Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Verkieslik sellulêr"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Stel op"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Haal uit"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Verken"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> ontbreek"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Sit hierdie toestel weer in"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Skuif tans <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Skuif tans data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Skuif voltooi"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data na <xliff:g id="NAME">%s</xliff:g> geskuif"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Kon nie data skuif nie"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data oor op oorspronklike ligging"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Geen passende aktiwiteite gevind nie."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Roeteer media-uitvoer"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Laat \'n program toe om media-uitvoere na ander eksterne toestelle te roeteer."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Vra ontsluitpatroon voordat jy ontspeld"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Vra wagwoord voordat jy ontspeld"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Deur jou administrateur geïnstalleer"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Opgedateer deur jou administrateur"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Deur jou administrateur uitgevee"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Om batterylewe te help verbeter, verminder batterybespaarder jou toestel se werkverrigting en beperk vibrasie, liggingdienste en die meeste agtergronddata. E-pos, boodskappe en ander programme wat op sinkronisering staatmaak, sal dalk nie opdateer tensy jy hulle oopmaak nie.\n\nBatterybespaarder skakel outomaties af wanneer jou toestel besig is om te laai."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Vou in"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Moenie steur nie"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Staantyd"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Weekaande"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Naweke"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Gedemp deur <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Daar is \'n interne probleem met jou toestel en dit sal dalk onstabiel wees totdat jy \'n fabriekterugstelling doen."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Daar is \'n interne probleem met jou toestel. Kontak jou vervaardiger vir besonderhede."</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 827d662..f993bba 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ጠፍቷል"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi ተመርጧል"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"የተንቀሳቃሽ ስልክ ተመርጧል"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"አዋቅር"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"አስወጣ"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"ያስሱ"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g>ን በመውሰድ ላይ"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"ውሂብን በመውሰድ ላይ"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"መውሰድ ተጠናቅቋል"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"ውሂብ ወደ <xliff:g id="NAME">%s</xliff:g> ተወስዷል"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"ውሂብ መውሰድ አልተቻለም"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"ውሂብ በመጀመሪያው አካባቢ ላይ ተትቷል"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"ምንም ተመሳሳይ እንቅስቃሴዎች አልተገኙም።"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"የሚዲያ ውፅአት መንገድ"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"አንድ መተግበሪያ የሚዲያ ውፅአትን ወደ ሌላ ውጫዊ መሳሪያ እንዲመራ ይፈቅድለታል።"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"በአስተዳዳሪዎ ተዘምኗል"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"በእርስዎ አስተዳዳሪ ተሰርዟል"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"የባትሪ ዕድሜን ለማሻሻል ማገዝ እንዲቻል፣ ኢሜይል፣ መልዕክት አላላክ እና ሌሎች በማመሳሰል ላይ የሚመረኮዙ መተግበሪያዎች እርስዎ ካልከፈቱዋቸው በቀር አይዘምኑም።\n\nየባትሪ ኃይል ቆጣቢ የእርስዎ መሣሪያ ኃይል በሚሞላበት ጊዜ በራስ-ሰር ይጠፋል።"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"ሰብስብ"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"አትረብሽ"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"የማይገኝበት ጊዜ"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"የሳምንቱ ቀኖች ምሽቶች"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"የሳምንት መጨረሻ ቀኖች"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"ድምጽ በ<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ተዘግቷል"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"መሣሪያዎ ላይ የውስጣዊ ችግር አለ፣ የፋብሪካ ውሂብ ዳግም እስኪያስጀምሩት ድረስ ላይረጋጋ ይችላል።"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"መሣሪያዎ ላይ የውስጣዊ ችግር አለ። ዝርዝሮችን ለማግኘት አምራችዎን ያነጋግሩ።"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 9b3672a..1218957 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -133,6 +133,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"إيقاف"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"‏شبكة Wi-Fi مُفضّلة"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"شبكة الجوّال مُفضّلة"</string>
@@ -1106,22 +1107,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"الإعداد"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"إلغاء"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"استكشاف"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"جارٍ نقل <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"جارٍ نقل البيانات"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"اكتمل النقل"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"تم نقل البيانات إلى <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"تعذر نقل البيانات"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"تم ترك البيانات في الموقع الأصلي"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"لم يتم العثور على أي أنشطة متطابقة."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"توجيه إخراج الوسائط"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"للسماح للتطبيق بتوجيه إخراج الوسائط إلى أجهزة خارجية أخرى."</string>
@@ -1502,6 +1495,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"تم التحديث بواسطة المشرف"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"تم حذف الحزمة عن طريق المشرف"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"للمساعدة في تحسين عمر البطارية، يساعد موفر البطارية في تقليل أداء الجهاز ويفرض قيدًا على الاهتزاز وخدمات الموقع ومعظم بيانات الخلفية. قد لا يتم تحديث البريد الإلكتروني والمراسلة والتطبيقات الأخرى التي تعتمد على المزامنة ما لم تفتحها.\n\nيتم إيقاف موفر البطارية تلقائيًا أثناء شحن الجهاز."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1542,8 +1536,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"تصغير"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"الرجاء عدم الإزعاج"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"التعطل"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"ليالي الأسبوع"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"نهايات الأسبوع"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"تم كتم الصوت بواسطة <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"حدثت مشكلة داخلية في جهازك، وقد لا يستقر وضعه حتى إجراء إعادة الضبط بحسب بيانات المصنع."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"حدثت مشكلة داخلية في جهازك. يمكنك الاتصال بالمصنِّع للحصول على تفاصيل."</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index a7a4742..402f67f 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Изключено"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Предпочита се Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Предпочита се клетъчна мрежа"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Настройване"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Изваждане"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Изследване"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> се премества"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Данните се преместват"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Преместването завърши"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Данните са преместени в/ъв <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Данните не бяха преместени"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Данните останаха в първоначалното местоположение"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Не бяха намерени съответстващи дейности."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Насочване на изходящата мултимедия"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Разрешава на приложението да насочва изходящата мултимедия към други външни устройства."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Актуализирано от администратора ви"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Изтрито от администратора ви"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"С цел удължаване на живота на батерията режимът за запазването й намалява ефективността на устройството ви и ограничава вибрирането, услугите за местоположение и повечето данни на заден план. Приложенията за електронна поща, съобщения и др., които разчитат на синхронизиране, може да не се актуализират, освен ако не ги отворите.\n\nРежимът за запазване на батерията се изключва автоматично, когато устройството ви се зарежда."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Свиване"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Не безпокойте"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Почивка"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Делничните вечери"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Събота и неделя"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Заглушено от <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Възникна вътрешен проблем с устройството ви. То може да е нестабилно, докато не възстановите фабричните настройки."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Възникна вътрешен проблем с устройството ви. За подробности се свържете с производителя."</string>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index af2eb07..ab988ed 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"বন্ধ আছে"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"পছন্দের Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"পছন্দের মোবাইল নেটওয়ার্ক"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"সেটআপ"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"বের করে নিন"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"ঘুরে দেখুন"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> সরানো হচ্ছে"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"ডেটা সরানো হচ্ছে"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"সরানো সম্পূর্ণ হয়েছে"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"ডেটা <xliff:g id="NAME">%s</xliff:g> এ সরানো হয়েছে"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"ডেটা সরানো যায়নি"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"মূল অবস্থানে ডেটা রাখুন"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"কোনো সমরূপ কার্যকলাপ খুঁজে পাওয়া যায়নি৷"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"মিডিয়া আউটপুট রুট করুন"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"অ্যাপ্লিকেশানটিকে অন্যান্য বহিরাগত ডিভাইসে মিডিয়া আউটপুট রুট করার অনুমতি দেয়৷"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"আপনার প্রশাসক দ্বারা আপডেট করা হয়েছে"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"আপনার প্রশাসক দ্বারা মুছে ফেলা হয়েছে"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ব্যাটরির লাইফ উন্নত করতে সহায়তা করতে, ব্যাটারি সাশ্রয়কারী আপনার ডিভাইসের কার্যসম্পাদনা হ্রাস করে এবং কম্পন, অবস্থান পরিষেবাসমূহ এবং অধিকাংশ ব্যাকগ্রাউন্ড ডেটা সীমিত করে৷ ইমেল, বার্তাপ্রেরণ এবং অন্যান্য অ্যাপ্লিকেশানগুলিকে যেগুলি সিঙ্কের উপর নির্ভর করে সেগুলিকে আপনি না খোলা পর্যন্ত নাও আপডেট হতে পারে৷\n\nআপনার ডিভাইসটিকে যখন চার্জ করা হয় তখন ব্যাটারি সাশ্রয়কারী স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়৷"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"সঙ্কুচিত করুন"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"বিরক্ত করবেন না"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ডাউনটাইম"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"প্রতি সোম-শুক্র রাত"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"সপ্তাহান্ত"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> দ্বারা নিঃশব্দ করা হয়েছে"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"আপনার ডিভাইসে একটি অভ্যন্তরীন সমস্যা হয়েছে, এবং আপনি যতক্ষণ না পর্যন্ত এটিকে ফ্যাক্টরি ডেটা রিসেট করছেন ততক্ষণ এটি ঠিকভাবে কাজ নাও করতে পারে৷"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"আপনার ডিভাইসে একটি অভ্যন্তরীন সমস্যা হয়েছে৷ বিস্তারিত জানার জন্য প্রস্তুতকারকের সাথে যোগাযোগ করুন৷"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 394c520..ae21dec 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desactivades"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Preferència per la Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Preferència per les dades mòbils"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configura"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Expulsa"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explora"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"No es detecta <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Torna a inserir el dispositiu"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"S\'està desplaçant l\'aplicació <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"S\'estan desplaçant dades"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"S\'ha completat el desplaçament"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"S\'han desplaçat dades a <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"No s\'han pogut desplaçar dades"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"S\'han deixat dades a la ubicació original"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"No s\'ha trobat cap activitat coincident."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Indicació de ruta de sortida de contingut multimèdia"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permet que una aplicació indiqui la ruta de sortida de contingut multimèdia a altres dispositius externs."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Sol·licita el patró de desbloqueig per anul·lar la fixació"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Demana la contrasenya abans d\'anul·lar la fixació"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"L\'administrador ho ha instal·lat"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"L\'administrador l\'ha actualitzat"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"L\'administrador ho ha suprimit"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Per allargar la durada de la bateria, l\'estalvi de bateria redueix el rendiment del dispositiu i limita l\'ús de la vibració, dels serveis d\'ubicació i de la majoria de les dades en segon pla. És possible que el correu electrònic, la missatgeria i altres aplicacions que depenen de la sincronització no s\'actualitzin fins que els obris.\n\nL\'estalvi de bateria es desactiva de manera automàtica quan el dispositiu es posa a carregar."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Replega"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"No molesteu"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Temps d\'inactivitat"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Nits entre setmana"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Caps de setmana"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Silenciat per <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"S\'ha produït un error intern al dispositiu i és possible que funcioni de manera inestable fins que restableixis les dades de fàbrica."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"S\'ha produït un error intern al dispositiu. Contacta amb el fabricant del dispositiu per obtenir més informació."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 90d0ba2..3578830 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Vypnuto"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Preferována síť W-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Preferována mobilní síť"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Nastavení"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Odpojit"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Prozkoumat"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> chybí"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Znovu toto zařízení vložte"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Přesouvání aplikace <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Probíhá přesun dat"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Přesunutí bylo dokončeno"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data byla přesunuta do úložiště <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Data nelze přesunout"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data zůstala v původním umístění"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nebyly nalezeny žádné odpovídající aktivity."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Směrování výstupu médií"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Umožňuje aplikaci směrovat výstup médií do dalších externích zařízení."</string>
@@ -1484,6 +1477,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Před uvolněním požádat o bezpečnostní gesto"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Před uvolněním požádat o heslo"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Nainstalováno administrátorem"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Aktualizováno administrátorem"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Smazáno administrátorem"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Spořič baterie za účelem prodloužení výdrže baterie snižuje výkon zařízení a omezuje vibrace, služby určování polohy a většinu dat na pozadí. E-mail, aplikace pro zasílání zpráv a další aplikace, které používají synchronizaci, se nemusejí aktualizovat, dokud je neotevřete.\n\nPři nabíjení zařízení se spořič baterie automaticky vypne."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Sbalit"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Nerušit"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Období klidu"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noci pracovních dnů"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Víkendy"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Ignorováno stranou <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"V zařízení došlo k internímu problému. Dokud neprovedete obnovení továrních dat, může být nestabilní."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"V zařízení došlo k internímu problému. Další informace vám sdělí výrobce."</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 7ec459f..a546772 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Fra"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"WiFi-netværk er foretrukket"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobilnetværk er foretrukket"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Konfigurer"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Skub ud"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Udforsk"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> er ikke til stede"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Sæt denne enhed i igen"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Flytter <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Flytter data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Flytningen er gennemført"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data flyttet til <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Dine data kunne ikke flyttes"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Dine data er stadig på den oprindelige placering"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Der blev ikke fundet nogen matchende aktiviteter."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Viderefør medieoutput"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Tillader, at en applikation viderefører medieoutput til andre eksterne enheder."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Bed om oplåsningsmønster ved deaktivering"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Bed om adgangskode inden frigørelse"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installeret af din administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Opdateret af administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Slettet af din administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Batterisparefunktionen hjælper med at forlænge batteriets levetid ved at reducere enhedens ydeevne og begrænse vibration, placeringstjenester og det meste baggrundsdata. E-mail, beskedfunktioner og andre apps, der benytter synkronisering, opdateres muligvis ikke, medmindre du åbner dem.\n\nBatterisparefunktionen slukker automatisk, når enheden oplader."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Skjul"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Vil ikke forstyrres"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Nedetid"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Hverdagsaftener"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Weekender"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Lyden blev afbrudt af <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Der er et internt problem med enheden, og den vil muligvis være ustabil, indtil du gendanner fabriksdataene."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Der er et internt problem med enheden. Kontakt producenten for at få yderligere oplysninger."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 4bd91f2..a4dd9a4 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Aus"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"WLAN bevorzugt"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobilfunk bevorzugt"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Einrichten"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Auswerfen"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Entdecken"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Daten werden verschoben"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Verschieben abgeschlossen"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Daten auf <xliff:g id="NAME">%s</xliff:g> verschoben"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Fehler bei Datenverschiebung"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Daten verbleiben am ursprünglichen Speicherort"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Keine passenden Aktivitäten gefunden"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Medienausgabe umleiten"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ermöglicht der App, die Medienausgabe auf andere externe Geräte umzuleiten."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Vor dem Beenden nach Entsperrungsmuster fragen"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Vor dem Beenden nach Passwort fragen"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Von Ihrem Administrator installiert"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Von Ihrem Administrator aktualisiert"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Von Ihrem Administrator gelöscht"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Der Energiesparmodus schont den Akku, indem er die Leistung des Geräts reduziert und die Vibrationsfunktion sowie die meisten Hintergrunddatenaktivitäten einschränkt. E-Mail, SMS/MMS und andere Apps, die auf Ihrem Gerät synchronisiert werden, werden möglicherweise erst nach dem Öffnen aktualisiert.\n\nDer Energiesparmodus wird automatisch deaktiviert, wenn Ihr Gerät aufgeladen wird."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Minimieren"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Nicht stören"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Ruhezeit"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Wochentags abends"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Wochenende"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Stummgeschaltet durch <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Es liegt ein internes Problem mit Ihrem Gerät vor. Möglicherweise verhält es sich instabil, bis Sie es auf die Werkseinstellungen zurücksetzen."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Es liegt ein internes Problem mit Ihrem Gerät vor. Bitte wenden Sie sich diesbezüglich an den Hersteller."</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 836ed89..c15f379 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Ανενεργό"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Προτίμηση Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Προτίμηση δικτύου κινητής τηλεφωνίας"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Ρύθμιση"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Εξαγωγή"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Εξερεύνηση"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Μετακίνηση <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Μετακίνηση δεδομένων"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Η μετακίνηση ολοκληρώθηκε"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Τα δεδομένα μεταφέρθηκαν σε <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Αδύνατη μετακίνηση των δεδομένων"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Δεδομένα που απέμειναν στην αρχική τοποθεσία"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Δεν βρέθηκαν δραστηριότητες που να συμφωνούν με τα κριτήρια."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Διαγραφή διαδρομής δεδομένων εξόδου μέσων"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Επιτρέπει σε μια εφαρμογή τη διαγραφή διαδρομής δεδομένων εξόδου μέσων σε άλλες εξωτερικές συσκευές."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Ενημερώθηκε από το διαχειριστή σας"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Διαγράφηκε από το διαχειριστή σας"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Προκειμένου να βελτιώσει τη διάρκεια ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας μειώνει την απόδοση της συσκευής σας και περιορίζει λειτουργίες όπως η δόνηση, οι υπηρεσίες τοποθεσίας και τα περισσότερα δεδομένα παρασκηνίου. Το ηλεκτρονικό ταχυδρομείο, η ανταλλαγή μηνυμάτων και άλλες εφαρμογές που βασίζονται στο συγχρονισμό ενδέχεται να μην ενημερώνονται έως ότου τις ανοίξετε.\n\nΗ Εξοικονόμηση μπαταρίας απενεργοποιείται αυτόματα όταν η συσκευή σας φορτίζει."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Σύμπτυξη"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Μην ενοχλείτε"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Διακοπή λειτουργίας"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Καθημερινές"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Σαββατοκύριακα"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Σίγαση από <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Υπάρχει ένα εσωτερικό πρόβλημα με τη συσκευή σας και ενδέχεται να είναι ασταθής μέχρι την επαναφορά των εργοστασιακών ρυθμίσεων."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Υπάρχει ένα εσωτερικό πρόβλημα με τη συσκευή σας. Επικοινωνήστε με τον κατασκευαστή σας για λεπτομέρειες."</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 031f165..3b50363 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Off"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi preferred"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobile preferred"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Set up"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Eject"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explore"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> missing"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reinsert this device"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Moving <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Moving data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Move complete"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data moved to <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Couldn\'t move data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data left at original location"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"No matching activities found."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Route media output"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Allows an application to route media output to other external devices."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Ask for unlock pattern before unpinning"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Ask for password before unpinning"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installed by your administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Updated by your administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Deleted by your administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,9 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Collapse"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Do not disturb"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Downtime"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Weeknights"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Weekends"</string>
+    <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Weeknight"</string>
+    <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Weekend"</string>
+    <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Event"</string>
     <string name="muted_by" msgid="6147073845094180001">"Muted by <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"There\'s an internal problem with your device, and it may be unstable until you factory data reset."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"There\'s an internal problem with your device. Contact your manufacturer for details."</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 031f165..3b50363 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Off"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi preferred"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobile preferred"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Set up"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Eject"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explore"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> missing"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reinsert this device"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Moving <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Moving data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Move complete"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data moved to <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Couldn\'t move data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data left at original location"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"No matching activities found."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Route media output"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Allows an application to route media output to other external devices."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Ask for unlock pattern before unpinning"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Ask for password before unpinning"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installed by your administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Updated by your administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Deleted by your administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,9 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Collapse"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Do not disturb"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Downtime"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Weeknights"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Weekends"</string>
+    <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Weeknight"</string>
+    <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Weekend"</string>
+    <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Event"</string>
     <string name="muted_by" msgid="6147073845094180001">"Muted by <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"There\'s an internal problem with your device, and it may be unstable until you factory data reset."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"There\'s an internal problem with your device. Contact your manufacturer for details."</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 031f165..3b50363 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Off"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi preferred"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobile preferred"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Set up"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Eject"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explore"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> missing"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reinsert this device"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Moving <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Moving data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Move complete"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data moved to <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Couldn\'t move data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data left at original location"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"No matching activities found."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Route media output"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Allows an application to route media output to other external devices."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Ask for unlock pattern before unpinning"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Ask for password before unpinning"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installed by your administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Updated by your administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Deleted by your administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,9 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Collapse"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Do not disturb"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Downtime"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Weeknights"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Weekends"</string>
+    <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Weeknight"</string>
+    <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Weekend"</string>
+    <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Event"</string>
     <string name="muted_by" msgid="6147073845094180001">"Muted by <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"There\'s an internal problem with your device, and it may be unstable until you factory data reset."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"There\'s an internal problem with your device. Contact your manufacturer for details."</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 656abbf..c1ea0df 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desactivada"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Red Wi-Fi preferida"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Red móvil preferida"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configuración"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Expulsar"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explorar"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"No se encuentra dispositivo <xliff:g id="NAME">%s</xliff:g>."</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Volver a insertar dispositivo"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Transfiriendo la aplicación <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Transfiriendo los datos"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Transferencia completa"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Se transfirieron los datos a <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"No se pudieron transferir datos."</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Los datos quedaron en la ubicación original"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"No se encontraron actividades coincidentes."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Dirigir salida de medios"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que la aplicación dirija salidas de medios a otros dispositivos externos."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Solicitar patrón de desbloqueo para quitar fijación"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Solicitar contraseña para quitar fijación"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Lo instaló el administrador."</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizado por el administrador"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Lo eliminó el administrador."</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Para ayudar a mejorar la duración de la batería, el ahorro de batería reduce el rendimiento del dispositivo y limita la vibración, los servicios de ubicación y la mayoría de los datos en segundo plano. Es posible que el correo electrónico, la mensajería y otras aplicaciones que se basan en la sincronización no puedan actualizarse, a menos que los abras.\n\nEl ahorro de batería se desactiva de forma automática cuando el dispositivo se está cargando."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Contraer"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"No molestar"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Tiempo de inactividad"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noches entre semana"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Fines de semana"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Silenciados por <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Existe un problema interno con el dispositivo, de modo que el dispositivo puede estar inestable hasta que restablezcas la configuración de fábrica."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Existe un problema interno con el dispositivo. Comunícate con el fabricante para obtener más información."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index fe8c676..4127655 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desactivado"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Preferir Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Preferir datos móviles"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configurar"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Expulsar"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explorar"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Falta <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Volver a insertar dispositivo"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Moviendo <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Moviendo datos"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Datos movidos"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Datos movidos a <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"No se pudieron mover los datos"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Han quedado datos en la ubicación original"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"No se ha encontrado ninguna actividad coincidente."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Dirigir salida de medio"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que la aplicación dirija salidas de medios a otros dispositivos externos."</string>
@@ -1140,7 +1133,7 @@
     <string name="submit" msgid="1602335572089911941">"Enviar"</string>
     <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Se ha habilitado el modo coche"</string>
     <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Toca para salir del modo coche."</string>
-    <string name="tethered_notification_title" msgid="3146694234398202601">"Anclaje a red/Zona Wi-Fi activo"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"Compartir Internet/Zona Wi-Fi activado"</string>
     <string name="tethered_notification_message" msgid="6857031760103062982">"Toca para configurar"</string>
     <string name="back_button_label" msgid="2300470004503343439">"Atrás"</string>
     <string name="next_button_label" msgid="1080555104677992408">"Siguiente"</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Solicitar patrón de desbloqueo para desactivar"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Solicitar contraseña para desactivar"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Instalado por tu administrador"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizado por tu administrador"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminado por tu administrador"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Para ayudar a mejorar la duración de la batería, la función de ahorro de energía reduce el rendimiento del dispositivo y limita la vibración, los servicios de ubicación y la mayor parte de la transmisión de datos en segundo plano. Es posible que las aplicaciones que se sincronizan, como las de correo y mensajes, no se actualicen a menos que las abras.\n\nLa función de ahorro de energía se desactiva automáticamente cuando el dispositivo se está cargando."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Contraer"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"No molestar"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Tiempo de inactividad"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noches entre semana"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Fines de semana"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Silenciado por <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Se ha producido un problema interno en el dispositivo y es posible que este no sea estable hasta que restablezcas los datos de fábrica."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Se ha producido un problema interno en el dispositivo. Ponte en contacto con el fabricante para obtener más información."</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index 7259886..6b82b57 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Väljas"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"WiFi eelistusega"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobiilside eelistusega"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Seadistamine"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Eemaldamine"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Avastamine"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Üksust <xliff:g id="NAME">%s</xliff:g> pole"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Sisestage see seade uuesti"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Seadme <xliff:g id="NAME">%s</xliff:g> teisaldamine"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Andmete teisaldamine"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Teisaldamine lõpetati"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Andmed teisaldati üksusesse <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Andmeid ei saanud teisaldada"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Andmed on algses asukohas alles"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Sobivat tegevust ei leitud"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Meediaväljundi teekonna koostamine"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Võimaldab rakendusel koostada teekonna meediaväljundist teistesse välistesse seadmetesse."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Enne vabastamist küsi avamismustrit"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Enne vabastamist küsi parooli"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installis teie administraator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Värskendas administraator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Kustutas teie administraator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Aku kestuse parandamiseks vähendab akusäästja teie seadme toimivust ning piirab vibratsiooni, asukohateenuseid ja suuremat osa taustaandmetest. E-posti, sõnumsidet ja muid sünkroonimisele tuginevaid rakendusi võidakse värskendada ainult siis, kui te need avate.\n\nAkusäästja lülitatakse seadme laadimise ajal automaatselt välja."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Ahendamine"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Mitte segada"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Puhkeaeg"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Argiõhtud"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Nädalavahetused"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> vaigistas"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Seadmes ilmnes sisemine probleem ja seade võib olla ebastabiilne seni, kuni lähtestate seadme tehase andmetele."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Seadmes ilmnes sisemine probleem. Üksikasjaliku teabe saamiseks võtke ühendust tootjaga."</string>
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml
index f12151c..7bbe988 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu-rES/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desaktibatuta"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi sarea hobesten da"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Sare mugikorra hobesten da"</string>
@@ -275,7 +276,7 @@
     <string name="permlab_getTasks" msgid="6466095396623933906">"Eskuratu abian diren aplikazioak"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"Unean edo duela gutxi exekutatutako zereginei buruzko informazioa lortzeko baimena ematen die aplikazioei. Horrela, aplikazioak gailuan erabiltzen ari diren aplikazioei buruzko informazioa ezagut dezake."</string>
     <string name="permlab_manageProfileAndDeviceOwners" msgid="5979288447973722097">"Kudeatu profilen eta gailuen jabeak"</string>
-    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"Profilaren eta gailuaren jabeak zehazteko baimena ematen die aplikazioei"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"Profilaren eta gailuaren jabeak zehazteko baimena ematen die aplikazioei."</string>
     <string name="permlab_reorderTasks" msgid="2018575526934422779">"Ordenatu abian diren aplikazioak"</string>
     <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Zereginak aurreko eta atzeko planora eramateko baimena ematen die aplikazioei. Aplikazioak zuk ezer egin gabe egin dezake hori."</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"gaitu auto modua"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Konfigurazioa"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Atera"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Arakatu"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Ez dago <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Sartu gailua berriro"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> mugitzen"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Datuak mugitzen"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Mugitu dira datuak"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Mugitu dira datuak <xliff:g id="NAME">%s</xliff:g> gailura"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Ezin izan dira mugitu datuak"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Jatorrizko tokian utzi dira datuak"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Ez da bat datorren jarduerarik aurkitu."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Multimedia-irteera bideratzea"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Multimedia elementuak kanpoko gailuetara bideratzeko baimena ematen die aplikazioei."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Eskatu desblokeatzeko eredua aingura kendu aurretik"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Eskatu pasahitza aingura kendu aurretik"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Administratzaileak instalatu du"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Administratzaileak eguneratu du"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Administratzaileak ezabatu du"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Bateriak gehiago iraun dezan, bateria-aurrezleak gailuaren funtzionamendua, dardara,  kokapen-zerbitzuak eta atzeko planoko datuen erabilera gehiena mugatzen ditu. Posta elektronikoa, mezuak eta sinkronizatzen diren gainerako zerbitzuak ez dira eguneratuko ireki ezean.\n\nGailua kargatzen ezarri orduko desaktibatzen da bateria-aurrezlea."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Tolestu"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ez molestatu"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Jarduerarik gabeko denbora"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Lanegunetako gauak"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Asteburuak"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Audioa desaktibatu da (<xliff:g id="THIRD_PARTY">%1$s</xliff:g>)"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Barneko arazo bat dago zure gailuan eta agian ezegonkor egongo da jatorrizko datuak berrezartzen dituzun arte."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Barneko arazo bat dago zure gailuan. Xehetasunak jakiteko, jarri fabrikatzailearekin harremanetan."</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 2808a78..0204692 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"خاموش"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"‏Wi-Fi ترجیحی"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"شبکه سلولی ترجیحی"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"تنظیم"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"بیرون راندن"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"کاوش"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"در حال انتقال <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"در حال انتقال اطلاعات"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"انتقال کامل شد"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"اطلاعات به <xliff:g id="NAME">%s</xliff:g> منتقل شد"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"اطلاعات منتقل نشدند"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"اطلاعات در مکان اصلی باقی ماندند"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"فعالیتی مطابق با این مورد یافت نشد."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"تعیین مسیر خروجی رسانه"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"به یک برنامه اجازه می‌دهد خروجی رسانه را به دستگاه‌های خارجی دیگر تعیین مسیر کند."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"توسط سرپرست شما به‌روزرسانی شد"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"توسط سرپرستتان حذف شد"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"برای کمک به بهبود ماندگاری باتری، ابزار صرفه‌جویی در مصرف باتری عملکرد دستگاهتان را کاهش می‌دهد و لرزش، سرویس‌های مبتنی بر مکان، و دسترسی به اکثر داده‌ها در پس‌زمینه را محدود می‌کند. ایمیل، پیام‌رسانی و برنامه‌های دیگری که به همگام‌سازی متکی هستند، تا زمانی که آن‌ها را باز نکنید نمی‌توانند به‌روز شوند.\n\nابزار صرفه‌جویی در مصرف باتری به صورت خودکار در هنگام شارژ شدن دستگاه خاموش می‌شود."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"کوچک کردن"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"مزاحم نشوید"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"فرویش"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"شب‌های آخر هفته"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"آخر هفته‌ها"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> آن را بی‌صدا کرد"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"دستگاهتان یک مشکل داخلی دارد، و ممکن است تا زمانی که بازنشانی به داده کارخانه انجام نگیرد، بی‌ثبات بماند."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"دستگاهتان یک مشکل داخلی دارد. برای جزئیات آن با سازنده‌تان تماس بگیرید."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 1d71bd1..a7c4f3f 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Ei käytössä"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi ensisijainen"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Matkapuhelinverkko ensisijainen"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Asennus"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Poista"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Tutustu"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> puuttuu."</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Liitä tämä laite uudelleen."</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Siirretään <xliff:g id="NAME">%s</xliff:g>."</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Siirretään tietoja."</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Siirto on valmis."</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Tiedot on siirretty kohteeseen <xliff:g id="NAME">%s</xliff:g>."</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Tietojen siirto epäonnistui."</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Tietoja jäi alkuperäiseen paikkaan."</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Osuvia toimintoja ei löytynyt."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Median reititys"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Antaa sovelluksen reitittää mediaa muihin ulkoisiin laitteisiin."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Järjestelmänvalvojasi on päivittänyt paketin."</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Järjestelmänvalvoja on poistanut paketin."</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Jos haluat parantaa akun kestoa, virransäästö vähentää laitteesi suorituskykyä ja rajoittaa värinää, sijaintipalveluita ja useimpia taustatietoja. Sähköposti, viestit ja muut synkronointiin perustuvat sovellukset eivät välttämättä päivity, ellet avaa niitä.\n\nVirransäästö poistuu käytöstä automaattisesti, kun laitteesi latautuu."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Kutista"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Älä häiritse"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Vapaalla"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Arki-illat"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Viikonloput"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Mykistänyt <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Laitteellasi on sisäinen ongelma, joka aiheuttaa epävakautta. Voit korjata tilanteen palauttamalla tehdasasetukset."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Laitteesi yhdistäminen ei onnistu sisäisen virheen takia. Saat lisätietoja valmistajalta."</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 2b81a18..c89d989 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Désactivé"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Réseau Wi-Fi de préférence"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Réseau cellulaire de préférence"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configuration"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Éjecter"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Découvrir"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Mémoire de stockage <xliff:g id="NAME">%s</xliff:g> manquante"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Réinsérez le dispositif"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Déplacement de <xliff:g id="NAME">%s</xliff:g> en cours..."</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Déplacement des données..."</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Déplacement terminé"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Données déplacées vers <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Imposs. de déplacer les données"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Les données sont restées à l\'emplacement d\'origine"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Aucune activité correspondante trouvée."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Diriger la sortie multimédia"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permet à une application de diriger la sortie multimédia vers d\'autres appareils externes."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Demander le schéma de déverrouillage avant d\'annuler l\'épinglage"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Demander le mot de passe avant d\'annuler l\'épinglage"</string>
     <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 pile, la fonction d\'économie d\'énergie réduit les performances de votre appareil et limite la vibration, les services de localisation ainsi que la plupart des données en arrière-plan. Les applications Courriel, Messages et d\'autres qui reposent sur la synchronisation ne peuvent pas se mettre à jour, sauf si vous les ouvrez. \n\n L\'économiseur d\'énergie se désactive automatiquement lorsque votre appareil est en charge."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Réduire"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ne pas déranger"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Temps d\'arrêt"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Les soirs de semaine"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Les fins de semaine"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Mis en sourdine par <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Un problème interne est survenu avec votre appareil. Il se peut qu\'il soit instable jusqu\'à ce que vous le réinitialisiez à sa configuration d\'usine."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Un problème interne est survenu avec votre appareil. Communiquez avec le fabricant pour obtenir plus de détails."</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 55c4f5d..9cc881b 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Désactivé"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi de préférence"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobile de préférence"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configurer"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Éjecter"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Parcourir"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Mémoire de stockage \"<xliff:g id="NAME">%s</xliff:g>\" manquante"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Réinsérez cette mémoire."</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Transfert de l\'application <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Déplacement des données en cours"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Transfert terminé"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Les données ont bien été transférées sur la mémoire de stockage \"<xliff:g id="NAME">%s</xliff:g>\""</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Impossible de transférer données"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Les données sont restées à l\'emplacement d\'origine"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Aucune activité correspondante trouvée."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Diriger la sortie multimédia"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permet à une application de diriger la sortie multimédia vers d\'autres appareils externes."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Demander le schéma de déverrouillage avant d\'annuler l\'épinglage"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Demander le mot de passe avant d\'annuler l\'épinglage"</string>
     <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>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Réduire"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ne pas déranger"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Temps d\'arrêt"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Soirs de semaine"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Week-ends"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Son coupé par : <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Un problème interne lié à votre appareil est survenu. Ce dernier risque d\'être instable jusqu\'à ce que vous rétablissiez la configuration d\'usine."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Un problème interne lié à votre appareil est survenu. Veuillez contacter le fabricant pour en savoir plus."</string>
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml
index c2c67bc..9fa0aae 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl-rES/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desactivado"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wifi preferida"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Móbil preferido"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configuración"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Expulsar"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explorar"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Falta <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Volve inserir o dispositivo"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Migrando <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Migrando datos"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Migración completa"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Migráronse os datos a <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Non se puideron migrar os datos"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Quedan datos na localización orixinal"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Non se atoparon actividades que coincidan."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Dirixir saída multimedia"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite a unha aplicación dirixir a saída multimedia a outros dispositivos externos."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Solicitar un padrón de desbloqueo antes de soltar a pantalla"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Solicitar un contrasinal antes de soltar a pantalla"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Instalado polo administrador"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizado polo administrador"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminado polo administrador"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Para axudar a mellorar a duración da batería, a función aforro de batería reduce o rendemento do teu dispositivo e limita a vibración, os servizos de localización e a maioría dos datos en segundo plano. É posible que o correo electrónico, as mensaxes e outras aplicacións que dependen da sincronización non se actualicen a menos que os abras. \n\nA función aforro de batería desactívase automaticamente cando pos a cargar o teu dispositivo."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Contraer"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Non molestar"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Tempo de inactividade"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noites pola semana"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Fins de semana"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Silenciado por <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Produciuse un erro interno no teu dispositivo e quizais funcione de maneira inestable ata o restablecemento dos datos de fábrica."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Produciuse un erro interno co teu dispositivo. Contacta co teu fabricante para obter máis información."</string>
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml
index 2a3df74..5e9e6be 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu-rIN/strings.xml
@@ -274,10 +274,8 @@
     <string name="permdesc_receiveWapPush" msgid="748232190220583385">"એપ્લિકેશનને WAP સંદેશા પ્રાપ્ત કરવાની અને તેના પર પ્રક્રિયા કરવાની મંજૂરી આપે છે. આ પરવાનગીમાં તમને દર્શાવ્યા વિના તમને મોકલેલ સંદેશાઓનું નિરીક્ષણ કરવાની અને કાઢી નાખવાની ક્ષમતાનો સમાવેશ થાય છે."</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"ચાલુ એપ્લિકેશન્સ પુનઃપ્રાપ્ત કરો"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"એપ્લિકેશનને વર્તમાનમાં અને તાજેતરમાં ચાલી રહેલ કાર્યો વિશેની વિગતવાર માહિતી પુનઃપ્રાપ્ત કરવાની મંજૂરી આપે છે. આ એપ્લિકેશનને ઉપકરણ પર કઈ એપ્લિકેશન્સનો ઉપયોગ થાય છે તેના વિશેની માહિતી શોધવાની મંજૂરી આપી શકે છે."</string>
-    <!-- no translation found for permlab_manageProfileAndDeviceOwners (5979288447973722097) -->
-    <skip />
-    <!-- no translation found for permdesc_manageProfileAndDeviceOwners (106894851498657169) -->
-    <skip />
+    <string name="permlab_manageProfileAndDeviceOwners" msgid="5979288447973722097">"પ્રોફાઇલ અને ઉપકરણ માલિકોને સંચાલિત કરો"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"એપ્લિકેશન્સને પ્રોફાઇલ માલિકો અને ઉપકરણ માલિકો સેટ કરવાની મંજૂરી આપે છે."</string>
     <string name="permlab_reorderTasks" msgid="2018575526934422779">"ચાલુ એપ્લિકેશન્સને ફરી ગોઠવો"</string>
     <string name="permdesc_reorderTasks" msgid="7734217754877439351">"એપ્લિકેશનને અગ્રભૂમિ અને પૃષ્ટભૂમિમાં કાર્યો ખસેડવાની મંજૂરી આપે છે. તમારા ઇનપુટ વિના એપ્લિકેશન આ કરી શકે છે."</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"કાર મોડ સક્ષમ કરો"</string>
@@ -1080,6 +1078,22 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"સેટઅપ"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"બહાર કાઢો"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"અન્વેષણ કરો"</string>
+    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
+    <skip />
+    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
+    <skip />
+    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
+    <skip />
+    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
+    <skip />
+    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
+    <skip />
+    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
+    <skip />
+    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
+    <skip />
+    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
+    <skip />
     <string name="activity_list_empty" msgid="1675388330786841066">"કોઈ મેળ ખાતી પ્રવૃત્તિઓ મળી નથી."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"મીડિયા આઉટપુટ રૂટ કરો"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"એપ્લિકેશનને અન્ય બાહ્ય ઉપકરણો પર મીડિયા આઉટપુટને રૂટ કરવની મંજૂરી આપે છે."</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 5d954e2..8fe28a7 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"बंद"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"वाई-फ़ाई को प्राथमिकता"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"सेल्‍युलर को प्राथमिकता"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"सेट करें"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"निकालें"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"एक्सप्लोर करें"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> को ले जाया जा रहा है"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"डेटा ले जाया जा रहा है"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ले जाना पूर्ण हुआ"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"डेटा को <xliff:g id="NAME">%s</xliff:g> पर ले जाया गया"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"डेटा नहीं ले जाया जा सका"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"डेटा मूल स्‍थान पर छूट गया है"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"कोई मिलती-जुलती गतिविधि नहीं मिली."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"मीडिया आउटपुट को रूट करें"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"ऐप्स  को मीडिया आउटपुट को अन्य बाहरी डिवाइस पर रूट करने देता है."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"आपके नियंत्रक द्वारा अपडेट किया गया"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"आपके नियंत्रक द्वारा हटाया गया"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"बैटरी जीवन काल को बेहतर बनाने में सहायता के लिए, बैटरी सेवर आपके डिवाइस के प्रदर्शन को कम कर देता है और कंपन, स्‍थान सेवाओं और अधिकांश पृष्‍ठभूमि डेटा को सीमित कर देता है. हो सकता है कि ईमेल, संदेश सेवा तथा समन्‍वयन पर आधारित अन्‍य ऐप्‍स तब तक ना खुलें जब तक कि आप उन्‍हें नहीं खोलते.\n\nजब आपका डिवाइस चार्ज हो रहा होता है तो बैटरी सेवर अपने आप बंद हो जाता है."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"संक्षिप्त करें"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"परेशान ना करें"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"बंद रहने का समय"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"कार्यदिवसों की रात"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"सप्ताहांत"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> द्वारा म्यूट किया गया"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"आपके डिवाइस के साथ कोई आंतरिक त्रुटि हुई और यह तब तक अस्‍थिर रह सकता है, जब तक आप फ़ैक्‍टरी डेटा रीसेट नहीं करते हैं."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"आपके डिवाइस के साथ कोई आंतरिक त्रुटि हुई. विवरणों के लिए अपने निर्माता से संपर्क करें."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index cf81cd1..a9d5e2b 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -130,6 +130,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Isključeno"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Prednost ima Wi-Fi mreža"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Prednost ima mobilna mreža"</string>
@@ -1085,22 +1086,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Postavljanje"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Izbaci"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Istražite"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> nedostaje"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Ponovo umetnite uređaj"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Premještanje aplikacije <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Premještanje podataka"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Premještanje dovršeno"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Podaci su premješteni u pohranu <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Podaci nisu premješteni"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Podaci su ostali na izvornoj lokaciji"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nisu pronađene podudarne radnje."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Usmjeravanje medijskog izlaza"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Aplikaciji omogućuje usmjeravanje medijskog izlaza na druge vanjske uređaje."</string>
@@ -1475,6 +1468,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Traži uzorak za otključavanje radi otkvačivanja"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Traži zaporku radi otkvačivanja"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Instalirao administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Ažurira vaš administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Izbrisao administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Da bi se produljilo trajanje baterije, ušteda baterije smanjuje rad uređaja i ograničava vibraciju, usluge lokacije i većinu pozadinskih podataka. Aplikacije za e-poštu, slanje poruka i druge aplikacije koje se oslanjaju na sinkronizaciju možda se neće ažurirati ako ih ne otvorite.\n\nUšteda baterije isključuje se automatski dok se uređaj puni."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1503,8 +1497,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Sažmi"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ne ometaj"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Prekid rada"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noći radnih dana"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Vikend"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Zvuk je isklj. treća strana <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Na vašem uređaju postoji interni problem i možda neće biti stabilan dok ga ne vratite na tvorničko stanje."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Na vašem uređaju postoji interni problem. Obratite se proizvođaču za više pojedinosti."</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index ae606b2..f8d384b 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Ki"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi előnyben részesítve"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobiladat-kapcsolat előnyben részesítve"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Beállítás"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Kiadás"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Felfedezés"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"A(z) <xliff:g id="NAME">%s</xliff:g> nem található"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Helyezze be újra az eszközt"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> áthelyezése"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Az áthelyezés folyamatban van"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Az áthelyezés befejeződött"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Adatok áthelyezve ide: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Sikertelen az adatok áthelyezése"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Maradtak adatok az eredeti helyen"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nincs megfelelő tevékenység."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Médiafájlok kimenetének irányítása"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Lehetővé teszi az alkalmazás számára, hogy más külső eszközökre irányítsa a médiafájlok lejátszását."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Feloldási minta kérése a rögzítés feloldásához"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Jelszó kérése a rögzítés feloldásához"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"A rendszergazda telepítette"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Frissítette a rendszergazda"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"A rendszergazda törölte"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Az akkumulátoridő növelése érdekében az energiatakarékos mód csökkenti az eszköz teljesítményét, és korlátozza a rezgést, a helyszolgáltatásokat, valamint a legtöbb háttéradatot is. Előfordulhat, hogy azok az e-mail-, üzenetküldő és egyéb alkalmazások, amelyek szinkronizálására számít, csak akkor frissítenek, ha megnyitja azokat.\n\nAz energiatakarékos mód automatikusan kikapcsol, ha eszköze töltőn van."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Összecsukás"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ne zavarjanak"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Inaktivitás"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Hétköznap esténként"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Hétvégente"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"A(z) <xliff:g id="THIRD_PARTY">%1$s</xliff:g> elnémította"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Belső probléma van az eszközzel, és instabil lehet, amíg vissza nem állítja a gyári adatokat."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Belső probléma van az eszközzel. A részletekért vegye fel a kapcsolatot a gyártóval."</string>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index f393c87..0830950 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Անջատված է"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi, նախընտրելի"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Բջջային, նախընտրելի"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Կարգավորում"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Անջատել"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Ուսումնասիրել"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g>-ի տեղափոխում"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Տվյալների տեղափոխում"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Տեղափոխումն ավարտվեց"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Տվյալները տեղափոխվեցին <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Չհաջողվեց տեղափոխել տվյալները"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Սկզբնական տեղադրությունում մնացած տվյալները"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Համընկնող գործունեություններ չգտնվեցին:"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Երթուղել մեդիա արտածումը"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Թույլ է տալիս հավելվածին մեդիա արտածումը երթուղել այլ արտաքին սարքեր:"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Ադմինիստրատորը թարմացրել է այն"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Ադմինիստրատորը ջնջել է այն"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Մարտկոցի աշխատանքի ժամկետը երկարացնելու նպատակով, մարտկոցի էներգիայի խնայման գործառույթը սահմանափակում է սարքի աշխատանքը, թրթռոցը, տեղադրության ծառայությունները և հետնաշերտում աշխատող շատ գործընթացներ: Էլփոստը, հաղորդագրությունների փոխանակումը և տվյալների համաժամեցումից կախված այլ հավելվածները կարող են չթարմացվել, եթե դուք դրանք չգործարկեք:\n\nԵրբ ձեր սարքը լիցքավորվում է, մարտկոցի էներգիայի խնայման գործառույթն ինքնաշխատորեն անջատվում է:"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Թաքցնել"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Չանհանգստացնել"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Անգործունության ժամանակը"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Երկուշաբթիից ուրբաթ"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Հանգստյան օրեր"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Համրեցվել է <xliff:g id="THIRD_PARTY">%1$s</xliff:g>-ի կողմից"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Սարքում ներքին խնդիր է առաջացել և այն կարող է կրկնվել, մինչև չվերականգնեք գործարանային կարգավորումները:"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Սարքում ներքին խնդիր է առաջացել: Մանրամասների համար կապվեք արտադրողի հետ:"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 298f204..69ce711 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Nonaktif"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi dipilih"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Seluler dipilih"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Siapkan"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Keluarkan"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Jelajahi"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Tidak ada <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Colokkan kembali perangkat ini"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Memindahkan <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Memindahkan data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Pemindahan selesai"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data dipindahkan ke <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Tidak dapat memindahkan data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data tertinggal di lokasi asal"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Tidak ditemukan aktivitas yang sesuai."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Menentukan rute keluaran media"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Memungkinkan aplikasi menentukan rute keluaran media ke perangkat eksternal lainnya."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Meminta pola pembukaan kunci sebelum melepas sematan"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Meminta sandi sebelum melepas sematan"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Dipasang oleh administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Diperbarui oleh administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Dihapus oleh administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Untuk membantu meningkatkan masa pakai baterai, penghemat baterai mengurangi kinerja perangkat dan membatasi getaran, layanan lokasi, dan kebanyakan data latar belakang. Email, perpesanan, dan aplikasi lain yang mengandalkan sinkronisasi mungkin tidak diperbarui kecuali jika dibuka.\n\nPenghemat baterai otomatis nonaktif jika perangkat diisi dayanya."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Ciutkan"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Jangan ganggu"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Waktu non-operasional"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Malam hari kerja"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Akhir pekan"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Dinonaktifkan oleh <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Ada masalah dengan perangkat. Hal ini mungkin membuat perangkat jadi tidak stabil dan perlu dikembalikan ke setelan pabrik."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Ada masalah dengan perangkat. Hubungi produsen perangkat untuk informasi selengkapnya."</string>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index b36322b..18fd5da 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Slökkt"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi í forgangi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Farsímakerfi í forgangi"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Uppsetning"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Fjarlægja"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Kanna"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> vantar"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Settu þetta tæki aftur í"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Flytur <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Flytur gögn"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Flutningi lokið"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Gögn flutt á <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Ekki var hægt að færa gögnin"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Gögn eftir á upprunalega staðnum"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Engar aðgerðir með samsvörun fundust."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Beina margmiðlunarúttaki"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Leyfir forriti að beina margmiðlunarúttaki til annarra ytri tækja."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Biðja um opnunarmynstur til að losa"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Biðja um aðgangsorð til að losa"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Uppsett af kerfisstjóra"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Uppfært af kerfisstjóranum"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Eytt af kerfisstjóra"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Til að auka endingu rafhlöðunnar mun orkusparnaður draga úr afköstum tækisins og takmarka titring, staðsetningarþjónustu og megnið af bakgrunnsgögnum. Ekki er víst að tölvupóstur, skilaboð og önnur forrit sem reiða sig á samstillingu uppfærist nema þú opnir þau.\n\nSjálfkrafa er slökkt á orkusparnaði þegar tækið er í hleðslu."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Minnka"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ónáðið ekki"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Hvíldartími"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Virk kvöld"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Helgar"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> tók hljóðið af"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Innra vandamál kom upp í tækinu og það kann að vera óstöðugt þangað til þú núllstillir það."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Innra vandamál kom upp í tækinu. Hafðu samband við framleiðanda til að fá nánari upplýsingar."</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 5a2bf7a..3def7ae 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Non attiva"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Rete preferita: Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Rete preferita: cellulare"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configura"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Espelli"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Scopri"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> mancante"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reinserisci il dispositivo"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Spostamento di <xliff:g id="NAME">%s</xliff:g> in corso"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Spostamento dei dati in corso"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Spostamento completato"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Dati spostati sulla <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Impossibile spostare i dati"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Dati lasciati nella posizione originaria"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nessuna attività corrispondente trovata."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Indirizzamento uscita media"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Consente a un\'applicazione di indirizzare l\'uscita di media verso altri dispositivi esterni."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Richiedi sequenza di sblocco prima di sbloccare"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Richiedi password prima di sbloccare"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installato dall\'amministratore"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Aggiornato dall\'amministratore"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminato dall\'amministratore"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Per aumentare la durata della batteria, la funzione di risparmio energetico riduce le prestazioni del dispositivo e limita vibrazione, servizi di localizzazione e la maggior parte dei dati in background. App di email, messaggi e altre app che si basano sulla sincronizzazione potrebbero essere aggiornate soltanto all\'apertura.\n\nLa funzione di risparmio energetico viene disattivata automaticamente quando il dispositivo è in carica."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Comprimi"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Non disturbare"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Tempo di inattività"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Sere giorni feriali"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Fine settimana"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Audio disattivato da <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Si è verificato un problema interno con il dispositivo, che potrebbe essere instabile fino al ripristino dei dati di fabbrica."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Si è verificato un problema interno con il dispositivo. Per informazioni dettagliate, contatta il produttore."</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 0f2a691..de0f975 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"כבוי"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"‏Wi-Fi מועדף"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"סלולרי מועדף"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"הגדר"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"הוצא"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"גלה"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"מעביר את <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"מעביר נתונים"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ההעברה הושלמה"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"הנתונים הועברו אל <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"לא ניתן היה להעביר את הנתונים"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"הנתונים נותרו במיקום המקורי"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"לא נמצאו פעילויות תואמות."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"ניתוב פלט מדיה"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"מאפשר לאפליקציה לנתב פלט מדיה למכשירים חיצוניים אחרים."</string>
@@ -1484,6 +1477,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"עודכן על ידי מנהל המערכת שלך"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"נמחקה על ידי מנהל המערכת שלך"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"כדי לעזור בשיפור חיי הסוללה, תכונת החיסכון בסוללה מצמצמת את פעולות המכשיר ומגבילה רטט, שירותי מיקום ואת רוב נתוני הרקע. אימייל, העברת הודעות ואפליקציות אחרות המסתמכות על סנכרון עשויות שלא להתעדכן, אלא אם תפתח אותן.\n\nתכונת החיסכון בסוללה מושבתת אוטומטית כשהמכשיר בטעינה."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,9 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"כווץ"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"נא לא להפריע"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"זמן השבתה"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"לילות בימי חול"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"סופי שבוע"</string>
+    <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"ערב ביום חול"</string>
+    <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"סוף השבוע"</string>
+    <string name="zen_mode_default_events_name" msgid="8158334939013085363">"אירוע"</string>
     <string name="muted_by" msgid="6147073845094180001">"הושתק על ידי <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"קיימת בעיה פנימית במכשיר שלך, וייתכן שהתפקוד שלו לא יהיה יציב עד שתבצע איפוס לנתוני היצרן."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"קיימת בעיה פנימית במכשיר שלך. לקבלת פרטים, צור קשר עם היצרן."</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 71eec56..f952fb6 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"OFF"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi優先"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"モバイル優先"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"セットアップ"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"取り外し"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"外部メディア"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g>を移動しています"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"データを移動しています"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"移動が完了しました"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"データを<xliff:g id="NAME">%s</xliff:g>に移動しました"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"データを移動できませんでした"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"データは元の場所にあります"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"一致するアクティビティが見つかりません。"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"メディア出力のルーティング"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"メディア出力を他の外部デバイスにルーティングすることをアプリに許可します。"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"管理者によって更新されています"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"管理者によって削除されました"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"バッテリーを長持ちさせるため、バッテリーセーバーは端末のパフォーマンスを抑え、バイブレーション、位置情報サービス、大半のバックグラウンドデータを制限します。メール、SMSや、同期を使用するその他のアプリは、起動しても更新されないことがあります。\n\nバッテリーセーバーは端末の充電中は自動的にOFFになります。"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"折りたたむ"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"通知を非表示"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ダウンタイム"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"平日の夜間"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"週末"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>によりミュートになっています"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"端末で内部的な問題が発生しました。データが初期化されるまで不安定になる可能性があります。"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"端末で内部的な問題が発生しました。詳しくはメーカーにお問い合わせください。"</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 1fc1b95..b88ff5b 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"გამორთული"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"სასურველია Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"სასურველია ფიჭური ინტერნეტი"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"დაყენება"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"გამოღება"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"დათვალიერება"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"მიმდინარეობს <xliff:g id="NAME">%s</xliff:g>-ის გადატანა"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"მიმდინარეობს მონაცემთა გადატანა"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"გადატანა დასრულდა"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"მონაცემები გადატანილი იქნა <xliff:g id="NAME">%s</xliff:g>-ში"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"მონაცემების გადატანა ვერ მოხერხდა"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"მონაცემები დარჩა თავდაპირველ მდებარეობაში"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"შესატყვისი აქტივობები არ არის."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"მულტიმედია მონაცემების გადამისამართება"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"აპლიკაციას შეეძლება გადაამისამართოს მულტიმედია მონაცემები სხვა გარე მოწყობილობებისკენ."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"განახლებულია თქვენი ადმინისტრატორის მიერ"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"თქვენი ადმინისტრატორის მიერ წაშლილი"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ელემენტის მოქმედების ვადის გაუმჯობესებისათვის, ელემენტის დამზოგი ამცირებს თქვენი მოწყობილობის შესრულებას და ზღუდავს ვიბრაციას, ადგილმდებარეობის მომსახურებებს და ძირითად ფონურ მონაცემებს. ელ-ფოსტა, შეტყობინებები და სხვა სინქრონიზაციაზე დაყრდნობილი აპლიკაციების განახლება არ მოხდება მათ გახსნეამდე. \n\n ელემენტის დამზოგველი ავტომატურად გამოირთვება, როდესაც თქვენს მოწყობილობას დამტენთან შეაერთებთ."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"აკეცვა"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"არ შემაწუხოთ"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ავარიული პაუზა"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"კვირის ღამეებისას"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"შაბათ-კვირას"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"დადუმებულია <xliff:g id="THIRD_PARTY">%1$s</xliff:g>-ის მიერ"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"ფიქსირდება თქვენი მ ოწყობილობის შიდა პრობლემა და შეიძლება არასტაბილური იყოს, სანამ ქარხნულ მონაცემების არ განაახლებთ."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"ფიქსირდება თქვენი მოწყობილობის შიდა პრობლემა. დეტალებისათვის, მიმართეთ თქვენს მწარმოებელს."</string>
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml
index 5808e6d..34a44c2 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk-rKZ/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Өшірулі"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Қалаулы Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Қалаулы ұялы байланыс"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Орнату"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Шығару"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Зерттеу"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> тасымалдануда"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Деректер тасымалдануда"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Тасымалданып болды"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Деректер <xliff:g id="NAME">%s</xliff:g> ішіне тасымалданды"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Деректерді тасымалдау мүмкін емес"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Деректер бастапқы орнында қалды"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Сәйкес әрекеттер табылмады."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Медиа шығысын бағыттау"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Қолданбаға медиа шығысын басқа сыртқы құрылғыларға бағыттау мүмкіндігін береді."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Әкімші жаңартты"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Әкімші жойған"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Батареяның қызмет көрсету мерзімін жақсарту үшін батарея үнемдегіш құрылғының өнімділігін төмендетеді және дірілді, орынды анықтау қызметтерін және фондық деректердің көпшілігін шектейді. Электрондық пошта, хабар алмасу және синхрондауға негізделген басқа қолданбалар ашқанша жаңартылмауы мүмкін.\n\nБатарея үнемдегіш құрылғы зарядталып жатқанда автоматты түрде өшеді."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Тасалау"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Мазаламауыңызды сұраймын"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Бос тұру уақыты"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Жұмыс күндерінің түндері"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Демалыс күндері"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> үнін өшірген"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"There\'s an internal problem with your device, and it may be unstable until you factory data reset."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"There\'s an internal problem with your device. Contact your manufacturer for details."</string>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index 423506f..c0ea059 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"បិទ"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"គួរប្រើ Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"គួរប្រើប្រព័ន្ធទូរស័ព្ទ"</string>
@@ -1080,22 +1081,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"ដំឡើង"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"ដកចេញ"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"រុករក"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"កំពុងផ្លាស់ទី <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"កំពុងផ្លាស់ទីទិន្នន័យ…"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ផ្លាស់ទីទាំងស្រុង"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"ទិន្នន័យបានផ្លាស់ទីទៅ <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"មិនអាចផ្លាស់ទីទិន្នន័យបានទេ"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"ទិន្នន័យនៅក្នុងទីតាំងដើមដដែល"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"រក​មិន​ឃើញ​សកម្មភាព​ផ្គូផ្គង។"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"នាំ​ផ្លូវ​លទ្ធផល​មេឌៀ"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"ឲ្យ​កម្មវិធី​នាំ​ផ្លូវ​លទ្ធផល​មេឌៀ​ទៅ​ឧបករណ៍​​ខាង​ក្រៅ​ផ្សេង។"</string>
@@ -1468,6 +1461,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"បានធ្វើបច្ចុប្បន្នភាពដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"បានលុបដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ដើម្បីជួយឲ្យថាមពលថ្មប្រសើរឡើង កម្មវិធីសន្សំសំចៃថាមពលថ្មកាត់បន្ថយប្រតិបត្តិការឧបករណ៍របស់អ្នក និងកម្រិតភាពញ័រ សេវាកម្មទីតាំង និងទិន្នន័យផ្ទៃខាងក្រោយស្ទើរតែទាំងអស់។ ការផ្ញើសារអ៊ីម៉ែល និងកម្មវិធីផ្សេងទៀតដែលពឹងផ្អែកលើការធ្វើសមកាលកម្មអាចនឹងមិនធ្វើបច្ចុប្បន្នភាពទេ លុះត្រាតែអ្នកបើកពួកវា។\n\nកម្មវិធីសន្សំសំចៃបិទដោយស្វ័យប្រវត្តិ នៅពេលដែលឧបករណ៍របស់អ្នកកំពុងសាកថ្ម។"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1492,8 +1486,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"បង្រួម"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"កុំរំខាន"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ពេលមិនដំណើរការ"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"យប់ថ្ងៃធ្វើការ"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"ចុងសប្តាហ៍"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"បាន​បិទ​សំឡេង​ដោយ <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"មានបញ្ហាខាងក្នុងឧបករណ៍របស់អ្នក ហើយវាអ្នកមិនមានស្ថេរភាព រហូតទាល់តែអ្នកកំណត់ដូចដើមវិញទាំងស្រុង។"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"មានបញ្ហាខាងក្នុងឧបករណ៍របស់អ្នក ទំនាក់ទំនងក្រុមហ៊ុនផលិតឧបករណ៍របស់អ្នកសម្រាប់ព័ត៌មានបន្ថែម។"</string>
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml
index eca6ee8..41fe302 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn-rIN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ಆಫ್"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"ವೈ-ಫೈಗೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"ಸೆಲ್ಯುಲಾರ್‌ಗೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"ಸೆಟಪ್"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"ಎಜೆಕ್ಟ್ ಮಾಡು"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"ಎಕ್ಸ್‌ಪ್ಲೋರ್‌‌"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> ಸರಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"ಡೇಟಾ ಸರಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ಸರಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"<xliff:g id="NAME">%s</xliff:g> ಗೆ ಡೇಟಾ ಸರಿಸಲಾಗಿದೆ"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"ಡೇಟಾ ಸರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"ಮೂಲ ಸ್ಥಳದಲ್ಲಿ ಡೇಟಾ ಉಳಿದಿದೆ"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"ಯಾವುದೇ ಹೊಂದಾಣಿಕೆಯ ಚಟುವಟಿಕೆಗಳು ಕಂಡುಬಂದಿಲ್ಲ."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"ಮೀಡಿಯಾ ಔಟ್‍ಪುಟ್ ಅನ್ನು ರೂಟ್ ಮಾಡಿ"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"ಇತರ ಬಾಹ್ಯ ಸಾಧನಗಳಿಗೆ ಮೀಡಿಯಾ ಔಟ್‍‍ಪುಟ್ ಅನ್ನು ರೂಟ್ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ನವೀಕರಿಸಲಾಗಿದೆ"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಅಳಿಸಲಾಗಿದೆ"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ನಿಮ್ಮ ಬ್ಯಾಟರಿಯ ಬಾಳಿಕೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡಲು, ಬ್ಯಾಟರಿ ಉಳಿಕೆಯು ನಿಮ್ಮ ಸಾಧನದ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ವೈಬ್ರೇಷನ್, ಸ್ಥಳ ಸೇವೆಗಳು ಹಾಗೂ ಹೆಚ್ಚಿನ ಹಿನ್ನೆಲೆ ಡೇಟಾವನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ. ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ಅವಲಂಬಿಸಿರುವ ಇಮೇಲ್, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ, ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ನೀವು ತೆರೆಯದ ಹೊರತು ನವೀಕರಣಗೊಳ್ಳುವುದಿಲ್ಲ.\n\nನಿಮ್ಮ ಸಾಧನವು ಚಾರ್ಜ್ ಆಗುತ್ತಿರುವ ಸಮಯದಲ್ಲಿ ಬ್ಯಾಟರಿ ಉಳಿಕೆಯು ಆಫ್ ಆಗುತ್ತದೆ."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"ಸಂಕುಚಿಸು"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ಸ್ಥಗಿತಕಾಲ"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"ವಾರದ ರಾತ್ರಿಗಳು"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"ವಾರಾಂತ್ಯಗಳು"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ಅವರಿಂದ ಮ್ಯೂಟ್‌ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆಂತರಿಕ ಸಮಸ್ಯೆಯಿದೆ ಹಾಗೂ ನೀವು ಫ್ಯಾಕ್ಟರಿ ಡೇಟಾವನ್ನು ಮರುಹೊಂದಿಸುವರೆಗೂ ಅದು ಅಸ್ಥಿರವಾಗಬಹುದು."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆಂತರಿಕ ಸಮಸ್ಯೆಯಿದೆ. ವಿವರಗಳಿಗಾಗಿ ನಿಮ್ಮ ತಯಾರಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 853a6ed..7b5aec8 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"꺼짐"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi를 기본으로 설정"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"데이터 네트워크를 기본으로 설정"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"설정"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"꺼내기"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"둘러보기"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> 이동 중"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"데이터 이동 중"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"이동 완료"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"데이터를 <xliff:g id="NAME">%s</xliff:g>(으)로 이동했습니다."</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"데이터를 이동할 수 없음"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"원래 위치에 데이터 남아 있음"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"일치하는 활동이 없습니다."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"미디어 출력 연결"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"앱이 미디어 출력을 기타 외부 기기에 연결할 수 있도록 허용합니다."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"관리자에 의해 업데이트됨"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"관리자가 삭제함"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"배터리 수명 개선을 위해, 배터리 세이버는 기기의 성능을 줄이고 진동, 위치 서비스 및 대부분의 백그라운드 데이터를 제한합니다. 이메일, 메시지 및 동기화에 의존하는 기타 앱은 앱을 열 때까지 업데이트되지 않을 수 있습니다.\n\n배터리 세이버는 기기를 충전 중일 때는 자동으로 사용 중지됩니다."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"접기"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"알림 일시중지"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"다운타임"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"평일 밤"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"주말"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>에서 알림음 음소거"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"사용 중인 기기 내부에 문제가 발생했습니다. 초기화할 때까지 불안정할 수 있습니다."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"사용 중인 기기 내부에 문제가 발생했습니다. 자세한 내용은 제조업체에 문의하세요."</string>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index ee87665..3776ef2 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -197,6 +197,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Өчүк"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi тандалган"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Уюлдук тармак тандалган"</string>
@@ -1430,22 +1431,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Орнотуу"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Чыгаруу"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Изилдөө"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> сактагычына ооштурулууда"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Дайындар ооштурулууда…"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Ооштуруу аяктады"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Дайындар <xliff:g id="NAME">%s</xliff:g> сактагычына ооштурулду"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Дайындар ооштурулбай калды"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Дайындар баштапкы ордунда калды"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Туура келген аракеттер табылбады."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Медиа чыгарылышын багыттоо"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Колдонмого  медиа мазмунду башка тышкы түзмөктөргө багыттоо уруксатын берет."</string>
@@ -1883,6 +1876,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Администраторуңуз жаңырткан"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Администраторуңуз тарабынан жок кылынган"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Батареянын өмүрүн узартуу үчүн, батареяны үнөмдөгүч түзмөгүңүздүн ишинин майнаптуулугун азайтып, дирилдөө, жайгашкан жерди аныктоо кызматтары жана фондук дайындардын көпчүлүгүн чектеп коёт. Электрондук почта, билдирүү жазышуу жана башка шайкештештирүүгө байланыштуу колдонмолор ачылмайынча жаңыртылбай калышы мүмкүн.\n\nБатарея үнөмдөгүч түзмөгүңүз кубатталып жатканда автоматтык түрдө өчүп калат."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1907,8 +1901,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Жыйнап коюу"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Тынчымды алба"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Аракетсиз убакыт"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Иш түндөрү"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Дем алыш күндөрү"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> тарабынан үнсүздөлдү"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Түзмөгүңүздө ички көйгөй бар жана ал баштапкы абалга кайтарылмайынча туруктуу иштебей коюшу мүмкүн."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Түзмөгүңүздө ички көйгөй бар. Анын чоо-жайын билүү үчүн өндүрүүчүңүзгө кайрылыңыз."</string>
diff --git a/core/res/res/values-land/dimens.xml b/core/res/res/values-land/dimens.xml
index 640ca1e..4f0c0fb 100644
--- a/core/res/res/values-land/dimens.xml
+++ b/core/res/res/values-land/dimens.xml
@@ -67,4 +67,7 @@
     <!-- width of ImmersiveModeConfirmation (-1 for match_parent) -->
     <dimen name="immersive_mode_cling_width">380dp</dimen>
 
+     <!-- Floating toolbar dimensions -->
+     <dimen name="floating_toolbar_preferred_width">544dp</dimen>
+
 </resources>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 5128827..3a59800 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ປິດ"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"ເລືອກໃຊ້ Wi​-Fi ກ່ອນ"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"ເລືອກໃຊ້ເຊລລູລາກ່ອນ"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"ຕິດຕັ້ງ"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"ເອົາອອກ"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"ຄົ້ນຫາ"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"ກຳ​ລັງ​ຍ້າຍ <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"ກຳ​ລັງ​ຍ້າຍ​ຂໍ້​ມູນ"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ການ​ຍ້າຍ​ສຳ​ເລັດ"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"ຍ້າຍ​ຂໍ້​ມູນ​ໃສ່ <xliff:g id="NAME">%s</xliff:g> ແລ້ວ"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"ບໍ່​ສາ​ມາດ​ຍ້າຍ​ຂໍ້​ມູນ​ໄດ້"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"ຂໍ້​ມູນ​ເຫຼືອ​ໄວ້​ຢູ່​ໃນ​ທີ່​ຕັ້ງ​ເດີມ"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"ບໍ່ພົບກິດຈະກຳທີ່ກົງກັນ."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"ກຳນົດເສັ້ນທາງເອົ້າພຸດຂອງສື່"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນ ກຳນົດເສັ້ນທາງເອົ້າພຸດຂອງສື່ໄປຫາອຸປະກອນພາຍນອກອື່ນໆ."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"ອັບ​ເດດ​ໂດຍ​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​ແລ້ວ"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"ຖືກ​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​ລຶບ​ໄປ​ແລ້ວ"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ເພື່ອ​ຊ່ວຍ​ເພີ່ມ​ອາ​ຍຸ​ແບັດ​ເຕີ​ຣີ, ຕົວ​ປະ​ຢັດ​ໄຟ​ແບັດ​ເຕີ​ຣີ​ຫຼຸດ​ປະ​ສິດ​ທິ​ພາບ​ການ​ເຮັດ​ວຽກ​ຂອງ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​ລົງ ແລະ​ຈຳ​ກັດ​ການ​ສັ່ນ, ການ​ບໍ​ລິ​ການ​ຫາທີ່ຕັ້ງ, ແລະ​ຂໍ້​ມູນ​ພື້ນ​ຫຼັງ​ເກືອບ​ທັງ​ໝົດ. ອີ​ເມວ, ການ​ສົ່ງ​ຂໍ້​ຄວາມ, ແລະ​ແອັບອື່ນໆ​ທີ່ອາ​ໄສການ​ຊິງ​ຄ໌​ອາດ​ຈະ​ບໍ່​ອັບ​ເດດ ນອກ​ຈາກວ່າ​ທ່ານ​ເປີດ​ມັນ.\n\nຕົວ​ປະ​ຢັດ​ໄຟ​ແບັດ​ເຕີ​ຣີຈະ​ປິດ​ອັດ​ຕະ​ໂນ​ມັດ ເມື່ອ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​ກຳ​ລັງ​ສາກຢູ່."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"ຫຍໍ້"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"ຫ້າມ​ລົບ​ກວນ"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"​ເວ​ລາ​ປິດ​ເຮັດ​ວຽກ"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"ຄືນ​ວັນ​ຈັນຫາ​ສຸກ"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"ທ້າຍ​ອາ​ທິດ"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"ຖືກ​ປິດ​ສຽງ​ໂດຍ <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"ມີ​ບັນ​ຫາ​ພາຍ​ໃນ​ກັບ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ, ແລະ​ມັນ​ອາດ​ຈະ​ບໍ່​ສະ​ຖຽນ​ຈົນ​ກວ່າ​ທ່ານ​ຕັ້ງ​ເປັນ​ຂໍ້​ມູນ​ໂຮງ​ງານ​ຄືນ​ແລ້ວ."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"ມີ​ບັນ​ຫາ​ພາຍ​ໃນ​ກັບ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ. ຕິດ​ຕໍ່ຜູ້​ຜະ​ລິດ​ຂອງ​ທ່ານ​ສຳ​ລັບ​ລາຍ​ລະ​ອຽດ​ຕ່າງໆ."</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index ededc9a..8bb6d1c 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Išjungta"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Pageidautinas „Wi-Fi“ ryšys"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Pageidautinas mobilusis ryšys"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Sąranka"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Pašalinti"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Naršyti"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Trūksta <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Iš naujo įdėkite šį įrenginį"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Perkeliama programa „<xliff:g id="NAME">%s</xliff:g>“"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Perkeliami duomenys"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Perkėlimo veiksmas užbaigtas"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Duomenys perkelti į <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Nepavyko perkelti duomenų"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Duomenys palikti pradinėje vietoje"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nerasta atitinkančios veiklos."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Medijos išvesties nukreipimas"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Leidžiama programai nukreipti medijos išvestį į kitus išorinius įrenginius."</string>
@@ -1484,6 +1477,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Prašyti atrakinimo piešinio prieš atsegant"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Prašyti slaptažodžio prieš atsegant"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Įdiegė administratorius"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Atnaujino administratorius"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Ištrynė administratorius"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Kad tausotų akumuliatoriaus energiją akumuliatoriaus tausojimo priemonė sumažina įrenginio veikimą ir apriboja vibravimą, vietovės paslaugas bei daugumą foninių duomenų. El. pašto, susirašinėjimo žinutėmis ir kitos programos, kurios veikia sinchronizavimo pagrindu, gali būti neatnaujintos, nebent jas atidarysite.\n\nAkumuliatoriaus tausojimo priemonė automatiškai išjungiama, kai įrenginys įkraunamas."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Sutraukti"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Netrukdyti"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Prastova"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Savaitgalių naktimis"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Savaitgaliais"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Nutildė <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Iškilo vidinė su jūsų įrenginiu susijusi problema, todėl įrenginys gali veikti nestabiliai, kol neatkursite gamyklinių duomenų."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Iškilo vidinė su jūsų įrenginiu susijusi problema. Jei reikia išsamios informacijos, susisiekite su gamintoju."</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 9110e70..cf758c0 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -130,6 +130,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Izslēgts"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Vēlams Wi-Fi tīkls"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Vēlams mobilais tīkls"</string>
@@ -1085,22 +1086,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Iestatīt"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Izstumt"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Izpētīt"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Nav ierīces <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Vēlreiz ievietojiet ierīci."</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Notiek lietotnes <xliff:g id="NAME">%s</xliff:g> pārvietošana"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Notiek datu pārvietošana"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Pārvietošana ir pabeigta"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Dati ir pārvietoti uz ierīci <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Nevarēja pārvietot datus"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Dati tika atstāti sākotnējā atrašanās vietā"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nav atrasta neviena atbilstoša darbība."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Multivides datu izejas maršrutēšana"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ļauj lietojumprogrammai maršrutēt multivides datu izeju uz citām ārējām ierīcēm."</string>
@@ -1475,6 +1468,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Atjaunināja administrators"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Izdzēsa jūsu administrators"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Lai paildzinātu akumulatora darbību, akumulatora jaudas taupīšanas režīmā tiek samazināta ierīces veiktspēja un tiek ierobežota vibrācija, atrašanās vietu pakalpojumi un lielākā daļa fona datu. E-pasta, ziņojumapmaiņas un cita veida lietotnes, kuru darbības pamatā ir datu sinhronizācija, var netikt atjauninātas, ja tās neatverat.\n\nTiklīdz tiek sākta ierīces uzlāde, akumulatora jaudas taupīšanas režīms automātiski tiek izslēgts."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1503,8 +1497,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Sakļaut"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Netraucēt"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Dīkstāve"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Darbadienu naktīs"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Brīvdienās"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Skaņu izslēdza <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Jūsu ierīcē ir radusies iekšēja problēma, un ierīce var darboties nestabili. Lai to labotu, veiciet rūpnīcas datu atiestatīšanu."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Jūsu ierīcē ir radusies iekšēja problēma. Lai iegūtu plašāku informāciju, lūdzu, sazinieties ar ražotāju."</string>
diff --git a/core/res/res/values-mcc310-mnc260-sq-rAL/strings.xml b/core/res/res/values-mcc310-mnc260-sq-rAL/strings.xml
index 42eb1ca..84ac153 100644
--- a/core/res/res/values-mcc310-mnc260-sq-rAL/strings.xml
+++ b/core/res/res/values-mcc310-mnc260-sq-rAL/strings.xml
@@ -23,7 +23,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="wfcOperatorErrorAlertMessages">
-    <item msgid="7239039348648848288">"Për të bërë telefonata dhe për të dërguar mesazhe me Wi-Fi, në fillim kërkoji operatorit celular të konfigurojë këtë shërbim. Më pas aktivizo përsëri telefonatat me Wi-Fi nga Parametrat."</item>
+    <item msgid="7239039348648848288">"Për të bërë telefonata dhe për të dërguar mesazhe me Wi-Fi, në fillim kërkoji operatorit celular ta konfigurojë këtë shërbim. Më pas aktivizo përsëri telefonatat me Wi-Fi, nga Cilësimet."</item>
   </string-array>
   <string-array name="wfcOperatorErrorNotificationMessages">
     <item msgid="483847327467331298">"Regjistrohu me operatorin tënd celular"</item>
diff --git a/core/res/res/values-mcc311-mnc480/config.xml b/core/res/res/values-mcc311-mnc480/config.xml
index 56f8aa2..a986b75 100755
--- a/core/res/res/values-mcc311-mnc480/config.xml
+++ b/core/res/res/values-mcc311-mnc480/config.xml
@@ -43,6 +43,11 @@
          provisioning, availability etc -->
     <bool name="config_carrier_volte_available">true</bool>
 
+    <!-- Flag specifying whether VT should be available for carrier: independent of
+         carrier provisioning. If false: hard disabled. If true: then depends on carrier
+         provisioning, availability etc -->
+    <bool name="config_carrier_vt_available">false</bool>
+
     <!-- Flag specifying whether VoLTE availability is based on provisioning -->
     <bool name="config_carrier_volte_provisioned">true</bool>
 
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml
index 4f5c913..3937ee1 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Исклучено"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Се претпочита Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Се претпочита мобилна"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Поставување"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Извади"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Истражувај"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Се преместува <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Се преместуваат податоци"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Преместувањето е завршено"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Податоците се преместени во <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Не може да се прем. податоците"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Податоците се оставени на провобитната локација"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Не се пронајдени соодветни активности."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Насочи излез за медиуми"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Овозможува апликацијата да насочува излез за медиуми кон други надворешни уреди."</string>
@@ -1468,6 +1461,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Ажурирано од администраторот"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Избришано од администраторот"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"За да ви помогне да ја подобрите трајноста на батеријата, штедачот на батеријата ја намалува изведбата на уредот и го ограничува вибрирањето, услугите за локација и повеќето податоци од заднина. Е-поштата, испраќањето пораки и другите апликации кои се потпираат на синхронизација можеби нема да се ажурираат доколку не ги отворите.\n\nШтедачот на батеријата автоматски се исклучува кога уредот се полни."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1492,8 +1486,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Собери"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Не вознемирувај"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Пауза"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Ноќите во неделата"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Викенди"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Звукот го исклучи <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Настана внатрешен проблем со уредот и може да биде нестабилен сè додека не ресетирате на фабричките податоци."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Настана внатрешен проблем со уредот. Контактирајте го производителот за детали."</string>
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml
index 62c5b1f..93a3a0f 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml-rIN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ഓഫ്"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi തിരഞ്ഞെടുത്തിരിക്കുന്നു"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"സെല്ലുലാർ തിരഞ്ഞെടുത്തിരിക്കുന്നു"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"സജ്ജമാക്കുക"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"നിരസിക്കുക"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"പര്യവേക്ഷണം ചെയ്യുക"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> നീക്കുന്നു"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"വിവരം നീക്കുന്നു"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"നീക്കുന്ന പ്രവർത്തനം പൂർത്തിയായി"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"<xliff:g id="NAME">%s</xliff:g> എന്നതിലേക്ക് വിവരം നീക്കി"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"വിവരം നീക്കാനായില്ല"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"യഥാർത്ഥ ലൊക്കേഷനിൽ വിവരം ശേഷിക്കുന്നു"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"പൊരുത്തമുള്ള പ്രവർത്തനങ്ങളൊന്നും കണ്ടെത്തിയില്ല."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"മീഡിയ ഔട്ട്പുട്ട് റൂട്ടുചെയ്യുക"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"മീഡിയ ഔട്ട്‌പുട്ടിനെ മറ്റ് ബാഹ്യ ഉപകരണങ്ങളിലേക്ക് റൂട്ടുചെയ്യാൻ ഒരു അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ അപ്‌ഡേറ്റുചെയ്‌തു"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ഇല്ലാതാക്കി"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ബാറ്ററി ആയുസ്സ് മെച്ചപ്പെടുത്താൻ സഹായിക്കുന്നതിന്, ബാറ്ററി സേവർ നിങ്ങളുടെ ഉപകരണത്തിന്റെ പ്രകടനത്തെ കുറയ്‌ക്കുകയും വൈബ്രേഷനെയും മിക്ക പശ്ചാത്തല വിവരത്തെയും പരിമിതപ്പെടുത്തുകയും ചെയ്യുന്നു. ഇമെയിൽ, സന്ദേശമയയ്‌ക്കൽ, സമന്വയിപ്പിക്കലിനെ ആശ്രയിച്ചുള്ള മറ്റ് അപ്ലിക്കേഷനുകൾ എന്നിവ നിങ്ങൾ തുറക്കുന്നതുവരെ അപ്‌ഡേറ്റുചെയ്യാനിടയില്ല.\n\nനിങ്ങളുടെ ഉപകരണം ചാർജ്ജുചെയ്യുമ്പോൾ ബാറ്ററി സേവർ സ്വയം ഓഫാകും."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"ചുരുക്കുക"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"ശല്യപ്പെടുത്തരുത്"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"പ്രവർത്തനരഹിതമായ സമയം"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"ശനിയാഴ്‌ചയും ഞായറാഴ്‌ചയും അല്ലാത്ത ദിവസങ്ങളിലെ രാത്രികൾ"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"വാരാന്ത്യങ്ങൾ"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>, മ്യൂട്ടുചെയ്‌തു"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു ആന്തരിക പ്രശ്‌നമുണ്ട്, ഫാക്‌ടറി വിവര പുനഃസജ്ജീകരണം ചെയ്യുന്നതുവരെ ഇതു അസ്ഥിരമായിരിക്കാനിടയുണ്ട്."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു ആന്തരിക പ്രശ്‌നമുണ്ട്. വിശദാംശങ്ങൾക്കായി നിർമ്മാതാവിനെ ബന്ധപ്പെടുക."</string>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 971a6a8..47ddb37 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Идэвхгүй"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi илүү эрхэмлэдэг"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Үүрэн сүлжээг илүү эрхэмлэдэг"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Тохируулга"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Салгах"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Судлах"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g>-ыг зөөж байна"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Өгөгдөл зөөвөрлөж байна..."</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Бүрэн бүтнээр шилжүүлэх"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Өгөгдөл <xliff:g id="NAME">%s</xliff:g>-д зөөгдсөн"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Өгөгдлийг зөөх боломжгүй байна"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Анхны байршилд өгөгдөл үлдсэн байна"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Таарах активити олдсонгүй."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Медиа гаралтыг чиглүүлэх"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Аппликешн нь медиа гаралтыг бусад гадаад төхөөрөмжрүү чиглүүлэх боломжтой."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Танай админ шинэчилсэн"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Таны админ устгасан байна"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Батарей хадгалах функц нь таны төхөөрөмжийн цэнэгийг хадгалахын тулд гүйцэтгэлийг багасгаж, чичрэлтийг бууруулж, байршлын үйлчилгээнүүд болон бусад өгөгдлийн хэмжээг багасгадаг юм. И-мэйл, мессеж болон бусад синхрон хийдэг апликейшнүүд дараа дахин нээгдэх хүртлээ автоматаар шинэчлэлт хийхгүй.\n\nМөн батарей хадгалах функц нь таныг төхөөрөмжөө цэнэглэх үед автоматаар унтрах юм."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1488,8 +1482,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Хумих"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Бүү саад бол"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Сул зогсолт"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Ажлын өдрүүдэд орой"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Амралтын өдрүүд"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>-с хаасан"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Таны төхөөрөмжид дотоод алдаа байна.Та төхөөрөмжөө үйлдвэрээс гарсан төлөвт шилжүүлэх хүртэл таны төхөөрөмж чинь тогтворгүй байж болох юм."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Таны төхөөрөмжид дотоод алдаа байна. Дэлгэрэнгүй мэдээлэл авахыг хүсвэл үйлдвэрлэгчтэйгээ холбоо барина уу."</string>
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml
index 8bca6a5..507d38c 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr-rIN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"बंद"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"वाय-फाय प्राधान्यकृत"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"सेल्युलर प्राधान्यकृत"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"सेटअप"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"बाहेर काढा"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"एक्सप्लोर करा"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> हलवित आहे"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"डेटा हलवित आहे"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"हलविणे पूर्ण"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"<xliff:g id="NAME">%s</xliff:g> वर डेटा हलविला"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"डेटा हलविणे शक्य झाले नाही"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"मूळ स्थानावर डेटा सोडला"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"कोणतेही जुळणारे क्रियाकलाप आढळले नाहीत."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"मीडिया आउटपुट मार्गस्थ करा"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"अन्य बाह्य डिव्हाइसेसवरील रूट मीडिया आउटपुट वर अनुप्रयोगास अनुमती देते."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"आपल्या प्रशासकाद्वारे अद्यतनित केले"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"आपल्या प्रशासकाद्वारे हटविले आहे"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"बॅटरीचे आयुष्य सुधारित करण्‍यात मदत करण्यासाठी, बॅटरी बचतकर्ता आपल्या डिव्हाइसचे कार्यप्रदर्शन कमी करतो आणि कंपन, स्थान सेवा आणि बराच पार्श्वभूमी डेटा मर्यादित करतो. संकालनावर अवलंबून असणारे ईमेल, संदेशन आणि इतर अ‍ॅप्स आपण उघडल्याशिवाय अद्यतनित होऊ शकत नाहीत.\n\nआपले डिव्हाइस चार्ज होत असते तेव्हा बॅटरी बचतकर्ता स्वयंचलितपणे बंद होतो."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"संक्षिप्त करा"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"व्यत्यय आणू नका"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"कार्य न करण्याचा कालावधी"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"आठवड्याच्या रात्री"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"सप्‍ताह अखेर"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> द्वारे नि:शब्द केले"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"आपल्‍या डिव्‍हाइसमध्‍ये अंतर्गत समस्‍या आहे आणि आपला फॅक्‍टरी डेटा रीसेट होईपर्यंत ती अस्‍थिर असू शकते."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"आपल्‍या डिव्‍हाइसमध्‍ये अंतर्गत समस्‍या आहे. तपशीलांसाठी आपल्‍या निर्मात्याशी संपर्क साधा."</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index f068fcd..1900a85 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Mati"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi diutamakan"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Selular diutamakan"</string>
@@ -274,8 +275,8 @@
     <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Membenarkan apl menerima dan memproses mesej WAP. Kebenaran ini termasuk keupayaan untuk memantau atau memadam mesej yang dihantar kepada anda tanpa menunjukkannya kepada anda."</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"dapatkan semula apl yang sedang dijalankan"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"Membenarkan apl mengambil maklumat tentang tugasan yang sedang dan baru berjalan. Ini boleh membenarkan apl untuk menemui maklumat tentang apl mana yang digunakan pada peranti."</string>
-    <string name="permlab_manageProfileAndDeviceOwners" msgid="5979288447973722097">"Urus profil dan pemilik peranti"</string>
-    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"Membenarkan apl menetapkan profil pemilik dan pemilik peranti."</string>
+    <string name="permlab_manageProfileAndDeviceOwners" msgid="5979288447973722097">"Urus pemilik profil dan peranti"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"Membenarkan apl menetapkan pemilik profil dan pemilik peranti."</string>
     <string name="permlab_reorderTasks" msgid="2018575526934422779">"susun semula tertib apl yang dijalankan"</string>
     <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Membenarkan apl memindahkan tugasan ke latar depan dan latar belakang. Apl boleh melakukan ini tanpa input anda."</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"dayakan mod kereta"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Persediaan"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Tanggalkan"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Teroka"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> tiada"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Sisipkan semula peranti ini"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Mengalihkan <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Mengalihkan data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Pengalihan selesai"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data dipindahkan ke <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Tidak dapat memindahkan data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data dibiarkan di lokasi asal"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Tiada aktiviti yang sepadan ditemui."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Buat laluan output media"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Membenarkan apl untuk membuat laluan output media ke peranti luaran lain."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Minta corak buka kunci sebelum menyahsemat"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Minta kata laluan sebelum menyahsemat"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Dipasang oleh pentadbir anda"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Dikemas kini oleh pentadbir anda"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Dipadamkan oleh pentadbir anda"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Untuk membantu memperbaik hayat bateri, penjimat bateri mengurangkan prestasi peranti anda dan menghadkan getaran, perkhidmatan lokasi dan kebanyakan data latar belakang. E-mel, pemesejan dan apl lain yang bergantung kepada penyegerakan mungkin tidak mengemas kini, melainkan anda membuka apl itu.\n\nPenjimat bateri dimatikan secara automatik semasa peranti anda sedang dicas."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Runtuhkan"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Jangan ganggu"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Waktu gendala"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Malam hari bekerja"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Hujung minggu"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Diredam oleh <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Terdapat masalah dalaman dengan peranti anda. Peranti mungkin tidak stabil sehingga anda membuat tetapan semula data kilang."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Terdapat masalah dalaman dengan peranti anda. Hubungi pengilang untuk mengetahui butirannya."</string>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index e315f56c..4ec9749 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ပိတ်ထားရသည်"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"ဝိုင်ဖိုင်အား ပိုနှစ်သက်သော"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"ဆယ်လူလာအား ပိုနှစ်သက်သော"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"စဖွင့်သတ်မှတ်ရန်"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"ထုတ်မည်"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"စူးစမ်းရန်"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> ရွှေ့နေစဉ်"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"ဒေတာများ ရွှေ့နေစဉ်"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ရွှေ့ပြီး၏"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"<xliff:g id="NAME">%s</xliff:g> သို့ ဒေတာ ရွှေ့ခဲ့၏"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"ဒေတာမရွှေ့နိုင်ပါ"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"မူရင်းနေရာတွင် ဒေတာ ကျန်ခဲ့၏"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"တိုက်ဆိုင်သော ပြုလုပ်ချက် ရှာမတွေ့ပါ"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"မီဒီယာထွက်ပေါက်အား လမ်းလွှဲပြောင်းခြင်း"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"အပလီကေးရှင်းအား မီဒီယာ ထုတ်လွှတ်မှုကို အခြားပြင်ပ စက်ပစ္စည်းများသို့ လွှဲပြောင်းခွင့်ပြုပါ"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"သင့်စီမံခန့်ခွဲသူမှ အဆင့်မြှင့်ထားပါသည်။"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"သင့် အက်ဒမင်အား ဖျက်ပစ်ရန်"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ဘက်ထရီသက်တမ်း ကြာရှည်ခံရန်၊ ဘက်ထရီအားထိန်းသည် သင့်ကိရိယာ၏ ဆောင်ရွက်ချက်ကို  လျှော့ပေးပြီး တုန်ခါမှု၊ တည်နေရာဝန်ဆောင်မှုများနှင့်၊ နောက်ခံဒေတာအများစုကို ကန့်သတ်ပေး၏။ စင့်လုပ်ပေးရလေ့ရှိသည့် အီးမေး၊ စာပို့ခြင်းနှင့်၊ အခြားအပလီကေးရှင်းများကို ၎င်းတို့အား သင် ဖွင့်မှသာ အဆင့်မြှင့်မွမ်းမံမည်ဖြစ်၏။ \n\n ကိရိယာအား အားသွင်းနေစဉ် ဘက်ထရီအားထိန်းအား အလိုအလျောက် ပိတ်ထားသည်။"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"ခေါက်ရန်"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"မနှောက်ယှက်ပါနှင့်"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ကျချိန်"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"ရုံးရက်ညများ"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"စနေတနင်္ဂနွေများ"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> အသံပိတ်သည်"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"သင့်ကိရိယာအတွင်းပိုင်းတွင် ပြဿနာရှိနေပြီး၊ မူလစက်ရုံထုတ်အခြေအနေအဖြစ် ပြန်လည်ရယူနိုင်သည်အထိ အခြေအနေမတည်ငြိမ်နိုင်ပါ။"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"သင့်ကိရိယာအတွင်းပိုင်းတွင် ပြဿနာရှိနေ၏။ အသေးစိတ်သိရန်အတွက် ပစ္စည်းထုတ်လုပ်သူအား ဆက်သွယ်ပါ။"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 9f0f3b6..623df7b 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Av"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi er foretrukket"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobil er foretrukket"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Konfigurering"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Løs ut"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Utforsk"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> mangler"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Sett inn enheten på nytt"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Flytter <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Flytter dataene"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Flyttingen er fullført"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Dataene er flyttet til <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Kunne ikke flytte dataene"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Dataene er fremdeles på det opprinnelige stedet"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Finner ingen samsvarende aktiviteter."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Videresending av medieutdata"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Lar en app videresende medieutdata til andre eksterne enheter."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Oppdatert av administratoren"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Slettet av administratoren"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"For å bidra til å forbedre batterilevetiden reduserer batterispareren ytelsen til enheten din og begrenser vibrering, posisjonstjenester og mesteparten av bakgrunnsdataene. E-post, sending av meldinger og andre apper som er avhengig av synkronisering oppdateres kanskje ikke med mindre du åpner dem.\n\nBatterisparing slås av automatisk når enheten lader."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Skjul"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"«Ikke forstyrr»"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Nedetid"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Kvelder på ukedager"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Helgedager"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> har kuttet lyden"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Det har oppstått et internt problem på enheten din, og den kan være ustabil til du tilbakestiller den til fabrikkdata."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Det har oppstått et internt problem på enheten din. Ta kontakt med produsenten for mer informasjon."</string>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index 66f8ae2..8a72ae2 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"निष्क्रिय"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi मनपराइयो"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"सेलुलर मनपराइयो"</string>
@@ -274,10 +275,8 @@
     <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAP सन्देशहरू प्राप्त गर्न र प्रशोधन गर्न अनुप्रयोगलाई अनुमति दिन्छ। यो अनुमतिमा मोनिटर गर्ने वा तपाईँलाई पठाइएका सन्देशहरू तपाईँलाई नदेखाई मेट्ने क्षमता समावेश हुन्छ।"</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"चलिरहेका अनुप्रयोगहरू पुनःबहाली गर्नुहोस्"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"वर्तमानमा र भरखरै चलिरहेका कार्यहरू बारेको सूचना पुनःबहाली गर्न अनुप्रयोगलाई अनुमित दिन्छ। यसले उपकरणमा प्रयोग भएका अनुप्रयोगहरूको बारेमा सूचना पत्ता लगाउन अनुप्रयोगलाई अनुमति दिन सक्छ।"</string>
-    <!-- no translation found for permlab_manageProfileAndDeviceOwners (5979288447973722097) -->
-    <skip />
-    <!-- no translation found for permdesc_manageProfileAndDeviceOwners (106894851498657169) -->
-    <skip />
+    <string name="permlab_manageProfileAndDeviceOwners" msgid="5979288447973722097">"प्रोफाइल र यन्त्र मालिकहरू व्यवस्थापन गर्नुहोस्"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"अनुप्रयोगहरूलाई प्रोफाइल र यन्त्र मालिकहरू सेट गर्न अनुमति दिनुहोस्।"</string>
     <string name="permlab_reorderTasks" msgid="2018575526934422779">"चलिरहेका अनुप्रयोगहरूलाई पुनःक्रम गराउनुहोस्"</string>
     <string name="permdesc_reorderTasks" msgid="7734217754877439351">"कामहरूलाई अग्रभाग र पृष्ठभूमिमा सार्न अनुप्रयोगलाई अनुमति दिन्छ। अनुप्रयोगले यो तपाईँको इनपुट बिना नै गर्न सक्छ।"</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"कार मोड सक्षम गर्नुहोस्"</string>
@@ -1086,22 +1085,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"सेटअप"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"निकाल्नुहोस्"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"अन्वेषण गर्नुहोस्"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> सार्दै"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"डेटा सार्दै..."</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"सार्ने कार्य सकियो"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"डेटा <xliff:g id="NAME">%s</xliff:g> मा सारियो"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"डेटा सार्न सकिएन"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"डेटा मूल स्थानबाट छाडियो"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"कुनै मिल्ने गतिविधि पाइएन।"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"मिडिया परिणाम दिशानिर्देश गर्नुहोस्"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"मिडिया परिणामलाई अन्य बाहिरी उपकरणहरूसँग लैजानको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
@@ -1474,6 +1465,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"तपाईँको प्रशासकद्वारा अद्यावधिक गरिएको"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"तपाईँको प्रशासकद्वारा हटाइएको"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"ब्याट्रीको आयु सुधार्न, ब्याट्री रक्षकले तपाईँको यन्त्रको कार्यसम्पादन घटाउँछ र भाइब्रेसन, स्थान सेवा र बहुसंख्यक पृष्ठभूमि डेटा सीमित गर्दछ। इमेल, सन्देश, र अन्य अनुप्रयोगहरू जुन सिङ्कमा भर पर्छन् अद्यावधिक नहुन सक्छन् जबसम्म तपाईँ तिनीहरूलाई खोल्नुहुन्न\n\n ब्याट्री रक्षक स्वत: निस्कृय हुन्छ जब तपाईँको यन्त्र चार्ज हुँदै हुन्छ।"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1498,8 +1490,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"संक्षिप्त पार्नुहोस्"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"अवरोध नपुर्याउँनुहोस्"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"डाउनटाइम"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"सप्ताह रातहरू"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"सप्ताहन्त"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> द्वारा मौन गरिएको"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"तपाईंको यन्त्रसँग आन्तरिक समस्या छ, र तपाईंले फ्याक्ट्री डाटा रिसेट नगर्दासम्म यो अस्थिर रहन्छ।"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"तपाईंको यन्त्रसँग आन्तरिक समस्या छ। विवरणहरूको लागि आफ्नो निर्मातासँग सम्पर्क गर्नुहोस्।"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 7391d4b..ad2a492 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Uit"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Voorkeur voor wifi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Voorkeur voor mobiel"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configuratie"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Uitwerpen"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Verkennen"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> ontbreekt"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Plaats dit apparaat opnieuw"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> verplaatsen"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Gegevens verplaatsen"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Verplaatsen voltooid"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Gegevens verplaatst naar <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Kan gegevens niet verplaatsen"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Gegevens staan nog op originele locatie"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Geen overeenkomende activiteiten gevonden."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Media-uitvoer aansturen"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Hiermee kan een app media-uitvoer naar andere externe apparaten doorsturen."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Vragen om ontgrendelingspatroon voordat items worden losgemaakt"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Vragen om wachtwoord voordat items worden losgemaakt"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Geïnstalleerd door uw beheerder"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Geüpdatet door uw beheerder"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Verwijderd door uw beheerder"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Accubesparing beperkt de prestaties van uw apparaat, de trilstand, locatieservices en de meeste achtergrondgegevens om de gebruiksduur van de accu te verlengen.\n\nAccubesparing wordt automatisch uitgeschakeld terwijl uw apparaat wordt opgeladen."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Samenvouwen"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Niet storen"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Downtime"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Doordeweekse avonden"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Weekends"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Gedempt door <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Er is een intern probleem met uw apparaat. Het apparaat kan instabiel zijn totdat u het apparaat terugzet naar de fabrieksinstellingen."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Er is een intern probleem met uw apparaat. Neem contact op met de fabrikant voor meer informatie."</string>
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml
index af4a068..0e9658b 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa-rIN/strings.xml
@@ -274,10 +274,8 @@
     <string name="permdesc_receiveWapPush" msgid="748232190220583385">"ਐਪ ਨੂੰ WAP ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰਨ ਅਤੇ ਉਹਨਾਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਸ ਅਨੁਮਤੀ ਵਿੱਚ ਸ਼ਾਮਲ ਹੈ ਐਪ ਦੀ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਤੇ ਭੇਜੇ ਗਏ ਸੁਨੇਹਿਆਂ ਨੂੰ ਤੁਹਾਨੂੰ ਦਿਖਾਏ ਬਿਨਾਂ ਨਿਰੀਖਣ ਕਰਨ ਅਤੇ ਮਿਟਾਉਣ ਦੀ ਸਮਰੱਥਾ।"</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"ਚੱਲ ਰਹੇ ਐਪਸ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"ਐਪ ਨੂੰ ਵਰਤਮਾਨ ਵਿੱਚ ਅਤੇ ਹੁਣੇ ਜਿਹੇ ਚੱਲ ਰਹੇ ਕੰਮਾਂ ਬਾਰੇ ਵਿਸਤ੍ਰਿਤ ਜਾਣਕਾਰੀ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਹ ਐਪ ਨੂੰ ਇਸ ਬਾਰੇ ਜਾਣਕਾਰੀ ਖੋਜਣ ਦੀ ਆਗਿਆ ਦੇ ਸਕਦਾ ਹੈ ਕਿ ਡਿਵਾਈਸ ਤੇ ਕਿਹੜੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।"</string>
-    <!-- no translation found for permlab_manageProfileAndDeviceOwners (5979288447973722097) -->
-    <skip />
-    <!-- no translation found for permdesc_manageProfileAndDeviceOwners (106894851498657169) -->
-    <skip />
+    <string name="permlab_manageProfileAndDeviceOwners" msgid="5979288447973722097">"ਪ੍ਰੋਫ਼ਾਈਲ ਅਤੇ ਡਿਵਾਈਸ ਦੇ ਮਾਲਕਾਂ ਨੂੰ ਪ੍ਰਬੰਧਿਤ ਕਰੋ"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"ਪ੍ਰੋਫ਼ਾਈਲ ਦੇ ਮਾਲਕ ਅਤੇ ਡਿਵਾਈਸ ਦਾ ਮਾਲਕ ਨੂੰ ਸੈੱਟ ਕਰਨ ਲਈ ਐਪਸ ਨੂੰ ਅਨੁਮਤੀ ਦਿੰਦਾ ਹੈ।"</string>
     <string name="permlab_reorderTasks" msgid="2018575526934422779">"ਚੱਲ ਰਹੇ ਐਪਸ ਨੂੰ ਦੁਬਾਰਾ ਕ੍ਰਮ ਦਿਓ"</string>
     <string name="permdesc_reorderTasks" msgid="7734217754877439351">"ਐਪ ਨੂੰ ਕੰਮਾਂ ਨੂੰ ਅਗਲੇ ਭਾਗ ਅਤੇ ਪਿਛੋਕੜ ਵਿੱਚ ਮੂਵ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਐਪ ਤੁਹਾਡੇ ਇਨਪੁਟ ਤੋਂ ਬਿਨਾਂ ਇਹ ਕਰ ਸਕਦਾ ਹੈ।"</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"ਕਾਰ ਮੋਡ ਸਮਰੱਥ ਬਣਾਓ"</string>
@@ -1080,6 +1078,22 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"ਸੈੱਟਅੱਪ"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"ਬਾਹਰ ਕੱਢੋ"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"ਐਕਸਪਲੋਰ ਕਰੋ"</string>
+    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
+    <skip />
+    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
+    <skip />
+    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
+    <skip />
+    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
+    <skip />
+    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
+    <skip />
+    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
+    <skip />
+    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
+    <skip />
+    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
+    <skip />
     <string name="activity_list_empty" msgid="1675388330786841066">"ਕੋਈ ਮੇਲ ਖਾਂਦੀਆਂ ਗਤੀਵਿਧੀਆਂ ਨਹੀਂ ਮਿਲੀਆਂ।"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"ਰੂਟ ਮੀਡੀਆ ਆਊਟਪੁਟ"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਨੂੂੰ ਹੋਰਾਂ ਬਾਹਰੀ ਡਿਵਾਈਸਾਂ ਲਈ ਮੀਡੀਆ ਆਊਟਪੁਟ ਰੂਟ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index d87fd22..8aa5eaa 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Wył."</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Preferuj Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Preferuj sieć komórkową"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Skonfiguruj"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Wysuń"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Przeglądaj"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Brak: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Ponownie włóż urządzenie"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Przenoszę <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Przenoszę dane"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Przenoszenie zakończone"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Dane przeniesione na: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Nie udało się przenieść danych"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Dane pozostały w oryginalnej lokalizacji"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nie znaleziono pasujących działań."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Kierowanie wyjścia multimediów"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Pozwala aplikacji na kierowanie wyjściowych danych multimedialnych do innych urządzeń zewnętrznych."</string>
@@ -1484,6 +1477,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Aby odpiąć, poproś o wzór odblokowania"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Aby odpiąć, poproś o hasło"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Zainstalowany przez administratora"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Zaktualizowane przez administratora"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Usunięty przez administratora"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Aby wydłużyć czas pracy baterii, Oszczędzanie baterii ogranicza aktywność urządzenia, w tym wibracje, usługi lokalizacyjne i przetwarzanie większości danych w tle. Poczta, czat i inne synchronizowane aplikacje mogą nie aktualizować swojej zawartości, dopóki ich nie otworzysz.\n\nOszczędzanie baterii wyłącza się automatycznie podczas ładowania urządzenia."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Zwiń"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Nie przeszkadzać"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Powiadomienia wyłączone"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noce poza weekendem"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Weekendy"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Ściszone przez: <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"W Twoim urządzeniu wystąpił problem wewnętrzny. Może być ono niestabilne, dopóki nie przywrócisz danych fabrycznych."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"W Twoim urządzeniu wystąpił problem wewnętrzny. Skontaktuj się z jego producentem, by otrzymać szczegółowe informacje."</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 28c14da..a7f9eb9 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desativado"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Rede Wi-Fi preferida"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Rede móvel preferida"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configuração"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Ejetar"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explorar"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> em falta"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reinserir este dispositivo"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"A mover <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"A mover dados"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Transferência concluída"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Os dados foram movidos para <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Não foi possível mover os dados"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Os dados permaneceram na localização original"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Não foi encontrada nenhuma atividade correspondente."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Encaminhar saída de som multimédia"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que a aplicação encaminhe a saída de som multimédia para outros dispositivos externos."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pedir sequência de desbloqueio antes de soltar"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Pedir palavra-passe antes de soltar"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Instalado pelo administrador"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Atualizado pelo administrador"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminado pelo administrador"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Para ajudar a melhorar a autonomia da bateria, a poupança de bateria reduz o desempenho do seu dispositivo e limita a vibração, os serviços de localização e a maioria dos dados em segundo plano. O email, as mensagens e outras aplicações que dependem da sincronização não podem ser atualizados exceto se os abrir.\n\nA poupança de bateria desliga-se automaticamente quando o dispositivo está a carregar."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Reduzir"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Não incomodar"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Período de inatividade"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noites de dias úteis"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Fins de semana"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Som desativado por <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Existe um problema interno no seu dispositivo e pode ficar instável até efetuar uma reposição de dados de fábrica."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Existe um problema interno no seu dispositivo. Contacte o fabricante para obter mais informações."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index b1551b0..a64b183 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desativado"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi preferido"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Celular preferido"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configurar"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Ejetar"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explorar"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> ausente"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reinserir este dispositivo"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Movendo <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Movendo dados"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Transferência concluída"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Dados movidos para <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Não foi possível mover os dados"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Dados deixados no local original"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nenhum atividade correspondente foi encontrada."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Rotear saída de mídia"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite que um app faça o roteamento de saída de mídia para outros dispositivos externos."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pedir padrão de desbloqueio antes de liberar"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Pedir senha antes de liberar"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Instalado pelo seu administrador"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Atualizado pelo administrador"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Excluído pelo seu administrador"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Para ajudar a melhorar a duração da bateria, o economizador de bateria reduz o desempenho e os limites de vibração do dispositivo, os serviços de localização e a maioria dos dados de segundo plano. E-mail, mensagens e outros aplicativos que dependem de sincronização não podem ser atualizados, a não ser que você os abra.\n\nO economizador de bateria é desligado automaticamente quando o dispositivo está sendo carregado."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Recolher"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Não perturbe"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Tempo de inatividade"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noites em dias úteis"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Finais de semana"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Som desativado por <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Há um problema interno com seu dispositivo. Ele pode ficar instável até que você faça a redefinição para configuração original."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Há um problema interno com seu dispositivo. Entre em contato com o fabricante para saber mais detalhes."</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 1790122..e77e85f 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -130,6 +130,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Dezactivată"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Se preferă conexiunea Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Se preferă conexiunea mobilă"</string>
@@ -1085,22 +1086,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Configurați"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Scoateți"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Explorați"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> lipsește"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reintroduceți dispozitivul"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Se mută <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Se mută datele"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Mutare finalizată"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Date mutate pe <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Nu s-au putut muta datele"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Au rămas date în locația inițială"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nu s-a găsit nicio activitate potrivită."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Direcţionează rezultatele media"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Permite unei aplicații să direcţioneze rezultate media către alte dispozitive externe."</string>
@@ -1475,6 +1468,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Solicită modelul pentru deblocare înainte de a anula fixarea"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Solicită parola înainte de a anula fixarea"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Instalat de administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizat de un administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Șters de administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Pentru a îmbunătăți autonomia bateriei, funcția de economisire a energiei reduce performanțele dispozitivului și limitează vibrațiile, serviciile de localizare și majoritatea datelor de fundal. Este posibil ca e-mailurile, mesageria și alte aplicații care depind de sincronizare să nu se actualizeze dacă nu le deschideți.\n\nFuncția de economisire a energiei se dezactivează automat când dispozitivul se încarcă."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1503,8 +1497,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Restrângeți"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Nu deranja"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Inactivitate"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Serile zilelor lucrătoare"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Weekenduri"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Dezactivate de <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"A apărut o problemă internă pe dispozitiv, iar acesta poate fi instabil până la revenirea la setările din fabrică."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"A apărut o problemă internă pe dispozitiv. Pentru detalii, contactați producătorul."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index b9eab57..9270d76 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Отключено"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Приоритет Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Приоритет моб. сети"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Настроить"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Извлечь"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Обзор"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Перенос приложения <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Перенос данных"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Перенос завершен"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Перенос данных сюда: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Не удалось перенести данные"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Данные остались там же, где были"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Подходящих действий не найдено."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Перенаправление мультимедийных данных"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Приложение сможет направлять поток мультимедиа на другие внешние устройства."</string>
@@ -1484,6 +1477,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Обновлено администратором"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Удалено администратором"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Чтобы продлить время работы устройства от батареи, в режиме энергосбережения снижается производительность, а также ограничивается использование вибрации, геолокации и фоновой передачи данных. Данные, требующие синхронизации, могут обновляться только когда вы откроете приложение.\n\nРежим энергосбережения автоматически отключается во время зарядки устройства."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Свернуть"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Не беспокоить"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Режим оповещения"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Будние вечера"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Выходные дни"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Звук отключен приложением \"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>\""</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Произошла внутренняя ошибка, и устройство может работать нестабильно, пока вы не выполните сброс настроек."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Произошла внутренняя ошибка. Обратитесь к производителю устройства за подробными сведениями."</string>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index f21d99e..0939f33 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ක්‍රියාවිරහිතයි"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi වඩා කැමතියි"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"සෙලියුලර් වඩා කැමතියි"</string>
@@ -1080,22 +1081,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"ස්ථාපනය"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"ගැලවීම"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"ගවේෂණය කරන්න"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> ගෙන යමින්"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"දත්ත ගෙන යමින්"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ගෙන යාම සම්පූර්ණ කරන්න"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"දත්ත <xliff:g id="NAME">%s</xliff:g> වෙත ගෙන යන ලදී"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"දත්ත ගෙන යාමට නොහැකි විය"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"මුල් ස්ථානයෙහි ඉතිරි දත්ත"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"ගැලපෙන ක්‍රියාකාරකම් හමු නොවුණි."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"මාධ්‍ය ප්‍රතිදානයේ මාර්ගගත කිරීම"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"වෙනත් බාහිර උපාංග වෙත මාධ්‍ය ප්‍රතිදානය යැවීමට යෙදුමට අවසර දෙන්න."</string>
@@ -1468,6 +1461,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"ඔබගේ පරිපාලක විසින් යාවත්කාලීන කරන ලදී"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"ඔබගේ පරිපාලක විසින් මකන ලද"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"බැටරි ආයු කාලය වැඩිදියුණු කිරීමට උදවු කිරීමට, බැටරි සුරැකුම ඔබේ උපාංගයේ ක්‍රියාකාරීත්වය අඩුකරන අතර කම්පනය, පිහිටීම් සේවා, සහ බොහෝමයක් පසුබිම් දත්ත සීමා කරයි. ඔබ ඒවා විවෘත නොකරන්නේ නම් මිස ඊමේල්, පණිවිඩකරණය, සහ සමමුහුර්ත කිරීම මත රඳා පවතින වෙනත් යෙදුම් යාවත්කාලීන නොවිය හැකිය.\n\nඔබේ උපාංගය ආරෝපණය වන විට බැටරි සුරැකුම ස්වයංක්‍රියව අක්‍රිය වේ."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1492,8 +1486,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"හකුළන්න"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"බාධා නොකරන්න"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"බිඳවැටුම් කාලය"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"සතියේ රාත්‍රි වල"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"සති අන්ත"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> විසින් නිශ්ශබ්ද කරන ලදි"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"ඔබේ උපාංගය සමගින් ගැටලුවක් ඇති අතර, ඔබේ කර්මාන්තශාලා දත්ත යළි සකසන තෙක් එය අස්ථායි විය හැකිය."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"ඔබේ උපාංගය සමගින් අභ්‍යන්තර ගැටලුවක් ඇත. විස්තර සඳහා ඔබේ නිෂ්පාදක අමතන්න."</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 8e97275..41d8409 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Vypnuté"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Uprednostniť Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Uprednostniť mobilné pripojenie"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Nastavenie"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Odpojiť"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Preskúmať"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Chýba: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Opäť vložte toto zariadenie"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Presúva sa aplikácia <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Presúvajú sa údaje"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Presun bol dokončený"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Údaje boli presunuté do úložiska <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Presun údajov zlyhal"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Údaje boli ponechané v pôvodnom umiestnení"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Nenašli sa žiadne zodpovedajúce aktivity."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Smerovanie výstupu médií"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Umožňuje aplikácii smerovať výstup médií do ďalších externých zariadení."</string>
@@ -1484,6 +1477,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pred uvoľnením požiadať o bezpečnostný vzor"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Pred uvoľnením požiadať o heslo"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Inštalovaný správcom"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Aktualizované správcom"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Odstránený správcom"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Šetrič batérie znižuje výkonnosť vášho zariadenia a obmedzuje vibrovanie, služby určovania polohy a väčšinu údajov na pozadí, aby tak pomohol predĺžiť výdrž batérie. E-mailová aplikácia, aplikácia na odosielanie správ SMS a MMS a ďalšie aplikácie, ktoré sú založené na synchronizácii, sa pravdepodobne aktualizujú až po ich otvorení.\n\nŠetrič batérie sa automaticky vypne, keď zariadenie začnete nabíjať."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Zbaliť"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Nerušiť"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Doba pokoja"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noci cez týždeň"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Víkendy"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Stlmené aplikáciou <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Vo vašom zariadení došlo k internému problému. Môže byť nestabilné, kým neobnovíte jeho továrenské nastavenia."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Vo vašom zariadení došlo k internému problému. Ak chcete získať podrobné informácie, obráťte sa na jeho výrobcu."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 0ed81d3..234bd6a 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Izklopljeno"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Prednostno – Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Prednostno – mobilno omrežje"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Nastavitev"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Izvrzite"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Raziščite"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Ni shrambe <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Znova vstavite to napravo"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Premikanje aplikacije <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Premikanje podatkov"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Premik je dokončan"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Podatki so premaknjeni v shrambo <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Premik podatkov ni uspel"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Podatki so ostali na izvirni lokaciji"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Ni ustreznih dejavnosti."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Preusmeritev predstavnosti"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Aplikaciji omogoča preusmerjanje predstavnosti v druge zunanje naprave."</string>
@@ -1484,6 +1477,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pred odpenjanjem vprašaj za vzorec za odklepanje"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Pred odpenjanjem vprašaj za geslo"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Namestil skrbnik"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Posodobil skrbnik"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Izbrisal skrbnik"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Varčevanje z energijo akumulatorja podaljša čas njegovega delovanja tako, da zmanjša zmogljivost delovanja naprave in omeji vibriranje, lokacijske storitve ter prenos večine podatkov v ozadju. Aplikacije za e-pošto, sporočanje in drugo, ki uporabljajo sinhroniziranje, se morda ne posodabljajo, razen če jih odprete.\n\nVarčevanje z energijo akumulatorja se samodejno izklopi med polnjenjem akumulatorja naprave."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Strni"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ne moti"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Čas nedelovanja"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Noči med tednom"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Vikendi"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Izklop zvoka: <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Vaša naprava ima notranjo napako in bo morda nestabilna, dokler je ne ponastavite na tovarniške nastavitve."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Vaša naprava ima notranjo napako. Če želite več informacij, se obrnite na proizvajalca."</string>
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml
index eb2f6e3..ea04ad8 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq-rAL/strings.xml
@@ -129,7 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
-    <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Joaktiv"</string>
+    <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Çaktivizuar"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Preferohet Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Preferohet rrjeti celular"</string>
     <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Vetëm Wi-Fi"</string>
@@ -274,10 +274,8 @@
     <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Lejon aplikacionin të marrë dhe përpunojë mesazhe WAP. 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_getTasks" msgid="6466095396623933906">"gjej aplikacionet në punë"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"Lejon aplikacionin të gjejë informacione mbi detyrat aktuale dhe të fundit në punë. Kjo mund të lejojë aplikacionin të zbulojë informacione rreth aplikacioneve të përdorura në pajisje."</string>
-    <!-- no translation found for permlab_manageProfileAndDeviceOwners (5979288447973722097) -->
-    <skip />
-    <!-- no translation found for permdesc_manageProfileAndDeviceOwners (106894851498657169) -->
-    <skip />
+    <string name="permlab_manageProfileAndDeviceOwners" msgid="5979288447973722097">"Menaxho pronarët e profilit dhe të pajisjes"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"Lejo aplikacionet që të caktojnë pronarët e profilit dhe pronarin e pajisjes"</string>
     <string name="permlab_reorderTasks" msgid="2018575526934422779">"ri-poziciono aplikacionet në punë"</string>
     <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Lejon aplikacionin të zhvendosë detyra në plan të parë dhe në sfond. Aplikacioni mund ta bëjë këtë pa hyrjen tënde."</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"aktivizo modalitetin \"në makinë\""</string>
@@ -422,7 +420,7 @@
     <string name="permdesc_nfc" msgid="7120611819401789907">"Lejon aplikacionin të komunikojë me etiketimet e \"Komunikimit të fushës së afërt (NFC)\", kartat dhe lexuesit."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"çaktivizo kyçjen e ekranit"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Lejon aplikacionin të çaktivizojë kyçjen e tasteve dhe çdo mbrojtje të lidhur me fjalëkalimin. Për shembull, telefoni çaktivizon kyçjen e tasteve kur merr një telefonatë hyrëse, pastaj riaktivizon kyçjen e tasteve kur mbaron telefonata."</string>
-    <string name="permlab_manageFingerprint" msgid="5640858826254575638">"të qaset te hardueri i gjurmës së gishtit"</string>
+    <string name="permlab_manageFingerprint" msgid="5640858826254575638">"të menaxhojë harduerin e gjurmës së gishtit"</string>
     <string name="permdesc_manageFingerprint" msgid="178208705828055464">"E lejon aplikacionin që të aktivizojë metoda për të shtuar dhe për të fshirë shabllonet e gjurmës së gishtit për përdorim."</string>
     <string name="permlab_useFingerprint" msgid="3150478619915124905">"të përdorë harduerin e gjurmës së gishtit"</string>
     <string name="permdesc_useFingerprint" msgid="9165097460730684114">"E lejon aplikacinin që të përdorë harduerin e gjurmës së gishtit për verifikimin"</string>
@@ -435,7 +433,7 @@
   </string-array>
     <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Hardueri i gjurmës së gishtit nuk mundësohet."</string>
     <string name="fingerprint_error_no_space" msgid="1055819001126053318">"Gjurma e gishtit nuk mund të ruhet. Hiq një gjurmë gishti ekzistuese."</string>
-    <string name="fingerprint_error_timeout" msgid="3927186043737732875">"U arrit vonesa e skadimit për gjurmën e gishtit. Provo përsëri."</string>
+    <string name="fingerprint_error_timeout" msgid="3927186043737732875">"Koha e veprimit për gjurmën e gishtit skadoi. Provo përsëri."</string>
     <string name="fingerprint_error_canceled" msgid="4402024612660774395">"Operacioni i gjurmës së gishtit u anulua."</string>
     <string name="fingerprint_error_lockout" msgid="5536934748136933450">"Keni bërë shumë tentativa. Provo përsëri më vonë."</string>
     <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"Provo përsëri."</string>
@@ -939,9 +937,9 @@
     <string name="new_app_action" msgid="5472756926945440706">"Fillo <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
     <string name="new_app_description" msgid="1932143598371537340">"Ndalo aplikacionin e vjetër pa e ruajtur."</string>
     <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> e ka kaluar kufirin e memories"</string>
-    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"Hedhja e dëmtimit të grumbullimit është marrë; prek për ta ndarë"</string>
-    <string name="dump_heap_title" msgid="5864292264307651673">"Të ndahet hedhja e dëmtimit të grumbullimit?"</string>
-    <string name="dump_heap_text" msgid="4809417337240334941">"Procesi <xliff:g id="PROC">%1$s</xliff:g> ka kaluar kufirin e tij të memories së procesit me <xliff:g id="SIZE">%2$s</xliff:g>. Ofrohet një hedhje e dëmtimit të grumbullimit që ta ndani me zhvilluesit e tij. Trego kujdes: kjo hedhje e dëmtimit të grumbullimit mund të përmbajë çdo informacion tëndin personal ku ka qasje ky aplikacion."</string>
+    <string name="dump_heap_notification_detail" msgid="2075673362317481664">"Skedarët fiktivë u stivosën; prek për t\'i ndarë"</string>
+    <string name="dump_heap_title" msgid="5864292264307651673">"Të ndahet stiva e skedarëve fiktivë?"</string>
+    <string name="dump_heap_text" msgid="4809417337240334941">"Procesi <xliff:g id="PROC">%1$s</xliff:g> ka kaluar kufirin e tij të memories së procesit me <xliff:g id="SIZE">%2$s</xliff:g>. Mundësohet stivimi e skedarëve fiktivë në mënyrë që t\'i ndani me zhvilluesit e tyre. Bëni kujdes pasi stiva e skedarëve fiktivë mund të përmbajë ndonjë informacion tëndin personal ku aplikacioni ka qasje."</string>
     <string name="sendText" msgid="5209874571959469142">"Zgjidh një veprim për tekstin"</string>
     <string name="volume_ringtone" msgid="6885421406845734650">"Volumi i ziles"</string>
     <string name="volume_music" msgid="5421651157138628171">"Volumi i klipeve \"media\""</string>
@@ -1080,6 +1078,22 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Konfigurimi"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Nxirr"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Eksploro"</string>
+    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
+    <skip />
+    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
+    <skip />
+    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
+    <skip />
+    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
+    <skip />
+    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
+    <skip />
+    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
+    <skip />
+    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
+    <skip />
+    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
+    <skip />
     <string name="activity_list_empty" msgid="1675388330786841066">"Nuk u gjet asnjë aktivitet që përputhet."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Kalo daljet e medias"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Lejon një aplikacion të kalojë daljet mediatike në pajisje të tjera të jashtme."</string>
@@ -1445,7 +1459,7 @@
     <string name="managed_profile_label_badge" msgid="2355652472854327647">"Puna <xliff:g id="LABEL">%1$s</xliff:g>"</string>
     <string name="lock_to_app_toast" msgid="7570091317001980053">"Për t\'i hequr gozhdimin ekranit, prek dhe mbaj shtypur njëkohësisht \"Prapa\" dhe \"Përmbledhje\"."</string>
     <string name="lock_to_app_toast_accessible" msgid="8239120109365070664">"Për t\'i hequr gozhdimin ekranit, prek dhe mbaj shtypur \"Përmbledhje\"."</string>
-    <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Ekrani është i mbërthyer. Anulimi i mbërthimit nuk lejohet nga organizata jote."</string>
+    <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 t\'i heqësh gozhdimin"</string>
@@ -1475,7 +1489,7 @@
     <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g> / <xliff:g id="REST">%2$s</xliff:g>"</string>
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Shpalos"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Mos shqetëso"</string>
-    <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Koha joaktive"</string>
+    <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"periudha joaktive"</string>
     <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Natën gjatë javës"</string>
     <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Fundjava"</string>
     <string name="muted_by" msgid="6147073845094180001">"Lënë në heshtje nga <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
@@ -1487,7 +1501,7 @@
     <string name="stk_cc_ss_to_dial" msgid="2151304435775557162">"Kërkesa SS është e modifikuar në kërkesën DIAL."</string>
     <string name="stk_cc_ss_to_ussd" msgid="3951862188105305589">"Kërkesa SS është modifikuar në kërkesën USSD."</string>
     <string name="stk_cc_ss_to_ss" msgid="5470768854991452695">"Kërkesa SS është e modifikuar në kërkesën e re SS."</string>
-    <string name="usb_midi_peripheral_name" msgid="7221113987741003817">"Porta periferike USB e Android"</string>
+    <string name="usb_midi_peripheral_name" msgid="7221113987741003817">"Porta periferike USB e Androidit"</string>
     <string name="usb_midi_peripheral_manufacturer_name" msgid="7176526170008970168">"Android"</string>
     <string name="usb_midi_peripheral_product_name" msgid="4971827859165280403">"Porta periferike USB"</string>
     <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"Opsione të tjera"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index c18d98f..b5c17f9 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -130,6 +130,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Искључено"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Предност има Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Предност има мобилна мрежа"</string>
@@ -1085,22 +1086,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Подешавање"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Избаци"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Истражи"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Преноси се <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Подаци се преносе"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Пренос је завршен"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Подаци су пренесени на уређај <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Пренос података није успео"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Подаци су остали на оригиналној локацији"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Није пронађена ниједна подударна активност."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Усмеравање излаза медија"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Дозвољава апликацији да усмерава излаз медија на друге спољне уређаје."</string>
@@ -1475,6 +1468,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Ажурирао је администратор"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Избрисао је ваш адмиистратор"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Да би продужила време трајања батерије, уштеда батерије смањује перформансе уређаја и ограничава вибрацију, услуге локације и већину позадинских података. Имејл, размена порука и друге апликације које се ослањају на синхронизацију можда неће да се ажурирају ако их не отворите.\n\nУштеда батерије се аутоматски искључује када се уређај пуни."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1503,8 +1497,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Скупи"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Не узнемиравај"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Одмор"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Радним данима увече"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Викендима"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Звук је искључио/ла <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Дошло је до интерног проблема у вези са уређајем и можда ће бити нестабилан док не обавите ресетовање на фабричка подешавања."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Дошло је до интерног проблема у вези са уређајем. Потражите детаље од произвођача."</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 6981717..57a833b 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Av"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi i första hand"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobil i första hand"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Konfiguration"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Mata ut"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Utforska"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> saknas"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Sätt i enheten igen"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Flyttar <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Flyttar data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Flytten är klar"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data har flyttats till <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Det gick inte att flytta data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data kvar på ursprunglig plats"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Det gick inte att hitta några matchande aktiviteter."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Omdirigera medieuppspelning"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Tillåter att appen omdirigerar medieuppspelningar till andra externa enheter."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Be om upplåsningsmönster innan skärmen slutar fästas"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Be om lösenord innan skärmen slutar fästas"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Paketet har installerats av administratören"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Uppdaterat av administratören"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Paketet har raderats av administratören"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"I batterisparläget reduceras enhetens prestanda så att batteriet ska räcka längre och vibration, platstjänster samt den mesta användningen av bakgrundsdata begränsas. Det kan hända att appar för e-post, sms och annat som kräver synkronisering inte uppdateras förrän du öppnar dem.\n\nBatterisparläget inaktiveras automatiskt när enheten laddas."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Komprimera"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Stör ej"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Avbrottstid"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Veckodagskvällar"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Helger"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> har stängt av ljudet"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Ett internt problem har uppstått i enheten, och det kan hända att problemet kvarstår tills du återställer standardinställningarna."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Ett internt problem har uppstått i enheten. Kontakta tillverkaren om du vill veta mer."</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index e807ca1..28d9429 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -129,6 +129,9 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for wfcDataSpnFormat (1118052028767666883) -->
+    <skip />
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Imezimwa"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi inapedelewa"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mitandao ya simu za mkononi inapendelewa"</string>
@@ -1078,22 +1081,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Sanidi"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Ondoa"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Chunguza"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> haipo"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Weka kifaa hiki tena"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Inahamisha <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Inahamisha data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Imekamilisha kuhamisha"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data ilihamishiwa kwenye <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Haikuweza kuhamisha data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data iliachwa katika eneo la awali"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Hakuna shughuli zinazolingana zilizopatikana."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Fuatalia utoaji wa habari"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Inaruhusu programu kufuatilia utoaji wa habari kwa vifaa vingine vya nje."</string>
@@ -1466,6 +1461,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Omba mchoro wa kufungua kabla hujabandua"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Omba nenosiri kabla hujabandua"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Kilisakinishwa na msimamizi wako"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Kimesasiswa na msimamizi wako"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Kilifutwa na msimamizi wako"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Kusaidia kuboresha muda wa matumizi ya betri, inayookoa betri hupunguza utendaji wa kifaa chako na kupunguza mtetemo, huduma za utambuzi wa mahali, na data nyingi ya chini chini. Barua pepe, ujumbe na programu nyingine zinazotege,ea usawazishaji huenda zisisasishwe usipozifungua.\n\nInayookoa betri hujizima kiotomatiki kifaa chako kinapokuwa kinachaji."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1486,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Kunja"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Usinisumbue"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Wakati wa hali tuli"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Usiku wa siku za wiki"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Wikiendi"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Sauti imezimwa na <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Kuna hitilafu ya ndani ya kifaa chako, na huenda kisiwe thabiti mpaka urejeshe mipangilio ya kiwandani."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Kuna hitilafu ya ndani ya kifaa chako. Wasiliana na mtengenezaji wa kifaa chako kwa maelezo."</string>
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml
index f07fcac..88a8b91 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta-rIN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"முடக்கப்பட்டுள்ளது"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"வைஃபைக்கு முன்னுரிமை"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"செல்லுலாருக்கு முன்னுரிமை"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"அமைவு"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"வெளியேற்று"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"உலாவுக"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g>ஐ நகர்த்துகிறது"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"தரவு நகர்த்தப்படுகிறது"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"நகர்த்தப்பட்டது"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"<xliff:g id="NAME">%s</xliff:g>க்குத் தரவு நகர்த்தப்பட்டது"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"தரவை நகர்த்த முடியவில்லை"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"அசல் இடத்திலிருந்து தரவு நகர்த்தப்படவில்லை"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"பொருந்தும் செயல்பாடுகள் கண்டறியப்படவில்லை."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"மீடியா அவுட்புட்டை வழிசெலுத்துதல்"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"மீடியாவைப் பிற வெளிப்புறச் சாதனங்களுக்கு வெளியீடாக வழிகாட்ட பயன்பாட்டை அனுமதிக்கிறது."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"உங்கள் நிர்வாகி புதுப்பித்துள்ளார்"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"நிர்வாகி நீக்கிவிட்டார்"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"பேட்டரி ஆயுளை மேம்படுத்த, பேட்டரி சேமிப்பான் உங்கள் சாதனத்தின் செயல்திறனைக் குறைத்து, அதிர்வு, இடச் சேவைகள் மற்றும் பெரும்பாலான பின்புலத் தரவு போன்றவற்றைக் கட்டுப்படுத்துகிறது. ஒத்திசைவைச் சார்ந்துள்ள மின்னஞ்சல், செய்தியிடல் மற்றும் பிற பயன்பாடுகளானது அவற்றைத் திறக்கும்வரையில் புதுப்பிக்கப்படாமல் போகக்கூடும்.\n\nஉங்கள் ஃபோன் சார்ஜ் செய்யப்படும்போது, பேட்டரி சேமிப்பான் தானாகவே முடங்கும்."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"சுருக்கு"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"தொந்தரவு செய்ய வேண்டாம்"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"செயலற்ற நேரம்"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"வார நாட்களின் இரவுகள்"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"வார இறுதி நாட்கள்"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ஒலியடக்கினார்"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"சாதனத்தில் அகச் சிக்கல் இருக்கிறது, அதனை ஆரம்பநிலைக்கு மீட்டமைக்கும் வரை நிலையற்று இயங்கலாம்."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"சாதனத்தில் அகச் சிக்கல் இருக்கிறது. விவரங்களுக்கு சாதன தயாரிப்பாளரைத் தொடர்புகொள்ளவும்."</string>
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml
index a36c8fe..685d75f 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te-rIN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ఆఫ్‌లో ఉంది"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fiకి ప్రాధాన్యత"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"సెల్యులార్‌కి ప్రాధాన్యత"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"సెటప్ చేయి"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"తొలగించు"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"విశ్లేషించు"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g>ని తరలిస్తోంది"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"డేటాను తరలిస్తోంది"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"తరలింపు పూర్తయింది"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"డేటా <xliff:g id="NAME">%s</xliff:g>కి తరలించబడింది"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"డేటాను తరలించలేకపోయింది"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"డేటా అసలు స్థానంలో అలాగే ఉంది"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"సరిపోలే కార్యాచరణలు కనుగొనబడలేదు."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"ప్రసార మాధ్యమ అవుట్‌పుట్‌ను మళ్లించడం"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"మీడియా అవుట్‌పుట్‌ను ఇతర బాహ్య పరికరాలకు మళ్లించడానికి అనువర్తనాన్ని అనుమతిస్తుంది."</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"మీ నిర్వాహకుడు నవీకరించారు"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"మీ నిర్వాహకులు తొలగించారు"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"బ్యాటరీ జీవితకాలాన్ని మెరుగుపరచడంలో సహాయపడటానికి, బ్యాటరీ సేవర్ మీ పరికరం పనితీరును తగ్గిస్తుంది మరియు వైబ్రేషన్‌ను, స్థాన సేవలను మరియు ఎక్కువ నేపథ్య డేటాను పరిమితం చేస్తుంది. ఇమెయిల్, మెసేజింగ్ మరియు సమకాలీకరణపై ఆధారపడే ఇతర అనువర్తనాలు మీరు వాటిని తెరిస్తే మినహా నవీకరించబడవు.\n\nమీ పరికరం ఛార్జ్ అవుతున్నప్పుడు బ్యాటరీ సేవర్ స్వయంచాలకంగా ఆఫ్ అవుతుంది."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"కుదించండి"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"అంతరాయం కలిగించవద్దు"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ముఖ్యమైన పనిలో ఉన్నప్పుడు"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"వారపురాత్రులు"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"వారాంతాలు"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> ద్వారా మ్యూట్ చేయబడింది"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"మీ పరికరంతో అంతర్గత సమస్య ఏర్పడింది మరియు మీరు ఫ్యాక్టరీ డేటా రీసెట్ చేసే వరకు అస్థిరంగా ఉంటుంది."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"మీ పరికరంతో అంతర్గత సమస్య ఏర్పడింది. వివరాల కోసం మీ తయారీదారుని సంప్రదించండి."</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 84d31a3..a658c19 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ปิด"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"ต้องการใช้ Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"ต้องการใช้เครือข่ายมือถือ"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"ตั้งค่า"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"นำอุปกรณ์ออก"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"สำรวจ"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"กำลังย้าย <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"กำลังย้ายข้อมูล"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"ย้ายเสร็จสมบูรณ์แล้ว"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"ย้ายข้อมูลไปยัง <xliff:g id="NAME">%s</xliff:g> แล้ว"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"ไม่สามารถย้ายข้อมูล"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"ข้อมูลที่เหลืออยู่ในตำแหน่งเดิม"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"ไม่พบกิจกรรมที่ตรงกัน"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"กำหนดเส้นทางเอาต์พุตของสื่อ"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"อนุญาตให้แอปพลิเคชันกำหนดเส้นทางเอาต์พุตของสื่อไปยังอุปกรณ์ภายนอกอื่นๆ"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"อัปเดตโดยผู้ดูแลระบบ"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"ลบโดยผู้ดูแลระบบของคุณ"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"เพื่อช่วยปรับปรุงอายุการใช้งานแบตเตอรี่ โหมดประหยัดแบตเตอรี่จะลดการทำงานของอุปกรณ์และจำกัดการสั่น บริการตำแหน่ง และข้อมูลแบ็กกราวด์ส่วนใหญ่ สำหรับอีเมล การรับส่งข้อความ และแอปอื่นๆ ที่ใช้การซิงค์จะไม่อัปเดตหากคุณไม่เปิดขึ้นมา\n\nโหมดประหยัดแบตเตอรี่จะปิดโดยอัตโนมัติขณะชาร์จอุปกรณ์"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"ยุบ"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"ห้ามรบกวน"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ช่วงเวลาเครื่องไม่ทำงาน"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"คืนวันจันทร์-ศุกร์"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"วันหยุดสุดสัปดาห์"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"ปิดเสียงโดย <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"อุปกรณ์ของคุณเกิดปัญหาภายในเครื่อง อุปกรณ์อาจทำงานไม่เสถียรจนกว่าคุณจะรีเซ็ตข้อมูลเป็นค่าเริ่มต้น"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"อุปกรณ์ของคุณเกิดปัญหาภายในเครื่อง โปรดติดต่อผู้ผลิตเพื่อขอรายละเอียดเพิ่มเติม"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index e343404..343344a 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Naka-off"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Mas gusto ang Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mas gusto ang cellular"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"I-setup"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"I-eject"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"I-explore"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"Nawawala ang <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Ilagay muli ang device na ito"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Inililipat ang <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Naglilipat ng data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Nakumpleto na ang paglilipat"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Inilipat ang data sa <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Hindi mailipat ang data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Iniwan ang data sa orihinal na lokasyon"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Walang nahanap na mga tumutugmang aktibidad."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"I-route ang output ng media"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Pinapayagan ang application na mag-route ng output ng media sa iba pang mga panlabas na device."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Humingi ng pattern sa pag-unlock bago mag-unpin"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Humingi ng password bago mag-unpin"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Na-install ng iyong administrator"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Na-update ng iyong administrator"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Na-delete ng iyong administrator"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Upang matulungang pagbutihin ang tagal ng baterya, binabawasan ng pangtipid ng baterya ang pagganap ng iyong device at nililimitahan ang pag-vibrate, mga serbisyo ng lokasyon at karamihan sa data ng background. Maaaring hindi mag-update ang email, pagmemensahe at iba pang mga app na umaasa sa pagsi-sync maliban kung buksan mo ang mga iyon.\n\nAwtomatikong nag-o-off ang pangtipid ng baterya kapag nagcha-charge ang iyong device."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"I-collapse"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Huwag istorbohin"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Walang serbisyo"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Mga Weeknight"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Sabado at Linggo"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Na-mute ng <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"May internal na problema sa iyong device, at maaaring hindi ito maging stable hanggang sa i-reset mo ang factory data."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"May internal na problema sa iyong device. Makipag-ugnayan sa iyong manufacturer upang malaman ang mga detalye."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index c9166cd..574e45e 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Kapalı"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Kablosuz bağlantı tercih edildi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Hücresel ağ tercih edildi"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Kurulum"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Çıkar"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Keşfedin"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> bulunamıyor"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Bu cihazı yeniden yerleştirin"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> taşınıyor"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Veriler taşınıyor"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Taşıma işlemi tamamlandı"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Veriler <xliff:g id="NAME">%s</xliff:g> depolama birimine taşındı"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Veriler taşınamadı"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Orijinal konumda veri kaldı"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Eşleşen hiçbir etkinlik bulunamadı."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Medya çıktısını yönlendir"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Uygulamaya medya çıktısını başka harici cihazlara yönlendirme izni verir."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Sabitlemeyi kaldırmadan önce kilit açma desenini sor"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Sabitlemeyi kaldırmadan önce şifre sor"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Yöneticiniz tarafından yüklendi"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Yöneticiniz tarafından güncellendi"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Yöneticiniz tarafından silindi"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Pil tasarrufu özelliği, pil ömrünü iyileştirmeye yardımcı olmak için cihazın performansını düşürür, titreşimi, konum hizmetlerini ve arka plan verilerinin çoğunu sınırlar. Senkronizasyona dayalı olarak çalışan e-posta, mesajlaşma uygulamaları ve diğer uygulamalar, bunları açmadığınız sürece güncellenmeyebilir.\n\nCihazınız şarj olurken pil tasarrufu otomatik olarak kapatılır."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Daralt"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Rahatsız etmeyin"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Bildirim istenmeyen zaman"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Hafta içi her gece"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Hafta sonu"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> tarafından kapatıldı"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Cihazınızla ilgili dahili bir sorun oluştu ve fabrika verilerine sıfırlama işlemi gerçekleştirilene kadar kararsız çalışabilir."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Cihazınızla ilgili dahili bir sorun oluştu. Ayrıntılı bilgi için üreticinizle iletişim kurun."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 81c24a4..02114ec 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -131,6 +131,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Вимкнено"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi за умовчанням"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Мобільна мережа за умовчанням"</string>
@@ -1092,22 +1093,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Налаштувати"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Відключити"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Переглянути"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Переміщення додатка <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Переміщення даних"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Дані переміщено"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Дані переміщено на пристрій <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Не вдалося перемістити дані"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Дані не переміщено"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Відповідні дії не знайдено."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Скеровувати вивід медіа-даних"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Дозволяє програмі скеровувати вивід медіа-даних на інші зовнішні пристрої."</string>
@@ -1484,6 +1477,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Оновлено адміністратором"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Видалив адміністратор"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Щоб подовжити час роботи акумулятора, функція заощадження заряду акумулятора знижує продуктивність пристрою, а також обмежує вібрацію, функції служб локації та передавання більшості фонових даних. Електронна пошта, чати й інші додатки, які синхронізуються, можуть не оновлюватися, доки ви їх не відкриєте.\n\nФункція заощадження заряду акумулятора автоматично вимикається під час заряджання пристрою."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1516,8 +1510,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Згорнути"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Не турбувати"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Простій"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Увечері в робочі дні"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"У вихідні"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> вимикає звук"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Через внутрішню помилку ваш пристрій може працювати нестабільно. Відновіть заводські налаштування."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"На пристрої сталася внутрішня помилка. Зв’яжіться з виробником пристрою, щоб дізнатися більше."</string>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index 03ad6ac..f8acd34 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"‎%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"‎%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"آف"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"‏Wi-Fi ترجیحی"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"سیلولر ترجیحی"</string>
@@ -416,7 +417,7 @@
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ایپ کو ٹیبلیٹ پر بلوٹوتھ کی ترتیب دیکھنے اور جوڑا بنائے ہوئے آلات کے ساتھ کنکشنز بنانے اور قبول کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permdesc_bluetooth" product="tv" msgid="3974124940101104206">"‏ایپ کو TV پر بلوٹوتھ کی کنفیگریشن دیکھنے اور جوڑا بنائے ہوئے آلات کے ساتھ کنکشنز بنانے اور قبول کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"ایپ کو فون پر بلوٹوتھ کی ترتیب دیکھنے اور جوڑا بنائے ہوئے آلات کے ساتھ کنکشنز بنانے اور قبول کرنے کی اجازت دیتا ہے۔"</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"‏Near Field کمیونیکیشن کو کنٹرول کریں"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"‏Near Field کمیونیکیشن کنٹرول کریں"</string>
     <string name="permdesc_nfc" msgid="7120611819401789907">"‏ایپ کو Near Field Communication (NFC)‎ ٹیگز، کارڈز اور ریڈرز کے ساتھ مواصلت کرنے کی اجازت دیٹا ہے۔"</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"اپنے اسکرین لاک کو غیر فعال کریں"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"ایپ کو کلیدی لاک اور کسی بھی متعلقہ پاس ورڈ سیکیورٹی کو غیر فعال کرنے کی اجازت دیتا ہے۔ مثلاً، کوئی آنے والی فون کال موصول ہونے کے وقت فون کلیدی لاک کو غیر فعال کرتا ہے، پھر کال پوری ہوجانے پر کلیدی لاک کو دوبارہ فعال کردیتا ہے۔"</string>
@@ -692,7 +693,7 @@
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"‏SIM کارڈ غیر مقفل ہو رہا ہے…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"آپ نے اپنا پاس ورڈ <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ٹائپ کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"‏آپ نے اپنا PIN <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ٹائپ کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"‏آپ نے <xliff:g id="NUMBER_0">%d</xliff:g> بار اپنا PIN غلط طریقے سے ٹائپ کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"‏آپ نے اپنے غیر مقفل کرنے کے پیٹرن کو <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ <xliff:g id="NUMBER_1">%d</xliff:g> مزید ناکام کوششوں کے بعد، آپ سے اپنے Google سائن ان کا استعمال کرکے اپنے ٹیبلٹ کو غیر مقفل کرنے کیلئے کہا جائے گا۔ \n\n <xliff:g id="NUMBER_2">%d</xliff:g> سیکنڈز بعد دوبارہ کوشش کریں۔"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"‏آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ <xliff:g id="NUMBER_1">%d</xliff:g> مزید ناکام کوششوں کے بعد، آپ سے اپنا Google سائن ان استعمال کرکے اپنا TV غیر مقفل کرنے کو کہا جائے گا۔‎\n\n <xliff:g id="NUMBER_2">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"‏آپ نے اپنے غیر مقفل کرنے کے پیٹرن کو <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ <xliff:g id="NUMBER_1">%d</xliff:g> مزید ناکام کوششوں کے بعد، آپ سے اپنے Google سائن ان کا استعمال کرکے اپنے فون کو غیر مقفل کرنے کیلئے کہا جائے گا۔ \n\n <xliff:g id="NUMBER_2">%d</xliff:g> سیکنڈز بعد دوبارہ کوشش کریں۔"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"ترتیب دیں"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"خارج کریں"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"دریافت کریں"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> کو منتقل کیا جا رہا ہے"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"ڈیٹا منتقل کیا جا رہا ہے…"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"منتقل کرنا مکمل ہوگیا"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"ڈیٹا کو <xliff:g id="NAME">%s</xliff:g> پر منتقل کر دیا گیا"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"ڈیٹا منتقل نہیں کیا جا سکا"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"ڈیٹا اصل جگہ پر باقی ہے"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"کوئی مماثل سرگرمیاں نہیں ملیں۔"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"میڈیا آؤٹ پٹ کی سمت طے کریں"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"کسی ایپلیکیشن کو دوسرے خارجی آلات تک میڈیا آؤٹ پٹ کا راستہ بنانے کی اجازت دیتا ہے۔"</string>
@@ -1317,7 +1310,7 @@
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"غلط صارف نام یا پاس ورڈ۔"</string>
     <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‏اپنا صارف نام یا پاس ورڈ بھول گئے؟\n"<b>"google.com/accounts/recovery"</b>" ملاحظہ کریں۔"</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"اکاؤنٹ چیک کیا جا رہا ہے…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"‏آپ نے اپنا PIN <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_pin_attempts_dialog_message" msgid="8276745642049502550">"‏آپ نے <xliff:g id="NUMBER_0">%d</xliff:g> بار اپنا PIN غلط طریقے سے ٹائپ کیا ہے۔ \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>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"آپ نے ٹیبلیٹ کو غیر مقفل کرنے کیلئے <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے کوشش کی ہے۔ <xliff:g id="NUMBER_1">%d</xliff:g> مزید ناکام کوششوں کے بعد، ٹیبلیٹ فیکٹری ڈیفالٹ پر دوبارہ ترتیب دے دیا جائے گا اور صارف کا سبھی ڈیٹا ضائع ہو جائے گا۔"</string>
@@ -1466,8 +1459,9 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"آپ کے منتظم نے اپ ڈيٹ کر دیا"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"آپ کے منتظم کی جانب سے حذف کر دیا گیا"</string>
-    <string name="battery_saver_description" msgid="1960431123816253034">"بیٹری کی میعاد بہتر کرنے میں مدد کرنے کیلئے، بیٹری کی بچت آپ کے آلہ کی کارکردگی کم کر دیتی ہے اور وائبریشن، مقام کی سروسز اور پس منظر کا بیشتر ڈیٹا محدود کر دیتی ہے۔ ای میل، پیغام رسانی اور مطابقت پذیری پر مبنی دیگر ایپس ممکن ہے اس وقت تک اپ ڈیٹ نہ ہوں جب تک آپ انہیں نہ کھولیں۔\n\nآپ کا آلہ چارج ہوتے وقت بیٹری کی بچت خود بخود آف ہو جاتی ہے۔"</string>
+    <string name="battery_saver_description" msgid="1960431123816253034">"بیٹری کی میعاد بہتر کرنے میں مدد کرنے کیلئے، بیٹری سیور آپ کے آلہ کی کارکردگی کم کر دیتی ہے اور وائبریشن، مقام کی سروسز اور پس منظر کا بیشتر ڈیٹا محدود کر دیتی ہے۔ ای میل، پیغام رسانی اور مطابقت پذیری پر منحصر دیگر ایپس ممکن ہے اس وقت تک اپ ڈیٹ نہ ہوں جب تک آپ انہیں نہ کھولیں۔\n\nآپ کا آلہ چارج ہوتے وقت بیٹری سیور خود بخود آف ہو جاتی ہے۔"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
       <item quantity="other">‏%1$d منٹ کیلئے (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> تک)</item>
       <item quantity="one">ایک منٹ کیلئے (تک <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"سکیڑیں"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"ڈسٹرب نہ کریں"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ڈاؤن ٹائم"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"ہفتہ کی راتوں کو"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"ویک اینڈز کو"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> کے ذریعے خاموش کردہ"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"آپ کے آلہ میں ایک داخلی مسئلہ ہے اور جب تک آپ فیکٹری ڈیٹا کو دوبارہ ترتیب نہیں دے دیتے ہیں، ہوسکتا ہے کہ یہ غیر مستحکم رہے۔"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"آپ کے آلہ میں ایک داخلی مسئلہ ہے۔ تفصیلات کیلئے اپنے مینوفیکچرر سے رابطہ کریں۔"</string>
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml
index 9706535..6731d33 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz-rUZ/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"O‘chirilgan"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi afzal ko‘rilsin"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Mobil tarmoq afzal ko‘rilsin"</string>
@@ -240,21 +241,21 @@
     <string name="permgroupdesc_phone" msgid="2016641188146068700">"qurilma telefon xizmatidan foydalanish"</string>
     <string name="permgrouplab_sensors" msgid="7416703484233940260">"Sensorlar"</string>
     <string name="permgroupdesc_sensors" msgid="2987451839455524494">"taqiladigan qurilmalar va sensorlarni ko‘rish"</string>
-    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Oynadagi kontentni ajratib olish"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Joriy oynadagi kontent ma’lumotlarini o‘rganib chiqish."</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_canRequestFilterKeyEvents" msgid="2103440391902412174">"Terayotgan matningizni kuzatish"</string>
-    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Kredit karta raqamlari va parollar kabi shaxsiy ma’lumotlarni o‘z ichiga oladi."</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>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Ilova holat panelini o‘chirib qo‘yishi hamda tizim ikonkalarini qo‘shishi yoki olib tashlashi mumkin."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"holat paneli"</string>
     <string name="permdesc_statusBarService" msgid="716113660795976060">"Ilova holat qatorining o‘rnini egallashi mumkin."</string>
     <string name="permlab_expandStatusBar" msgid="1148198785937489264">"holat panelini yoyish/yig‘ish"</string>
     <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Ilova holat panelini yoyishi va yig‘ishi mumkin."</string>
-    <string name="permlab_install_shortcut" msgid="4279070216371564234">"yorliqlar o‘rnatish"</string>
+    <string name="permlab_install_shortcut" msgid="4279070216371564234">"yorliqlarni yaratish"</string>
     <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Dasturga foydalanuvchini aralashtirmasdan, Uy ekraniga yorliqlar qo‘shish imkonini beradi."</string>
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"yorliqlarni o‘chirish"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Dasturga foydalanuvchini aralashtirmasdan, uy ekranidagi yorliqlarni o‘chirishga ruxsat beradi."</string>
@@ -282,7 +283,7 @@
     <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Ilova avtomobil rejimini yoqishi mumkin."</string>
     <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"boshqa ilovalarni yopish"</string>
     <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Ilovaga boshqa ilovalarning orqa fonda amalga oshirilayotgan jarayonlarini to‘xtatish uchun ruxsat beradi. Bu boshqa ilovalarning to‘xtatilishiga sabab bo‘lishi mumkin."</string>
-    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"boshqa ilovalar ustiga chizish"</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"interfeys elementlarini boshqa oynalar ustidan ko‘rsatish"</string>
     <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Ilovaga foydalanuvchi interfeysining qismlariga yoki boshqa ilovalarning tepasiga chizish uchun ruxsat beradi. Ular har qanday ilova interfeysidan foydalanganingizda ishingizga xalaqit qilishi mumkin yoki boshqa ilovalarda siz ko‘ryapman deb o‘ylayotgan narsalarni o‘zgartirishlari mumkin."</string>
     <string name="permlab_persistentActivity" msgid="8841113627955563938">"ilovani doim ishlab turadigan qilish"</string>
     <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Ilovaga o‘zining komponentlarini xotirada doimiy saqlashga ruxsat beradi. Bu mavjud xotirani cheklashi va planshetni sekin ishlashiga sabab bo‘lishi mumkin."</string>
@@ -368,7 +369,7 @@
     <string name="permdesc_transmitIr" product="tablet" msgid="5358308854306529170">"Dasturga planshetdagi infraqizil antenadan foydalanish ruxsatini beradi."</string>
     <string name="permdesc_transmitIr" product="tv" msgid="3926790828514867101">"Ilovaga televizorning infraqizil uzatkichidan foydalanish huquqini beradi."</string>
     <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"Dasturga telefondagi infraqizil antenadan foydalanish ruxsatini beradi."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"orqa fonga rasm o‘rnatish"</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"fonga rasm o‘rnatish"</string>
     <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Ilova tizim uchun orqa fon rasmlarini o‘rnatishi mumkin."</string>
     <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"fon rasmi o‘lchamini moslash"</string>
     <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Ilova tizimning orqa fon rasmlari uchun o‘lchamlarini ko‘rsatishi mumkin."</string>
@@ -396,13 +397,13 @@
     <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Ilova modem rejimida tarmoqqa ulanish holatini o‘zgartirishi mumkin."</string>
     <string name="permlab_accessWifiState" msgid="5202012949247040011">"Wi-Fi ulanishlarini ko‘rish"</string>
     <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Ilovaga ulangan Wi-Fi qurilmalari nomi va yoqilgan Wi-Fi kabi Wi-Fi tarmoqlari haqidagi ma’lumotni ko‘rish imkonini beradi."</string>
-    <string name="permlab_changeWifiState" msgid="6550641188749128035">"Wi-Fi’ga ulash va uni uzish"</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"Wi-Fi tarmog‘iga ulanish va uzish"</string>
     <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Ilovaga Wi-Fi ulanish nuqtalariga ulanish va ulardan uzilishga hamda Wi-Fi tarmoqlari uchun qurilmalar sozlamasiga o‘zgartirishlar kiritishga ruxsat beradi."</string>
     <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi Multicast qabul qilishga ruxsat berish"</string>
     <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Ilovaga Wi-Fi tarmoq orqali guruh manzillardan foydalanib, faqat planshetingizga emas, balki barcha qurilmalarga yuborilgan paketlarni qabul qilishga ruxsat beradi. U oddiy rejimdagidan ko‘ra ko‘proq quvvat sarflaydi."</string>
     <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"Ilovaga faqat televizoringizga emas, balki biror Wi-Fi tarmog‘iga ulangan barcha qurilmalarga ommaviy uzatish manzillari orqali yuborilgan paketlarni qabul qilish huquqini beradi."</string>
     <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Ilovaga Wi-Fi tarmoq orqali guruh manzillardan foydalanib, faqat telefoningizga emas, balki barcha qurilmalarga yuborilgan paketlarni qabul qilishga ruxsat beradi. U oddiy rejimdagidan ko‘ra ko‘proq quvvat sarflaydi."</string>
-    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth sozlamalariga ruxsat"</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth sozlamalariga kirish"</string>
     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Ilova Bluetooth funksiyali mahalliy planshet sozlamalarini sozlashi hamda masofadan turib qurilmalarni aniqlash va ular bilan juftlashishni amalga oshirishi mumkin."</string>
     <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"Ilovaga mahalliy Bluetooth TV qurilmasini sozlash hamda masofadagi qurilmalarni aniqlash va ularga ulanish huquqini beradi."</string>
     <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Ilova Bluetooth funksiyali mahalliy telefon sozlamalarini sozlashi hamda masofadan turib qurilmalarni aniqlash va ular bilan juftlashishni amalga oshirishi mumkin."</string>
@@ -416,7 +417,7 @@
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Ilovaga planshetdagi Bluetooth‘ning sozlamasini ko‘rishga va bog‘langan qurilmalarga ulanish va ulardan ulanish so‘rovlarini qabul qulishga imkon beradi."</string>
     <string name="permdesc_bluetooth" product="tv" msgid="3974124940101104206">"Ilovaga televizordagi Bluetooth sozlamalarini ko‘rish hamda juftlashgan qurilmalar bilan aloqa o‘rnatish va ulanishlarni qabul qilish huquqini beradi."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Ilovaga telefondagi Bluetooth‘ning sozlamasini ko‘rishga va bog‘langan qurilmalarga ulanish va ulardan ulanish so‘rovlarini qabul qulishga imkon beradi."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"yaqindagi aloqa radiuslarini boshqarish"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"NFC modulini boshqarish"</string>
     <string name="permdesc_nfc" msgid="7120611819401789907">"Ilova qisqa masofali aloqa (NFC) texnologiyasi yordamida NFC yorliqlari, kartalar va o‘qish moslamalari bilan ma’lumot almashishi mumkin."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"ekran qulfini o‘chirib qo‘yish"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Ilovaga ekran qulfini va har qanday parol  yordamidagi xavfsizlik himoyalarini o‘chirishga ruxsat beradi. Masalan, kirish qo‘ng‘irog‘ida telefon ekran qulfini o‘chiradi va qo‘ng‘iroq tugashi bilan qulfni yoqadi."</string>
@@ -445,7 +446,7 @@
     <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Ilovaga hisobning sinxronlash sozlamalarini o‘zgartirish uchun ruxsat beradi. Masalan, bundan \"Odamlar\" ilovasini hisob bilan sinxronlanlash uchun foydalanish mumkin."</string>
     <string name="permlab_readSyncStats" msgid="7396577451360202448">"sinxronlash statistikasini o‘qish"</string>
     <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Ilovaga hisobning sinxronlash statistikasini, shu jumladan, sinxronlangan hodisalar tarixi va qancha ma’lumot sinxronlanganligi haqidagi ma’lumotni o‘qishga ruxsat beradi."</string>
-    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"obunalarga yozish"</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"obuna ma’lumotlarini o‘zgartirish"</string>
     <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Ilova hozirgi vaqtda sinxronlanayotgan elementlarni o‘zgartirishi mumkin. Zararli dasturlar uning yordamida sinxronlangan elementlarni o‘zgartirishi mumkin"</string>
     <string name="permlab_readDictionary" msgid="4107101525746035718">"lug‘atga qo‘shgan atamalaringizni o‘qish"</string>
     <string name="permdesc_readDictionary" msgid="659614600338904243">"Ilovaga foydalanuvchi lug‘atga zaxiralagan barcha so‘zlar, nomlar va so‘z birikmalarini o‘qish uchun ruxsat beradi."</string>
@@ -536,36 +537,36 @@
     <string name="policydesc_disableKeyguardFeatures" msgid="3980868516629887575">"Ekran qulfining ba’zi funksiyalaridan foydalanishni cheklaydi."</string>
   <string-array name="phoneTypes">
     <item msgid="8901098336658710359">"Uy"</item>
-    <item msgid="869923650527136615">"Mobayl"</item>
+    <item msgid="869923650527136615">"Mobil"</item>
     <item msgid="7897544654242874543">"Ish"</item>
     <item msgid="1103601433382158155">"Faks (ish)"</item>
     <item msgid="1735177144948329370">"Faks (uy)"</item>
     <item msgid="603878674477207394">"Peyjer"</item>
     <item msgid="1650824275177931637">"Boshqa"</item>
-    <item msgid="9192514806975898961">"Boshqa"</item>
+    <item msgid="9192514806975898961">"Maxsus"</item>
   </string-array>
   <string-array name="emailAddressTypes">
     <item msgid="8073994352956129127">"Uy"</item>
     <item msgid="7084237356602625604">"Ish"</item>
     <item msgid="1112044410659011023">"Boshqa"</item>
-    <item msgid="2374913952870110618">"Boshqa"</item>
+    <item msgid="2374913952870110618">"Maxsus"</item>
   </string-array>
   <string-array name="postalAddressTypes">
     <item msgid="6880257626740047286">"Uy"</item>
     <item msgid="5629153956045109251">"Ish"</item>
     <item msgid="4966604264500343469">"Boshqa"</item>
-    <item msgid="4932682847595299369">"Boshqa"</item>
+    <item msgid="4932682847595299369">"Maxsus"</item>
   </string-array>
   <string-array name="imAddressTypes">
     <item msgid="1738585194601476694">"Uy"</item>
     <item msgid="1359644565647383708">"Ish"</item>
     <item msgid="7868549401053615677">"Boshqa"</item>
-    <item msgid="3145118944639869809">"Boshqa"</item>
+    <item msgid="3145118944639869809">"Maxsus"</item>
   </string-array>
   <string-array name="organizationTypes">
     <item msgid="7546335612189115615">"Ish"</item>
     <item msgid="4378074129049520373">"Boshqa"</item>
-    <item msgid="3455047468583965104">"Boshqa"</item>
+    <item msgid="3455047468583965104">"Maxsus"</item>
   </string-array>
   <string-array name="imProtocols">
     <item msgid="8595261363518459565">"AIM"</item>
@@ -577,9 +578,9 @@
     <item msgid="2506857312718630823">"ICQ"</item>
     <item msgid="1648797903785279353">"Jabber"</item>
   </string-array>
-    <string name="phoneTypeCustom" msgid="1644738059053355820">"Boshqa"</string>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"Maxsus"</string>
     <string name="phoneTypeHome" msgid="2570923463033985887">"Uy"</string>
-    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobayl"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobil"</string>
     <string name="phoneTypeWork" msgid="8863939667059911633">"Ish"</string>
     <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Faks (ish)"</string>
     <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Faks (uy)"</string>
@@ -598,24 +599,24 @@
     <string name="phoneTypeWorkPager" msgid="649938731231157056">"Peyjer (ish)"</string>
     <string name="phoneTypeAssistant" msgid="5596772636128562884">"Yordamchi"</string>
     <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
-    <string name="eventTypeCustom" msgid="7837586198458073404">"Boshqa"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"Maxsus"</string>
     <string name="eventTypeBirthday" msgid="2813379844211390740">"Tug‘ilgan kun"</string>
     <string name="eventTypeAnniversary" msgid="3876779744518284000">"Yubiley"</string>
     <string name="eventTypeOther" msgid="7388178939010143077">"Boshqa"</string>
-    <string name="emailTypeCustom" msgid="8525960257804213846">"Boshqa"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"Maxsus"</string>
     <string name="emailTypeHome" msgid="449227236140433919">"Uy"</string>
     <string name="emailTypeWork" msgid="3548058059601149973">"Ish"</string>
     <string name="emailTypeOther" msgid="2923008695272639549">"Boshqa"</string>
-    <string name="emailTypeMobile" msgid="119919005321166205">"Mobayl"</string>
-    <string name="postalTypeCustom" msgid="8903206903060479902">"Boshqa"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"Mobil"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"Maxsus"</string>
     <string name="postalTypeHome" msgid="8165756977184483097">"Uy"</string>
     <string name="postalTypeWork" msgid="5268172772387694495">"Ish"</string>
     <string name="postalTypeOther" msgid="2726111966623584341">"Boshqa"</string>
-    <string name="imTypeCustom" msgid="2074028755527826046">"Boshqa"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"Maxsus"</string>
     <string name="imTypeHome" msgid="6241181032954263892">"Uy"</string>
     <string name="imTypeWork" msgid="1371489290242433090">"Ish"</string>
     <string name="imTypeOther" msgid="5377007495735915478">"Boshqa"</string>
-    <string name="imProtocolCustom" msgid="6919453836618749992">"Boshqa"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Maxsus"</string>
     <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
     <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
     <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
@@ -627,23 +628,23 @@
     <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
     <string name="orgTypeWork" msgid="29268870505363872">"Ish"</string>
     <string name="orgTypeOther" msgid="3951781131570124082">"Boshqa"</string>
-    <string name="orgTypeCustom" msgid="225523415372088322">"Boshqa"</string>
-    <string name="relationTypeCustom" msgid="3542403679827297300">"Boshqa"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"Maxsus"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"Maxsus"</string>
     <string name="relationTypeAssistant" msgid="6274334825195379076">"Yordamchi"</string>
     <string name="relationTypeBrother" msgid="8757913506784067713">"Aka/uka"</string>
-    <string name="relationTypeChild" msgid="1890746277276881626">"Bola"</string>
-    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Ichki hamkor"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"Farzand"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Fuqarolik nikohida"</string>
     <string name="relationTypeFather" msgid="5228034687082050725">"Ota"</string>
     <string name="relationTypeFriend" msgid="7313106762483391262">"Do‘st"</string>
     <string name="relationTypeManager" msgid="6365677861610137895">"Menejer"</string>
     <string name="relationTypeMother" msgid="4578571352962758304">"Ona"</string>
     <string name="relationTypeParent" msgid="4755635567562925226">"Ota-ona"</string>
     <string name="relationTypePartner" msgid="7266490285120262781">"Hamkor"</string>
-    <string name="relationTypeReferredBy" msgid="101573059844135524">"Qarindoshligi:"</string>
-    <string name="relationTypeRelative" msgid="1799819930085610271">"Aloqasi bor"</string>
-    <string name="relationTypeSister" msgid="1735983554479076481">"Singlisi"</string>
-    <string name="relationTypeSpouse" msgid="394136939428698117">"Eri"</string>
-    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Boshqa"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"Tavsiya qilingan"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"Qarindosh"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"Opa/singil"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"Turmush o‘rtog‘i"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Maxsus"</string>
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Uy"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Ish"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Boshqa"</string>
@@ -663,7 +664,7 @@
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Qulfdan chiqarish yoki favqulodda qo‘ng‘iroqni amalga oshirish uchun \"Menyu\"ni bosing."</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Qulfni ochish uchun \"Menyu\"ga bosing."</string>
     <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Qulfni ochish uchun namuna ustiga chizing"</string>
-    <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Tez yordam"</string>
+    <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Favqulodda qo‘ng‘iroq"</string>
     <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Qo‘ng‘iroqni qaytarish"</string>
     <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"To‘g‘ri!"</string>
     <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Qaytadan urining"</string>
@@ -690,11 +691,11 @@
     <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_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Siz chizmali 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_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>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Siz chizmali parolni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Telefon qulfini ochish uchun yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri urinish qilsangiz, sizdan Google hisobingizga kirish talab qilinadi. \n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng qayta urining."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"Siz chizmali parolni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun Google hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng qaytadan urining."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Telefon qulfini ochish uchun yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri urinish qilsangiz, sizdan Google hisobingizga kirish talab qilinadi. \n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng qayta urining."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun Google hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng qaytadan urining."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Telefon qulfini ochish uchun yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri urinish qilsangiz, sizdan Google hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng qayta urining."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Planshet qulfini <xliff:g id="NUMBER_0">%d</xliff:g> marta ochishga urinib ko‘rdingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishlardan so‘ng, planshet ishlab chiqarilgan holatiga tiklanadi va barcha foydalanuvchi ma’lumotlari yo‘qoladi."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizda zavod sozlamalari qayta tiklanadi hamda undagi barcha ma’lumotlaringiz o‘chib ketadi."</string>
@@ -702,7 +703,7 @@
     <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Planshet qulfini <xliff:g id="NUMBER">%d</xliff:g> marta ochishga urinib ko‘rdingiz. Planshet hozir ishlab chiqarilgan holatiga tiklanadi."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="3195755534096192191">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Endi, televizoringizda zavod sozlamalari qayta tiklanadi."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Telefon qulfini <xliff:g id="NUMBER">%d</xliff:g> marta ochishga urinib ko‘rdingiz. Telefon hozir ishlab chiqarilgan holatiga tiklanadi."</string>
-    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> soniyadan keyin qayta urinib ko‘ring."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
     <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Chizma namunasi yodingizdan chiqdimi?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Qulfni ochish hisobi"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Chizmali parolni ochishga juda ko‘p urinildi"</string>
@@ -944,22 +945,22 @@
     <string name="volume_ringtone" msgid="6885421406845734650">"Qo‘ng‘iroq tovushi"</string>
     <string name="volume_music" msgid="5421651157138628171">"Media tovushi"</string>
     <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bluetooth orqali ijro etilmoqda"</string>
-    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Jiringlash ohangi ovozsiz"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Ovozsiz rejim tanlandi"</string>
     <string name="volume_call" msgid="3941680041282788711">"Kiruvchi qo‘ng‘iroq balandligi"</string>
     <string name="volume_bluetooth_call" msgid="2002891926351151534">"Kiruvchi bluetooth tovushi"</string>
-    <string name="volume_alarm" msgid="1985191616042689100">"Uyg‘otgich tovushi"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"Signal balandligi"</string>
     <string name="volume_notification" msgid="2422265656744276715">"Eslatma tovushi"</string>
     <string name="volume_unknown" msgid="1400219669770445902">"Tovush"</string>
     <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth tovushi"</string>
-    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Rington tovushi"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Rington balandligi"</string>
     <string name="volume_icon_description_incall" msgid="8890073218154543397">"Qo‘ng‘iroq tovushi balandligi"</string>
     <string name="volume_icon_description_media" msgid="4217311719665194215">"Media tovushi balandligi"</string>
     <string name="volume_icon_description_notification" msgid="7044986546477282274">"Eslatma tovushi"</string>
-    <string name="ringtone_default" msgid="3789758980357696936">"Standart musiqa"</string>
-    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Standart musiqa (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
-    <string name="ringtone_silent" msgid="7937634392408977062">"Yo‘q"</string>
-    <string name="ringtone_picker_title" msgid="3515143939175119094">"Musiqalar"</string>
-    <string name="ringtone_unknown" msgid="5477919988701784788">"Noma’lum musiqa"</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_picker_title" msgid="3515143939175119094">"Ringtonlar"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"Noma’lum rington"</string>
     <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
       <item quantity="other">Wi-Fi tarmoqlari mavjud emas</item>
       <item quantity="one">Wi-Fi tarmog‘i mavjud emas</item>
@@ -1052,7 +1053,7 @@
     <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 nosozlikni tuzatish ulandi"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB orqali nosozlikni tuzatish"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB orqali sozlashni o‘chirib qo‘yish uchun bosing."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Klaviaturani o‘zgartirish"</string>
     <string name="configure_input_methods" msgid="4769971288371946846">"Klaviaturani tanlash"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Sozlash"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Chiqarish"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"O‘rganish"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> topilmadi"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Qurilmani qaytadan joylang"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> ko‘chirib o‘tkazilmoqda"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Ma’lumotlar ko‘chirilmoqda"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Ko‘chirib o‘tkazish tugadi"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Ma’lumotlar <xliff:g id="NAME">%s</xliff:g> xotirasiga ko‘chirib o‘tkazildi"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Ma’lumotlar ko‘chirilmadi"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Ma’lumotlar o‘z joyida qoldi"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Hech qanday mos faoliyat topilmadi."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Media chiqishni yo‘naltirish"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ilovaga media chiqish ovozini boshqa tashqi qurilmalarga yo‘naltirish uchun ruxsat beradi."</string>
@@ -1121,8 +1114,8 @@
     <string name="forward_intent_to_work" msgid="621480743856004612">"Siz ushbu ilovadan ishchi profilingizda foydalanmoqdasiz"</string>
     <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">"Qulaylik"</string>
-    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Orqa fon"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Maxsus imkoniyatlar"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Orqa 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>
@@ -1130,9 +1123,9 @@
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN <xliff:g id="APP">%s</xliff:g> tomonidan faollashtirilgan"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Tarmoqni boshqarish uchun bosing."</string>
     <string name="vpn_text_long" msgid="6407351006249174473">"<xliff:g id="SESSION">%s</xliff:g>ga ulandi. Tarmoqni boshqarish uchun bosing."</string>
-    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Har doim faol VPN ulanmoqda…"</string>
-    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"Har doim faol VPN ulangan"</string>
-    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Har doim faol VPN’dagi xato"</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Doimiy VPN ulanmoqda…"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"Doimiy VPN ulandi"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Xato"</string>
     <string name="vpn_lockdown_config" msgid="6415899150671537970">"Sozlash uchun bosing"</string>
     <string name="upload_file" msgid="2897957172366730416">"Faylni tanlash"</string>
     <string name="no_file_chosen" msgid="6363648562170759465">"Hech qanday fayl tanlanmadi"</string>
@@ -1222,8 +1215,8 @@
     <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">"Ichki xotira"</string>
-    <string name="storage_sd_card" msgid="3282948861378286745">"SD xotira kartasi"</string>
-    <string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD kartasi"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD-karta"</string>
+    <string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD-kartasi"</string>
     <string name="storage_usb_drive" msgid="6261899683292244209">"USB xotira"</string>
     <string name="storage_usb_drive_label" msgid="4501418548927759953">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB xotira qurilmasi"</string>
     <string name="storage_usb" msgid="3017954059538517278">"USB xotira"</string>
@@ -1274,7 +1267,7 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Tizim"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
-    <string name="wireless_display_route_description" msgid="9070346425023979651">"Simsiz ekran"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"Simsiz monitor"</string>
     <string name="media_route_button_content_description" msgid="591703006349356016">"Translatsiya qilish"</string>
     <string name="media_route_chooser_title" msgid="1751618554539087622">"Qurilmaga ulanish"</string>
     <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Ekrandagi tasvirni qurilmaga uzatish"</string>
@@ -1292,10 +1285,10 @@
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", xavfsiz"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Chizmali parol unutilgan"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Xato chizma paroli"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Xato parol"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"Xato PIN kod"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%1$d</xliff:g> soniyadan so‘ng qaytadan urinib ko‘ring."</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Chizmali kalit noto‘g‘ri"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Parol noto‘g‘ri"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN-kod noto‘g‘ri"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%1$d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"Chizmali parolni chizing"</string>
     <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM karta PIN kodini kiriting"</string>
     <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN kodni tering"</string>
@@ -1317,18 +1310,18 @@
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"Foydalanuvchi nomi yoki parol xato."</string>
     <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Foydalanuvchi nomingiz yoki parolingizni unutdingizmi?\n "<b>"google.com/accounts/recovery"</b>"ga tashrif buyuring."</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"Hisob tekshirilmoqda…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodingizni <xliff:g id="NUMBER_0">%d</xliff:g> marta xato kiritdingiz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng qaytadan urinib ko‘ring."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Parolingizni <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 qaytadan urinib ko‘ring."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Chizmali parolingizni <xliff:g id="NUMBER_0">%d</xliff:g> marta xato chizdingiz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng qaytadan urinib ko‘ring."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"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 urinib ko‘ring."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"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 urinib ko‘ring."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"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 urinib ko‘ring."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Siz planshet qulfini ochish uchun <xliff:g id="NUMBER_0">%d</xliff:g> marta muvaffaqiyatsiz urindingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishlardan so‘ng planshetning zavod sozlamalari tiklanadi va barcha foydalanuvchi ma’lumotlari o‘chiriladi."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizda zavod sozlamalari qayta tiklanadi hamda undagi barcha ma’lumotlaringiz o‘chib ketadi."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Siz telefon qulfini ochish uchun <xliff:g id="NUMBER_0">%d</xliff:g> marta muvaffaqiyatsiz urindingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishlardan so‘ng telefonning zavod sozlamalari tiklanadi va barcha foydalanuvchi ma’lumotlari o‘chiriladi."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Planshet qulfini ochish uchun <xliff:g id="NUMBER">%d</xliff:g> marta muvaffaqiyatsiz urinib ko‘rdingiz. Planshetning hozir zavod sozlamari tiklanadi."</string>
     <string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"Siz televizorni qulfdan chiqarish parolini <xliff:g id="NUMBER">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Endi, televizoringizda zavod sozlamalari qayta tiklanadi."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Telefon qulfini ochish uchun <xliff:g id="NUMBER">%d</xliff:g> marta muvaffaqiyatsiz urinib ko‘rdingiz. Telefonning hozir zavod sozlamari tiklanadi."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Chizmali parolni  <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, 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="tv" msgid="4224651132862313471">"Siz chizmali parolni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun sizda e-pochta hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng qaytadan urining."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Chizmali parolni <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_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="tv" msgid="4224651132862313471">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. Agar uni yana <xliff:g id="NUMBER_1">%d</xliff:g> marta noto‘g‘ri kiritsangiz, televizoringizni qulfdan chiqarish uchun sizda e-pochta hisobingizga kirish talab qilinadi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng qaytadan urining."</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_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"O‘chirish"</string>
     <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Ovoz balandligi tavsiya etilgan darajadan ham yuqori ko‘tarilsinmi?\n\nUzoq vaqt davomida baland ovozda tinglash eshitish qobiliyatingizga salbiy ta’sir ko‘rsatishi mumkin."</string>
@@ -1438,7 +1431,7 @@
     <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_error_doesnt_match" msgid="2224214190906994548">"PIN kodlar bir xil emas. Qaytadan urinib ko‘ring."</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN kodlar bir xil emas. 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>
     <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>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Bo‘shatishdan oldin chizmali parol so‘ralsin"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Bo‘shatishdan oldin parol so‘ralsin"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Administratoringiz tomonidan o‘rnatilgan"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Administratoringiz tomonidan yangilandi"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Administratoringiz tomonidan o‘chirilgan"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Batareya quvvatini uzoqroq vaqtga yetkazish uchun quvvat tejash funksiyasi qurilmangiz unumdorligini kamaytiradi hamda uning tebranishi va orqa fonda internetdan foydalanishini cheklaydi. Sinxronlanishni talab qiladigan e-pochta, xabar almashinuv va boshqa ilovalar esa qachonki ularni ishga tushirganingizda yangilanadi.\n\nQurilma quvvat olayotganda quvvat tejash funksiyasi avtomatik tarzda o‘chadi."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Yig‘ish"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Bezovta qilinmasin"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Nofaol vaqt"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Ish kunlari kechasi"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Dam olish kunlari"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"“<xliff:g id="THIRD_PARTY">%1$s</xliff:g>” tomonidan ovozsiz qilingan"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Qurilmangiz bilan bog‘liq ichki muammo mavjud. U zavod sozlamalari tiklanmaguncha barqaror ishlamasligi mumkin."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Qurilmangiz bilan bog‘liq ichki muammo mavjud. Tafsilotlar uchun qurilmangiz ishlab chiqaruvchisiga murojaat qiling."</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index a1509af..7450aee 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Tắt"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Ưu tiên Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Ưu tiên mạng di động"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Thiết lập"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Tháo"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Khám phá"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> bị thiếu"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Cắm lại thiết bị này"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Di chuyển <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Di chuyển dữ liệu"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Hoàn tất di chuyển"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Dữ liệu được di chuyển sang <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Không thể di chuyển dữ liệu"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Dữ liệu vẫn ở vị trí ban đầu"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Không tìm thấy hoạt động nào phù hợp."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Định tuyến thiết bị ra phương tiện"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Cho phép ứng dụng định tuyến thiết bị ra phương tiện đến các thiết bị bên ngoài khác."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Hỏi hình mở khóa trước khi bỏ ghim"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Hỏi mật khẩu trước khi bỏ ghim"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Được cài đặt bởi quản trị viên của bạn"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Được cập nhật bởi quản trị viên của bạn"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Đã bị xóa bởi quản trị viên của bạn"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Để giúp tăng tuổi thọ pin, trình tiết kiệm pin sẽ giảm hiệu suất thiết bị của bạn và hạn chế rung, dịch vụ vị trí và hầu hết dữ liệu nền. Email, nhắn tin và các ứng dụng khác dựa trên đồng bộ hóa có thể không cập nhật nếu bạn không mở chúng.\n\nTrình tiết kiệm pin tự động tắt khi thiết bị của bạn đang sạc."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Thu gọn"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Không làm phiền"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Thời gian ngừng hoạt động"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Đêm trong tuần"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Ngày cuối tuần"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Do <xliff:g id="THIRD_PARTY">%1$s</xliff:g> tắt tiếng"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Đã xảy ra sự cố nội bộ với thiết bị của bạn và thiết bị có thể sẽ không ổn định cho tới khi bạn thiết lập lại dữ liệu ban đầu."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Đã xảy ra sự cố nội bộ với thiết bị. Hãy liên hệ với nhà sản xuất của bạn để biết chi tiết."</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index bbe3287..41f7648 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"关闭"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"首选 WLAN"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"首选移动网络"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"设置"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"弹出"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"浏览"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"正在移动<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"正在移动数据"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"数据移动完成"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"数据已移到<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"无法移动数据"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"数据仍保存在原来的位置"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"未找到匹配的活动。"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"更改媒体输出线路"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"允许该应用将媒体输出线路更改到其他外部设备。"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"由您单位的管理员更新"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"已被管理员删除"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"为了延长电池的续航时间,节电助手会降低设备的性能,并限制振动、位置信息服务和大部分后台流量。对于电子邮件、聊天工具等依赖于同步功能的应用,可能要打开这类应用时才能收到新信息。\n\n节电助手会在设备充电时自动关闭。"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"收起"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"勿扰"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"休息时间"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"工作日夜间"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"周末"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"已被<xliff:g id="THIRD_PARTY">%1$s</xliff:g>设为静音"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"您的设备内部出现了问题。如果不将设备恢复出厂设置,设备运行可能会不稳定。"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"您的设备内部出现了问题。请联系您的设备制造商了解详情。"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index a698848..bf7d8ca 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"關閉"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"首選 Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"首選流動數據"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"設定"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"移除"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"探索"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"正在轉移<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"正在轉移資料"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"完成轉移"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"資料已轉移至<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"無法轉移資料"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"資料仍然儲存在原來位置"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"找不到相符的活動。"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"轉送媒體輸出"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"允許應用程式將媒體輸出轉送至其他外部裝置。"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"已由您的管理員更新"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"已由管理員刪除"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"節約電池用量模式有助於延長電池壽命,但這會降低裝置效能,並限制震動、定位服務及大部分背景數據傳輸。除非您啟用,否則電郵、短訊及其他需要使用同步功能的應用程式均不會更新。\n\n當裝置充電時,節約電池用量模式會自動關閉。"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"收合"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"請勿干擾"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"休息時間"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"星期一至星期五晚"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"週末"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"靜音設定者:<xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"您裝置的系統發生問題,回復原廠設定後即可解決該問題。"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"您裝置的系統發生問題,請聯絡您的製造商瞭解詳情。"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 009117a..9177482 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"關閉"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi 優先"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"行動通訊優先"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"設定"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"退出"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"探索"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <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>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"正在移動「<xliff:g id="NAME">%s</xliff:g>」"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"正在移動資料"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"移動完成"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"資料已移動至「<xliff:g id="NAME">%s</xliff:g>」"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"無法移動資料"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"資料留在原來的位置"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"找不到相符的活動。"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"轉送媒體輸出"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"允許應用程式將媒體輸出轉送至其他外部裝置。"</string>
@@ -1466,6 +1459,7 @@
     <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>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"由您的管理員更新"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"已遭管理員刪除"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"節約耗電量模式會透過降低裝置效能、震動限制、定位服務限制和大多數背景資料運作限制等方式,延長電池續航力。此外,如果未開啟電子郵件、簡訊和其他需要使用同步功能的應用程式,系統將不會自動更新這些應用程式。\n\n當您為裝置充電時,節約耗電量模式會自動關閉。"</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"收合"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"零打擾"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"停機"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"週一至週五夜間"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"週末"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"由 <xliff:g id="THIRD_PARTY">%1$s</xliff:g> 設為靜音"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"您的裝置發生內部問題,必須將裝置恢復原廠設定才能解除不穩定狀態。"</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"您的裝置發生內部問題,詳情請洽裝置製造商。"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index a719e07..822d842 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -129,6 +129,7 @@
   <string-array name="wfcOperatorErrorNotificationMessages">
   </string-array>
     <string name="wfcSpnFormat" msgid="8211621332478306568">"%s"</string>
+    <string name="wfcDataSpnFormat" msgid="1118052028767666883">"%s"</string>
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Valiwe"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Kuncanyelwa i-Wi-Fi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="5920549484600758786">"Kuncanyelwa iselula"</string>
@@ -1078,22 +1079,14 @@
     <string name="ext_media_init_action" msgid="8317198948634872507">"Ukusetha"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Khipha"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"Hlola"</string>
-    <!-- no translation found for ext_media_missing_title (620980315821543904) -->
-    <skip />
-    <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
-    <skip />
-    <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
-    <skip />
-    <!-- no translation found for ext_media_move_title (1022809140035962662) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
-    <skip />
-    <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
-    <skip />
-    <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
-    <skip />
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> okulahlekile"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Faka kabusha le divayisi"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Ihambisa i-<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Ihambisa idatha"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Ukuhamba kuphelele"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Idatha iyiswe ku-<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Ayikwazanga ukuhambisa idatha"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Idatha isele endaweni yoqobo"</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"Ayikho imisebenzi efanayo etholakele"</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Yenza umzila wemidiya wokukhiphayo"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ivumela uhlelo lokusebenza ukwenza umzila wokukhiphayo wemidiya kuya kumadivayisi angaphandle."</string>
@@ -1466,6 +1459,7 @@
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Cela iphethini yokuvula ngaphambi kokususa ukuphina"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Cela iphasiwedi ngaphambi kokususa ukuphina"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Ifakwe ngumlawuli wakho"</string>
+    <string name="package_updated_device_owner" msgid="8856631322440187071">"Ibuyekezwe ngumqondisi wakho"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Isuswe ngumlawuli wakho"</string>
     <string name="battery_saver_description" msgid="1960431123816253034">"Ukusiza ukuthuthukisa impilo yebhethri, isilondoloze sebhethri sehlisa ukusebenza kwedivayisi yakho futhi sikhawulele ukudlidliza, amasevisi wendawo, nedatha eningi yangasemuva. I-imeyili, imilayezo, nezinye izinhlelo zokusebenza ezincike ekuvumelaniseni zingahle zingabuyekezwa ngaphandle kokuthi uzivule.\n\nIsilondolozi sebhethri siyavaleka ngokuzenzakalelayo uma idivayisi yakho ishaja."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
@@ -1490,8 +1484,12 @@
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Goqa"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ungaphazamisi"</string>
     <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Isikhathi sokuphumula"</string>
-    <string name="zen_mode_default_weeknights_name" msgid="2069189413656431610">"Ubusuku beviki"</string>
-    <string name="zen_mode_default_weekends_name" msgid="2377398437072017011">"Izimpelasonto"</string>
+    <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+    <skip />
+    <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+    <skip />
     <string name="muted_by" msgid="6147073845094180001">"Ithuliswe ngu-<xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
     <string name="system_error_wipe_data" msgid="6608165524785354962">"Kukhona inkinga yangaphakathi ngedivayisi yakho, futhi ingase ibe engazinzile kuze kube yilapho usetha kabusha yonke idatha."</string>
     <string name="system_error_manufacturer" msgid="8086872414744210668">"Kukhona inkinga yangaphakathi ngedivayisi yakho. Xhumana nomkhiqizi wakho ukuze uthole imininingwane."</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index a95cc79..0b96d22 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1998,6 +1998,13 @@
         <attr name="needsDefaultBackgrounds" format="boolean" />
     </declare-styleable>
 
+    <!-- @hide -->
+    <declare-styleable name="ButtonBarLayout">
+        <!-- Whether to automatically stack the buttons when there is not
+             enough space to lay them out side-by-side. -->
+        <attr name="allowStacking" format="boolean" />
+    </declare-styleable>
+
     <!-- Fragment animation class attributes. -->
     <declare-styleable name="FragmentAnimation">
         <attr name="fragmentOpenEnterAnimation" format="reference" />
@@ -2329,6 +2336,9 @@
         <!-- Defines whether this view reacts to long click events. -->
         <attr name="longClickable" format="boolean" />
 
+        <!--  Defines whether this view reacts to stylus button press events. -->
+        <attr name="stylusButtonPressable" format="boolean" />
+
         <!-- If false, no state will be saved for this view when it is being
              frozen. The default is true, allowing the view to be saved
              (however it also must have an ID assigned to it for its
@@ -2337,11 +2347,6 @@
              be saved. -->
         <attr name="saveEnabled" format="boolean" />
 
-        <!-- If true, no {@link android.view.ViewAssistStructure} data will be collected from
-             this view or any of its children.  The default is false, allowing assist structure
-             to be reported by it. -->
-        <attr name="assistBlocked" format="boolean" />
-
         <!-- Specifies whether to filter touches when the view's window is obscured by
              another visible window.  When set to true, the view will not receive touches
              whenever a toast, dialog or other window appears above the view's window.
@@ -2712,6 +2717,28 @@
             <enum name="add" value="16" />
         </attr>
 
+        <!-- Defines which scroll indicators should be displayed when the view
+             can be scrolled. Multiple values may be combined using logical OR,
+             for example "top|bottom". -->
+        <attr name="scrollIndicators">
+            <!-- No scroll indicators are displayed. -->
+            <flag name="none" value="0x0000" />
+            <!-- Displays top scroll indicator when view can be scrolled up. -->
+            <flag name="top" value="0x0100" />
+            <!-- Displays bottom scroll indicator when vew can be scrolled down. -->
+            <flag name="bottom" value="0x0200" />
+            <!-- Displays left scroll indicator when vew can be scrolled left. -->
+            <flag name="left" value="0x0400" />
+            <!-- Displays right scroll indicator when vew can be scrolled right. -->
+            <flag name="right" value="0x0800" />
+            <!-- Displays right scroll indicator when vew can be scrolled in the
+                 start direction. -->
+            <flag name="start" value="0x1000" />
+            <!-- Displays right scroll indicator when vew can be scrolled in the
+                 end direction. -->
+            <flag name="end" value="0x2000" />
+        </attr>
+
     </declare-styleable>
 
     <!-- Attributes that can be assigned to a tag for a particular View. -->
@@ -2722,12 +2749,11 @@
         <attr name="value" />
     </declare-styleable>
 
-    <!-- Attributes that can be assigned to an &lt;include&gt; tag. -->
+    <!-- Attributes that can be assigned to an &lt;include&gt; tag.
+         @hide -->
     <declare-styleable name="Include">
         <attr name="id" />
         <attr name="visibility" />
-        <attr name="layout_width" />
-        <attr name="layout_height" />
     </declare-styleable>
 
     <!-- Attributes that can be used with a {@link android.view.ViewGroup} or any
@@ -3076,6 +3102,8 @@
             <flag name="typeTouchInteractionEnd" value="0x00200000" />
             <!-- Receives {@link android.view.accessibility.AccessibilityEvent#TYPE_WINDOWS_CHANGED} events. -->
             <flag name="typeWindowsChanged" value="0x00400000" />
+            <!-- Receives {@link android.view.accessibility.AccessibilityEvent#TYPE_VIEW_STYLUS_BUTTON_PRESSED} events. -->
+            <flag name="typeStylusButtonPressed" value="0x00800000" />
             <!-- Receives {@link android.view.accessibility.AccessibilityEvent#TYPES_ALL_MASK} i.e. all events. -->
             <flag name="typeAllMask" value="0xffffffff" />
         </attr>
@@ -5844,16 +5872,9 @@
     </declare-styleable>
 
     <!-- @hide For internal use only. Use only as directed. -->
-    <declare-styleable name="EpicenterClipReveal">
-        <attr name="centerClipBounds" format="boolean" />
+    <declare-styleable name="EpicenterTranslateClipReveal">
         <attr name="interpolatorX" format="reference" />
         <attr name="interpolatorY" format="reference" />
-    </declare-styleable>
-
-    <!-- @hide For internal use only. Use only as directed. -->
-    <declare-styleable name="EpicenterTranslate">
-        <attr name="interpolatorX" />
-        <attr name="interpolatorY" />
         <attr name="interpolatorZ" format="reference" />
     </declare-styleable>
 
@@ -7300,8 +7321,11 @@
         <attr name="recognitionService" format="string" />
         <attr name="settingsActivity" />
         <!-- Flag indicating whether this voice interaction service is capable of handling the
-             assist gesture. -->
-        <attr name="supportsAssistGesture" format="boolean" />
+             assist action. -->
+        <attr name="supportsAssist" format="boolean" />
+        <!-- Flag indicating whether this voice interaction service is capable of being launched
+             from the keyguard. -->
+        <attr name="supportsLaunchVoiceAssistFromKeyguard" format="boolean" />
     </declare-styleable>
 
     <!-- Use <code>voice-enrollment-application</code>
@@ -7430,6 +7454,10 @@
         <attr name="maxWidth" />
         <!-- An optional query hint string to be displayed in the empty query field. -->
         <attr name="queryHint" format="string" />
+        <!-- Default query hint used when {@code queryHint} is undefined and
+             the search view's {@code SearchableInfo} does not provide a hint.
+             @hide -->
+        <attr name="defaultQueryHint" format="string" />
         <!-- The IME options to set on the query text field. -->
         <attr name="imeOptions" />
         <!-- The input type to set on the query text field. -->
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 4631427..59c6e4f 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -842,6 +842,11 @@
          via adb.  The default value of this attribute is <code>true</code>. -->
     <attr name="allowBackup" format="boolean" />
 
+    <!-- Applications will set this in their manifest to opt-in to or out of full app data back-up
+         and restore. Alternatively they can set it to an xml resource within their app that will
+         be parsed by the BackupAgent to selectively backup files indicated within that xml. -->
+    <attr name="fullBackupContent" format="reference|boolean" />
+
     <!-- Indicates that even though the application provides a <code>BackupAgent</code>,
          only full-data streaming backup operations are to be performed to save the app's
          data.  This lets the app rely on full-data backups while still participating in
@@ -1189,6 +1194,7 @@
         <attr name="backupAgent" />
         <attr name="allowBackup" />
         <attr name="fullBackupOnly" />
+        <attr name="fullBackupContent" />
         <attr name="killAfterRestore" />
         <attr name="restoreNeedsApplication" />
         <attr name="restoreAnyVersion" />
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index b9825c5..7f8c460 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -174,4 +174,6 @@
     <color name="Pink_800">#ffad1457</color>
     <color name="Red_700">#ffc53929</color>
     <color name="Red_800">#ffb93221</color>
+
+    <color name="chooser_service_row_background_color">#fff5f5f5</color>
 </resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 6f60188..7270b2c 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -771,6 +771,14 @@
         <item>10</item>
     </integer-array>
 
+    <!-- Vibrator pattern for feedback about a stylus button press -->
+    <integer-array name="config_stylusButtonPressVibePattern">
+        <item>0</item>
+        <item>1</item>
+        <item>20</item>
+        <item>21</item>
+    </integer-array>
+
     <bool name="config_use_strict_phone_number_comparation">false</bool>
 
     <!-- Display low battery warning when battery level dips to this value.
@@ -2130,4 +2138,7 @@
 
     <!-- This config is used to force VoiceInteractionService to start on certain low ram devices. -->
     <bool name="config_forceEnableVoiceInteractionService">false</bool>
+
+    <!-- This config is ued to determine whether animations are allowed in low power mode. -->
+    <bool name="config_allowAnimationsInLowPowerMode">false</bool>
 </resources>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index bbba712..84747f1 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -391,7 +391,7 @@
      <dimen name="floating_toolbar_overflow_side_padding">18dp</dimen>
      <dimen name="floating_toolbar_text_size">14sp</dimen>
      <dimen name="floating_toolbar_menu_button_minimum_width">48dp</dimen>
-     <dimen name="floating_toolbar_default_width">264dp</dimen>
+     <dimen name="floating_toolbar_preferred_width">328dp</dimen>
      <dimen name="floating_toolbar_minimum_overflow_height">144dp</dimen>
      <dimen name="floating_toolbar_horizontal_margin">16dp</dimen>
      <dimen name="floating_toolbar_vertical_margin">8dp</dimen>
diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml
index bdc8d9f..842c72e 100644
--- a/core/res/res/values/ids.xml
+++ b/core/res/res/values/ids.xml
@@ -100,4 +100,19 @@
 
   <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_TO_POSITION}. -->
   <item type="id" name="accessibilityActionScrollToPosition" />
+
+  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_UP}. -->
+  <item type="id" name="accessibilityActionScrollUp" />
+
+  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_LEFT}. -->
+  <item type="id" name="accessibilityActionScrollLeft" />
+
+  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_DOWN}. -->
+  <item type="id" name="accessibilityActionScrollDown" />
+
+  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_RIGHT}. -->
+  <item type="id" name="accessibilityActionScrollRight" />
+  
+  <!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_STYLUS_BUTTON_PRESS}. -->
+  <item type="id" name="accessibilityActionStylusButtonPress" />
 </resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index dd4c134..e403a16 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2620,9 +2620,9 @@
   <public type="attr" name="overflowTintMode" />
   <public type="attr" name="navigationTint" />
   <public type="attr" name="navigationTintMode" />
+  <public type="attr" name="fullBackupContent" />
 
   <public type="style" name="Widget.Material.Button.Colored" />
-
   <public type="style" name="Theme.Material.DayNight" />
   <public type="style" name="Theme.Material.DayNight.DarkActionBar" />
   <public type="style" name="Theme.Material.DayNight.Dialog" />
@@ -2651,7 +2651,12 @@
   <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="accessibilityActionStylusButtonPress" />
 
   <public type="attr" name="allowUndo" />
   <public type="attr" name="colorBackgroundFloating" />
@@ -2662,7 +2667,7 @@
   <public type="attr" name="autoVerify" />
   <public type="attr" name="breakStrategy" />
 
-  <public type="attr" name="supportsAssistGesture" />
+  <public type="attr" name="supportsAssist" />
   <public type="attr" name="thumbPosition" />
 
   <!-- Placeholder for a removed attribute. Remove this before M release. -->
@@ -2677,5 +2682,10 @@
   <!-- NFC CardEmulation: dynamically load service resources -->
   <public type="attr" name="dynamicResources" />
 
-  <public type="attr" name="assistBlocked" />
+  <attr name="__reserved0" format="boolean" />
+  <public type="attr" name="__reserved0" />
+
+  <public type="attr" name="stylusButtonPressable" />
+  <public type="attr" name="supportsLaunchVoiceAssistFromKeyguard" />
+  <public type="attr" name="scrollIndicators" />
 </resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index f36d448..5b564e1 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -255,6 +255,8 @@
     <string-array name="wfcOperatorErrorNotificationMessages" />
     <!-- Template for showing cellular network operator name while WFC is active -->
     <string name="wfcSpnFormat">%s</string>
+    <!-- Template for showing operator name for data connection while WFC is active -->
+    <string name="wfcDataSpnFormat">%s</string>
     <!-- WFC, summary for Disabled -->
     <string name="wifi_calling_off_summary">Off</string>
     <!-- WFC, summary for Wi-Fi Preferred -->
@@ -531,7 +533,7 @@
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_contacts">Contacts</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_contacts">access and modify your contacts</string>
+    <string name="permgroupdesc_contacts">access your contacts</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_location">Location</string>
@@ -546,12 +548,12 @@
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_calendar">Calendar</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_calendar">access and modify your calendar</string>
+    <string name="permgroupdesc_calendar">access your calendar</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_sms">SMS</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_sms">access and modify SMS</string>
+    <string name="permgroupdesc_sms">view and manage SMS messages</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_dictionary">User Dictionary</string>
@@ -566,22 +568,22 @@
     <!-- Title of a category of application permissioncds, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_microphone">Microphone</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_microphone">use device microphone</string>
+    <string name="permgroupdesc_microphone">record audio</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_camera">Camera</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_camera">use device camera</string>
+    <string name="permgroupdesc_camera">take pictures and record video</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_phone">Phone</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_phone">use device telephony</string>
+    <string name="permgroupdesc_phone">make and manage phone calls</string>
 
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_sensors">Sensors</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permgroupdesc_sensors">access sensors and wearables</string>
+    <string name="permgroupdesc_sensors">access data from sensors and wearable devices</string>
 
     <!-- Title for the capability of an accessibility service to retrieve window content. -->
     <string name="capability_title_canRetrieveWindowContent">Retrieve window content</string>
@@ -4066,10 +4068,13 @@
     <string name="zen_mode_downtime_feature_name">Downtime</string>
 
     <!-- Zen mode - name of default automatic schedule for weeknights. [CHAR LIMIT=40] -->
-    <string name="zen_mode_default_weeknights_name">Weeknights</string>
+    <string name="zen_mode_default_weeknights_name">Weeknight</string>
 
     <!-- Zen mode - name of default automatic schedule for weekends. [CHAR LIMIT=40] -->
-    <string name="zen_mode_default_weekends_name">Weekends</string>
+    <string name="zen_mode_default_weekends_name">Weekend</string>
+
+    <!-- Zen mode - name of default automatic calendar event-based rule. [CHAR LIMIT=40] -->
+    <string name="zen_mode_default_events_name">Event</string>
 
     <!-- Indication that the current volume and other effects (vibration) are being suppressed by a third party, such as a notification listener. [CHAR LIMIT=30] -->
     <string name="muted_by">Muted by <xliff:g id="third_party">%1$s</xliff:g></string>
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
index f81ee8c..c2371ee 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -533,7 +533,7 @@
         <item name="queryBackground">@empty</item>
         <item name="submitBackground">@empty</item>
         <item name="searchHintIcon">@empty</item>
-        <item name="queryHint">@string/search_hint</item>
+        <item name="defaultQueryHint">@string/search_hint</item>
     </style>
 
     <style name="Widget.Material.SegmentedButton" parent="SegmentedButton">
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 625f003..e54a0b2 100755
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -281,6 +281,7 @@
   <java-symbol type="bool" name="config_bluetooth_default_profiles" />
   <java-symbol type="bool" name="config_enableWifiDisplay" />
   <java-symbol type="bool" name="config_forceEnableVoiceInteractionService" />
+  <java-symbol type="bool" name="config_allowAnimationsInLowPowerMode" />
   <java-symbol type="bool" name="config_useDevInputEventForAudioJack" />
   <java-symbol type="bool" name="config_safe_media_volume_enabled" />
   <java-symbol type="bool" name="config_camera_sound_forced" />
@@ -772,6 +773,7 @@
   <java-symbol type="array" name="wfcOperatorErrorAlertMessages" />
   <java-symbol type="array" name="wfcOperatorErrorNotificationMessages" />
   <java-symbol type="string" name="wfcSpnFormat" />
+  <java-symbol type="string" name="wfcDataSpnFormat" />
   <java-symbol type="string" name="wifi_calling_off_summary" />
   <java-symbol type="string" name="wfc_mode_wifi_preferred_summary" />
   <java-symbol type="string" name="wfc_mode_cellular_preferred_summary" />
@@ -1442,6 +1444,7 @@
   <java-symbol type="array" name="config_longPressVibePattern" />
   <java-symbol type="array" name="config_safeModeDisabledVibePattern" />
   <java-symbol type="array" name="config_safeModeEnabledVibePattern" />
+  <java-symbol type="array" name="config_stylusButtonPressVibePattern" />
   <java-symbol type="array" name="config_virtualKeyVibePattern" />
   <java-symbol type="attr" name="actionModePopupWindowStyle" />
   <java-symbol type="attr" name="dialogCustomTitleDecorLayout" />
@@ -2062,6 +2065,7 @@
   <java-symbol type="string" name="zen_mode_downtime_feature_name" />
   <java-symbol type="string" name="zen_mode_default_weeknights_name" />
   <java-symbol type="string" name="zen_mode_default_weekends_name" />
+  <java-symbol type="string" name="zen_mode_default_events_name" />
   <java-symbol type="array" name="config_system_condition_providers" />
   <java-symbol type="string" name="muted_by" />
 
@@ -2177,8 +2181,6 @@
   <java-symbol type="bool" name="config_defaultWindowFeatureContextMenu" />
 
   <java-symbol type="layout" name="simple_account_item" />
-  <java-symbol type="id" name="scrollIndicatorUp" />
-  <java-symbol type="id" name="scrollIndicatorDown" />
   <java-symbol type="array" name="config_sms_convert_destination_number_support" />
   <java-symbol type="string" name="prohibit_manual_network_selection_in_gobal_mode" />
   <java-symbol type="id" name="profile_button" />
@@ -2201,7 +2203,6 @@
   <java-symbol type="string" name="usb_midi_peripheral_manufacturer_name" />
   <java-symbol type="string" name="usb_midi_peripheral_product_name" />
 
-  <java-symbol type="bool" name="allow_stacked_button_bar" />
   <java-symbol type="id" name="spacer" />
 
   <java-symbol type="xml" name="bookmarks" />
@@ -2240,7 +2241,7 @@
   <java-symbol type="dimen" name="floating_toolbar_overflow_side_padding" />
   <java-symbol type="dimen" name="floating_toolbar_text_size" />
   <java-symbol type="dimen" name="floating_toolbar_menu_button_minimum_width" />
-  <java-symbol type="dimen" name="floating_toolbar_default_width" />
+  <java-symbol type="dimen" name="floating_toolbar_preferred_width" />
   <java-symbol type="dimen" name="floating_toolbar_minimum_overflow_height" />
   <java-symbol type="dimen" name="floating_toolbar_horizontal_margin" />
   <java-symbol type="dimen" name="floating_toolbar_vertical_margin" />
@@ -2255,4 +2256,9 @@
   <java-symbol type="id" name="title_icon" />
   <java-symbol type="id" name="day_picker_view_pager" />
   <java-symbol type="layout" name="day_picker_content_material" />
+  <java-symbol type="drawable" name="scroll_indicator_material" />
+
+  <java-symbol type="layout" name="chooser_row" />
+  <java-symbol type="color" name="chooser_service_row_background_color" />
+  <java-symbol type="id" name="target_badge" />
 </resources>
diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml
index e679e0a..f02fed1 100644
--- a/core/res/res/values/themes_material.xml
+++ b/core/res/res/values/themes_material.xml
@@ -207,8 +207,8 @@
 
         <!-- Scrollbar attributes -->
         <item name="scrollbarFadeDuration">250</item>
-        <item name="scrollbarDefaultDelayBeforeFade">300</item>
-        <item name="scrollbarSize">10dip</item>
+        <item name="scrollbarDefaultDelayBeforeFade">400</item>
+        <item name="scrollbarSize">10dp</item>
         <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_material</item>
         <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_material</item>
         <item name="scrollbarTrackHorizontal">@null</item>
@@ -563,8 +563,8 @@
 
         <!-- Scrollbar attributes -->
         <item name="scrollbarFadeDuration">250</item>
-        <item name="scrollbarDefaultDelayBeforeFade">300</item>
-        <item name="scrollbarSize">10dip</item>
+        <item name="scrollbarDefaultDelayBeforeFade">400</item>
+        <item name="scrollbarSize">10dp</item>
         <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_material</item>
         <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_material</item>
         <item name="scrollbarTrackHorizontal">@null</item>
diff --git a/core/tests/coretests/src/android/app/backup/FullBackupTest.java b/core/tests/coretests/src/android/app/backup/FullBackupTest.java
new file mode 100644
index 0000000..8c9c63c
--- /dev/null
+++ b/core/tests/coretests/src/android/app/backup/FullBackupTest.java
@@ -0,0 +1,258 @@
+/*
+ * 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.app.backup;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.test.AndroidTestCase;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+import java.io.File;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class FullBackupTest extends AndroidTestCase {
+    private XmlPullParserFactory mFactory;
+    private XmlPullParser mXpp;
+    private Context mContext;
+
+    Map<String, Set<String>> includeMap;
+    Set<String> excludesSet;
+
+    @Override
+    public void setUp() throws Exception {
+        mFactory = XmlPullParserFactory.newInstance();
+        mXpp = mFactory.newPullParser();
+        mContext = getContext();
+
+        includeMap = new ArrayMap();
+        excludesSet = new ArraySet();
+    }
+
+    public void testparseBackupSchemeFromXml_onlyInclude() throws Exception {
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<include path=\"onlyInclude.txt\" domain=\"file\"/>" +
+                "</full-backup-content>"));
+
+        FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+        bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+
+        assertEquals("Excluding files when there was no <exclude/> tag.", 0, excludesSet.size());
+        assertEquals("Unexpected number of <include/>s", 1, includeMap.size());
+
+        Set<String> fileDomainIncludes = includeMap.get(FullBackup.DATA_TREE_TOKEN);
+        assertEquals("Didn't find expected file domain include.", 1, fileDomainIncludes.size());
+        assertEquals("Invalid path parsed for <include/>",
+                new File(mContext.getFilesDir(), "onlyInclude.txt").getCanonicalPath(),
+                fileDomainIncludes.iterator().next());
+    }
+
+    public void testparseBackupSchemeFromXml_onlyExclude() throws Exception {
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                    "<exclude path=\"onlyExclude.txt\" domain=\"file\"/>" +
+                "</full-backup-content>"));
+
+        FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+        bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+
+        assertEquals("Including files when there was no <include/> tag.", 0, includeMap.size());
+        assertEquals("Unexpected number of <exclude/>s", 1, excludesSet.size());
+        assertEquals("Invalid path parsed for <exclude/>",
+                new File(mContext.getFilesDir(), "onlyExclude.txt").getCanonicalPath(),
+                excludesSet.iterator().next());
+    }
+
+    public void testparseBackupSchemeFromXml_includeAndExclude() throws Exception {
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<exclude path=\"exclude.txt\" domain=\"file\"/>" +
+                        "<include path=\"include.txt\" domain=\"file\"/>" +
+                "</full-backup-content>"));
+
+        FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+        bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+
+        Set<String> fileDomainIncludes = includeMap.get(FullBackup.DATA_TREE_TOKEN);
+        assertEquals("Didn't find expected file domain include.", 1, fileDomainIncludes.size());
+        assertEquals("Invalid path parsed for <include/>",
+                new File(mContext.getFilesDir(), "include.txt").getCanonicalPath(),
+                fileDomainIncludes.iterator().next());
+
+        assertEquals("Unexpected number of <exclude/>s", 1, excludesSet.size());
+        assertEquals("Invalid path parsed for <exclude/>",
+                new File(mContext.getFilesDir(), "exclude.txt").getCanonicalPath(),
+                excludesSet.iterator().next());
+    }
+
+    public void testparseBackupSchemeFromXml_lotsOfIncludesAndExcludes() throws Exception {
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<exclude path=\"exclude1.txt\" domain=\"file\"/>" +
+                        "<include path=\"include1.txt\" domain=\"file\"/>" +
+                         "<exclude path=\"exclude2.txt\" domain=\"database\"/>" +
+                        "<include path=\"include2.txt\" domain=\"database\"/>" +
+                         "<exclude path=\"exclude3.txt\" domain=\"sharedpref\"/>" +
+                        "<include path=\"include3.txt\" domain=\"sharedpref\"/>" +
+                "</full-backup-content>"));
+
+
+        FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+        bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+
+        Set<String> fileDomainIncludes = includeMap.get(FullBackup.DATA_TREE_TOKEN);
+        assertEquals("Didn't find expected file domain include.", 1, fileDomainIncludes.size());
+        assertEquals("Invalid path parsed for <include/>",
+                new File(mContext.getFilesDir(), "include1.txt").getCanonicalPath(),
+                fileDomainIncludes.iterator().next());
+
+        Set<String> databaseDomainIncludes = includeMap.get(FullBackup.DATABASE_TREE_TOKEN);
+        assertEquals("Didn't find expected database domain include.",
+                2, databaseDomainIncludes.size()); // two expected here because of "-journal" file
+        assertTrue("Invalid path parsed for <include/>",
+                databaseDomainIncludes.contains(
+                        new File(mContext.getDatabasePath("foo").getParentFile(), "include2.txt")
+                                .getCanonicalPath()));
+        assertTrue("Invalid path parsed for <include/>",
+                databaseDomainIncludes.contains(
+                        new File(
+                                mContext.getDatabasePath("foo").getParentFile(),
+                                "include2.txt-journal")
+                                .getCanonicalPath()));
+
+        Set<String> sharedPrefDomainIncludes = includeMap.get(FullBackup.SHAREDPREFS_TREE_TOKEN);
+        assertEquals("Didn't find expected sharedpref domain include.",
+                1, sharedPrefDomainIncludes.size());
+        assertEquals("Invalid path parsed for <include/>",
+                new File(mContext.getSharedPrefsFile("foo").getParentFile(), "include3.txt")
+                        .getCanonicalPath(),
+                sharedPrefDomainIncludes.iterator().next());
+
+
+        assertEquals("Unexpected number of <exclude/>s", 4, excludesSet.size());
+        // Sets are annoying to iterate over b/c order isn't enforced - convert to an array and
+        // sort lexicographically.
+        List<String> arrayedSet = new ArrayList<String>(excludesSet);
+        Collections.sort(arrayedSet);
+
+        assertEquals("Invalid path parsed for <exclude/>",
+                new File(mContext.getDatabasePath("foo").getParentFile(), "exclude2.txt")
+                        .getCanonicalPath(),
+                arrayedSet.get(0));
+        assertEquals("Invalid path parsed for <exclude/>",
+                new File(mContext.getDatabasePath("foo").getParentFile(), "exclude2.txt-journal")
+                        .getCanonicalPath(),
+                arrayedSet.get(1));
+        assertEquals("Invalid path parsed for <exclude/>",
+                new File(mContext.getFilesDir(), "exclude1.txt").getCanonicalPath(),
+                arrayedSet.get(2));
+        assertEquals("Invalid path parsed for <exclude/>",
+                new File(mContext.getSharedPrefsFile("foo").getParentFile(), "exclude3.txt")
+                        .getCanonicalPath(),
+                arrayedSet.get(3));
+    }
+
+    public void testParseBackupSchemeFromXml_invalidXmlFails() throws Exception {
+        // Invalid root tag.
+        mXpp.setInput(new StringReader(
+                "<full-weird-tag>" +
+                        "<exclude path=\"invalidRootTag.txt\" domain=\"file\"/>" +
+                        "</ffull-weird-tag>" ));
+
+        try {
+            FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+            bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+            fail("Invalid root xml tag should throw an XmlPullParserException");
+        } catch (XmlPullParserException expected) {}
+
+        // Invalid exclude tag.
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<excluded path=\"invalidExcludeTag.txt\" domain=\"file\"/>" +
+                "</full-backup-conten>t" ));
+        try {
+            FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+            bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+            fail("Misspelled xml exclude tag should throw an XmlPullParserException");
+        } catch (XmlPullParserException expected) {}
+
+        // Just for good measure - invalid include tag.
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<yinclude path=\"invalidIncludeTag.txt\" domain=\"file\"/>" +
+                        "</full-backup-conten>t" ));
+        try {
+            FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+            bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+            fail("Misspelled xml exclude tag should throw an XmlPullParserException");
+        } catch (XmlPullParserException expected) {}
+
+    }
+
+    public void testInvalidPath_doesNotBackup() throws Exception {
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<exclude path=\"..\" domain=\"file\"/>" +  // Invalid use of ".." dir.
+                        "</full-backup-content>" ));
+
+        FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+        bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+
+        assertEquals("Didn't throw away invalid \"..\" path.", 0, includeMap.size());
+
+        Set<String> fileDomainIncludes = includeMap.get(FullBackup.DATA_TREE_TOKEN);
+        assertNull("Didn't throw away invalid \"..\" path.", fileDomainIncludes);
+    }
+    public void testDoubleDotInPath_isIgnored() throws Exception {
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<include path=\"..\" domain=\"file\"/>" +  // Invalid use of ".." dir.
+                        "</full-backup-content>" ));
+
+        FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+        bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+
+        assertEquals("Didn't throw away invalid \"..\" path.", 0, includeMap.size());
+
+        Set<String> fileDomainIncludes = includeMap.get(FullBackup.DATA_TREE_TOKEN);
+        assertNull("Didn't throw away invalid \"..\" path.", fileDomainIncludes);
+    }
+
+    public void testDoubleSlashInPath_isIgnored() throws Exception {
+        mXpp.setInput(new StringReader(
+                "<full-backup-content>" +
+                        "<exclude path=\"//hello.txt\" domain=\"file\"/>" +  // Invalid use of "//"
+                        "</full-backup-content>" ));
+
+        FullBackup.BackupScheme bs = FullBackup.getBackupSchemeForTest(mContext);
+        bs.parseBackupSchemeFromXmlLocked(mXpp, excludesSet, includeMap);
+
+        assertEquals("Didn't throw away invalid path containing \"//\".", 0, excludesSet.size());
+    }
+}
diff --git a/core/tests/coretests/src/android/util/FloatMathTest.java b/core/tests/coretests/src/android/util/FloatMathTest.java
deleted file mode 100644
index f479e2b..0000000
--- a/core/tests/coretests/src/android/util/FloatMathTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.util;
-
-import junit.framework.TestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-public class FloatMathTest extends TestCase {
-
-    @SmallTest
-    public void testSqrt() {
-        assertEquals(7, FloatMath.sqrt(49), 0);
-        assertEquals(10, FloatMath.sqrt(100), 0);
-        assertEquals(0, FloatMath.sqrt(0), 0);
-        assertEquals(1, FloatMath.sqrt(1), 0);
-    }
-
-    @SmallTest
-    public void testFloor() {
-        assertEquals(78, FloatMath.floor(78.89f), 0);
-        assertEquals(-79, FloatMath.floor(-78.89f), 0);
-    }
-
-    @SmallTest
-    public void testCeil() {
-        assertEquals(79, FloatMath.ceil(78.89f), 0);
-        assertEquals(-78, FloatMath.ceil(-78.89f), 0);
-    }
-
-    @SmallTest
-    public void testSin() {
-        assertEquals(0.0, FloatMath.sin(0), 0);
-        assertEquals(0.8414709848078965f, FloatMath.sin(1), 0);
-    }
-
-    @SmallTest
-    public void testCos() {
-        assertEquals(1.0f, FloatMath.cos(0), 0);
-        assertEquals(0.5403023058681398f, FloatMath.cos(1), 0);
-    }
-}
diff --git a/core/tests/coretests/src/com/android/internal/util/CallbackRegistryTest.java b/core/tests/coretests/src/com/android/internal/util/CallbackRegistryTest.java
new file mode 100644
index 0000000..c53f4cc
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/util/CallbackRegistryTest.java
@@ -0,0 +1,305 @@
+/*
+ * 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.internal.util;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class CallbackRegistryTest extends TestCase {
+
+    final Integer callback1 = 1;
+    final Integer callback2 = 2;
+    final Integer callback3 = 3;
+    CallbackRegistry<Integer, CallbackRegistryTest, Integer> registry;
+    int notify1;
+    int notify2;
+    int notify3;
+    int[] deepNotifyCount = new int[300];
+    Integer argValue;
+
+    private void addNotifyCount(Integer callback) {
+        if (callback == callback1) {
+            notify1++;
+        } else if (callback == callback2) {
+            notify2++;
+        } else if (callback == callback3) {
+            notify3++;
+        }
+        deepNotifyCount[callback]++;
+    }
+
+    public void testAddListener() {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg, Integer arg2) {
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        Integer callback = 0;
+
+        assertNotNull(registry.copyListeners());
+        assertEquals(0, registry.copyListeners().size());
+
+        registry.add(callback);
+        ArrayList<Integer> callbacks = registry.copyListeners();
+        assertEquals(1, callbacks.size());
+        assertEquals(callback, callbacks.get(0));
+
+        registry.add(callback);
+        callbacks = registry.copyListeners();
+        assertEquals(1, callbacks.size());
+        assertEquals(callback, callbacks.get(0));
+
+        Integer otherListener = 1;
+        registry.add(otherListener);
+        callbacks = registry.copyListeners();
+        assertEquals(2, callbacks.size());
+        assertEquals(callback, callbacks.get(0));
+        assertEquals(otherListener, callbacks.get(1));
+
+        registry.remove(callback);
+        registry.add(callback);
+        callbacks = registry.copyListeners();
+        assertEquals(2, callbacks.size());
+        assertEquals(callback, callbacks.get(1));
+        assertEquals(otherListener, callbacks.get(0));
+    }
+
+    public void testSimpleNotify() {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg1, Integer arg) {
+                        assertEquals(arg1, (int) arg);
+                        addNotifyCount(callback);
+                        argValue = arg;
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        registry.add(callback2);
+        Integer arg = 1;
+        registry.notifyCallbacks(this, arg, arg);
+        assertEquals(arg, argValue);
+        assertEquals(1, notify2);
+    }
+
+    public void testRemoveWhileNotifying() {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg1, Integer arg) {
+                        addNotifyCount(callback);
+                        if (callback == callback1) {
+                            registry.remove(callback1);
+                            registry.remove(callback2);
+                        }
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        registry.add(callback1);
+        registry.add(callback2);
+        registry.add(callback3);
+        registry.notifyCallbacks(this, 0, null);
+        assertEquals(1, notify1);
+        assertEquals(1, notify2);
+        assertEquals(1, notify3);
+
+        ArrayList<Integer> callbacks = registry.copyListeners();
+        assertEquals(1, callbacks.size());
+        assertEquals(callback3, callbacks.get(0));
+    }
+
+    public void testDeepRemoveWhileNotifying() {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg1, Integer arg) {
+                        addNotifyCount(callback);
+                        registry.remove(callback);
+                        registry.notifyCallbacks(CallbackRegistryTest.this, arg1, null);
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        registry.add(callback1);
+        registry.add(callback2);
+        registry.add(callback3);
+        registry.notifyCallbacks(this, 0, null);
+        assertEquals(1, notify1);
+        assertEquals(2, notify2);
+        assertEquals(3, notify3);
+
+        ArrayList<Integer> callbacks = registry.copyListeners();
+        assertEquals(0, callbacks.size());
+    }
+
+    public void testAddRemovedListener() {
+
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg1, Integer arg) {
+                        addNotifyCount(callback);
+                        if (callback == callback1) {
+                            registry.remove(callback2);
+                        } else if (callback == callback3) {
+                            registry.add(callback2);
+                        }
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+
+        registry.add(callback1);
+        registry.add(callback2);
+        registry.add(callback3);
+        registry.notifyCallbacks(this, 0, null);
+
+        ArrayList<Integer> callbacks = registry.copyListeners();
+        assertEquals(3, callbacks.size());
+        assertEquals(callback1, callbacks.get(0));
+        assertEquals(callback3, callbacks.get(1));
+        assertEquals(callback2, callbacks.get(2));
+        assertEquals(1, notify1);
+        assertEquals(1, notify2);
+        assertEquals(1, notify3);
+    }
+
+    public void testVeryDeepRemoveWhileNotifying() {
+        final Integer[] callbacks = new Integer[deepNotifyCount.length];
+        for (int i = 0; i < callbacks.length; i++) {
+            callbacks[i] = i;
+        }
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg1, Integer arg) {
+                        addNotifyCount(callback);
+                        registry.remove(callback);
+                        registry.remove(callbacks[callbacks.length - callback - 1]);
+                        registry.notifyCallbacks(CallbackRegistryTest.this, arg1, null);
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        for (int i = 0; i < callbacks.length; i++) {
+            registry.add(callbacks[i]);
+        }
+        registry.notifyCallbacks(this, 0, null);
+        for (int i = 0; i < deepNotifyCount.length; i++) {
+            int expectedCount = Math.min(i + 1, deepNotifyCount.length - i);
+            assertEquals(expectedCount, deepNotifyCount[i]);
+        }
+
+        ArrayList<Integer> callbackList = registry.copyListeners();
+        assertEquals(0, callbackList.size());
+    }
+
+    public void testClear() {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg1, Integer arg) {
+                        addNotifyCount(callback);
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        for (int i = 0; i < deepNotifyCount.length; i++) {
+            registry.add(i);
+        }
+        registry.clear();
+
+        ArrayList<Integer> callbackList = registry.copyListeners();
+        assertEquals(0, callbackList.size());
+
+        registry.notifyCallbacks(this, 0, null);
+        for (int i = 0; i < deepNotifyCount.length; i++) {
+            assertEquals(0, deepNotifyCount[i]);
+        }
+    }
+
+    public void testNestedClear() {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg1, Integer arg) {
+                        addNotifyCount(callback);
+                        registry.clear();
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        for (int i = 0; i < deepNotifyCount.length; i++) {
+            registry.add(i);
+        }
+        registry.notifyCallbacks(this, 0, null);
+        for (int i = 0; i < deepNotifyCount.length; i++) {
+            assertEquals(1, deepNotifyCount[i]);
+        }
+
+        ArrayList<Integer> callbackList = registry.copyListeners();
+        assertEquals(0, callbackList.size());
+    }
+
+    public void testIsEmpty() throws Exception {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg, Integer arg2) {
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+        Integer callback = 0;
+
+        assertTrue(registry.isEmpty());
+        registry.add(callback);
+        assertFalse(registry.isEmpty());
+    }
+
+    public void testClone() throws Exception {
+        CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier =
+                new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() {
+                    @Override
+                    public void onNotifyCallback(Integer callback, CallbackRegistryTest sender,
+                            int arg, Integer arg2) {
+                    }
+                };
+        registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier);
+
+        assertTrue(registry.isEmpty());
+        CallbackRegistry<Integer, CallbackRegistryTest, Integer> registry2 = registry.clone();
+        Integer callback = 0;
+        registry.add(callback);
+        assertFalse(registry.isEmpty());
+        assertTrue(registry2.isEmpty());
+        registry2 = registry.clone();
+        assertFalse(registry2.isEmpty());
+    }
+}
diff --git a/data/fonts/fallback_fonts.xml b/data/fonts/fallback_fonts.xml
index dc364a12..0aa588b 100644
--- a/data/fonts/fallback_fonts.xml
+++ b/data/fonts/fallback_fonts.xml
@@ -402,12 +402,12 @@
     </family>
     <family>
         <fileset>
-            <file lang="zh-Hans">NotoSansHans-Regular.otf</file>
+            <file lang="zh-Hans">NotoSansSC-Regular.otf</file>
         </fileset>
     </family>
     <family>
         <fileset>
-            <file lang="zh-Hant">NotoSansHant-Regular.otf</file>
+            <file lang="zh-Hant">NotoSansTC-Regular.otf</file>
         </fileset>
     </family>
     <family>
diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml
index 44ea1c9..f903aab 100644
--- a/data/fonts/fonts.xml
+++ b/data/fonts/fonts.xml
@@ -329,10 +329,10 @@
         <font weight="400" style="normal">NotoSansYi-Regular.ttf</font>
     </family>
     <family lang="zh-Hans">
-        <font weight="400" style="normal">NotoSansHans-Regular.otf</font>
+        <font weight="400" style="normal">NotoSansSC-Regular.otf</font>
     </family>
     <family lang="zh-Hant">
-        <font weight="400" style="normal">NotoSansHant-Regular.otf</font>
+        <font weight="400" style="normal">NotoSansTC-Regular.otf</font>
     </family>
     <family lang="ja">
         <font weight="400" style="normal">NotoSansJP-Regular.otf</font>
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index 52f086e..ab3069e 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -57,7 +57,7 @@
 </div>
 
 
-<p style="clear:both"><em>Data collected during a 7-day period ending on April 6, 2015.
+<p style="clear:both"><em>Data collected during a 7-day period ending on May 4, 2015.
 <br/>Any versions with less than 0.1% distribution are not shown.</em>
 </p>
 
@@ -88,7 +88,7 @@
 </div>
 
 
-<p style="clear:both"><em>Data collected during a 7-day period ending on April 6, 2015.
+<p style="clear:both"><em>Data collected during a 7-day period ending on May 4, 2015.
 
 <br/>Any screen configurations with less than 0.1% distribution are not shown.</em></p>
 
@@ -108,7 +108,7 @@
 
 
 <img alt="" style="float:right"
-src="//chart.googleapis.com/chart?chl=GL%202.0%7CGL%203.0%7CGL%203.1&chf=bg%2Cs%2C00000000&chd=t%3A65.9%2C33.8%2C0.3&chco=c4df9b%2C6fad0c&cht=p&chs=400x250">
+src="//chart.googleapis.com/chart?chl=GL%202.0%7CGL%203.0%7CGL%203.1&chf=bg%2Cs%2C00000000&chd=t%3A64.1%2C34.5%2C1.4&chco=c4df9b%2C6fad0c&cht=p&chs=400x250">
 
 <p>To declare which version of OpenGL ES your application requires, you should use the {@code
 android:glEsVersion} attribute of the <a
@@ -126,21 +126,21 @@
 </tr>
 <tr>
 <td>2.0</td>
-<td>65.9%</td>
+<td>64.1%</td>
 </tr>
 <tr>
 <td>3.0</td>
-<td>33.8%</td>
+<td>34.5%</td>
 </tr>
 <tr>
 <td>3.1</td>
-<td>0.3%</td>
+<td>1.4%</td>
 </tr>
 </table>
 
 
 
-<p style="clear:both"><em>Data collected during a 7-day period ending on April 6, 2015</em></p>
+<p style="clear:both"><em>Data collected during a 7-day period ending on May 4, 2015</em></p>
 
 
 
@@ -158,52 +158,52 @@
 var VERSION_DATA =
 [
   {
-    "chart": "//chart.googleapis.com/chart?chl=Froyo%7CGingerbread%7CIce%20Cream%20Sandwich%7CJelly%20Bean%7CKitKat%7CLollipop&chf=bg%2Cs%2C00000000&chd=t%3A0.4%2C6.4%2C5.7%2C40.7%2C41.4%2C5.4&chco=c4df9b%2C6fad0c&chs=500x250&cht=p",
+    "chart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A0.3%2C5.7%2C5.3%2C39.2%2C39.8%2C9.7&chl=Froyo%7CGingerbread%7CIce%20Cream%20Sandwich%7CJelly%20Bean%7CKitKat%7CLollipop&chs=500x250&cht=p&chco=c4df9b%2C6fad0c",
     "data": [
       {
         "api": 8,
         "name": "Froyo",
-        "perc": "0.4"
+        "perc": "0.3"
       },
       {
         "api": 10,
         "name": "Gingerbread",
-        "perc": "6.4"
+        "perc": "5.7"
       },
       {
         "api": 15,
         "name": "Ice Cream Sandwich",
-        "perc": "5.7"
+        "perc": "5.3"
       },
       {
         "api": 16,
         "name": "Jelly Bean",
-        "perc": "16.5"
+        "perc": "15.6"
       },
       {
         "api": 17,
         "name": "Jelly Bean",
-        "perc": "18.6"
+        "perc": "18.1"
       },
       {
         "api": 18,
         "name": "Jelly Bean",
-        "perc": "5.6"
+        "perc": "5.5"
       },
       {
         "api": 19,
         "name": "KitKat",
-        "perc": "41.4"
+        "perc": "39.8"
       },
       {
         "api": 21,
         "name": "Lollipop",
-        "perc": "5.0"
+        "perc": "9.0"
       },
       {
         "api": 22,
         "name": "Lollipop",
-        "perc": "0.4"
+        "perc": "0.7"
       }
     ]
   }
@@ -222,14 +222,14 @@
         "xhdpi": "0.6"
       },
       "Normal": {
-        "hdpi": "39.3",
-        "mdpi": "8.1",
+        "hdpi": "39.5",
+        "mdpi": "7.6",
         "tvdpi": "0.1",
-        "xhdpi": "19.5",
-        "xxhdpi": "15.9"
+        "xhdpi": "19.8",
+        "xxhdpi": "16.2"
       },
       "Small": {
-        "ldpi": "4.4"
+        "ldpi": "4.1"
       },
       "Xlarge": {
         "hdpi": "0.3",
@@ -237,8 +237,8 @@
         "xhdpi": "0.6"
       }
     },
-    "densitychart": "//chart.googleapis.com/chart?chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&chf=bg%2Cs%2C00000000&chd=t%3A4.8%2C16.1%2C2.3%2C40.2%2C20.7%2C15.9&chco=c4df9b%2C6fad0c&chs=400x250&cht=p",
-    "layoutchart": "//chart.googleapis.com/chart?chl=Xlarge%7CLarge%7CNormal%7CSmall&chf=bg%2Cs%2C00000000&chd=t%3A4.1%2C8.6%2C82.9%2C4.4&chco=c4df9b%2C6fad0c&chs=400x250&cht=p"
+    "densitychart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A4.5%2C15.6%2C2.3%2C40.4%2C21.0%2C16.2&chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&chs=400x250&cht=p&chco=c4df9b%2C6fad0c",
+    "layoutchart": "//chart.googleapis.com/chart?chf=bg%2Cs%2C00000000&chd=t%3A4.1%2C8.6%2C83.2%2C4.1&chl=Xlarge%7CLarge%7CNormal%7CSmall&chs=400x250&cht=p&chco=c4df9b%2C6fad0c"
   }
 ];
 
diff --git a/docs/html/auto/index.jd b/docs/html/auto/index.jd
index ca63a54..66ea15a 100644
--- a/docs/html/auto/index.jd
+++ b/docs/html/auto/index.jd
@@ -3,7 +3,7 @@
 fullpage=true
 no_footer_links=true
 page.type=about
-page.image=/auto/images/hero.jpg
+page.image=/images/cards/android-auto_2x.png
 
 @jd:body
 
@@ -12,9 +12,6 @@
 #jd-content>.content-footer.wrap {
   display:none;
 }
-#hero-height {
-  height:calc(100% - 100px);
-}
 .img-logo {
   margin:0 auto;
   display:block;
diff --git a/docs/html/design/building-blocks/buttons.jd b/docs/html/design/building-blocks/buttons.jd
deleted file mode 100644
index e698f38..0000000
--- a/docs/html/design/building-blocks/buttons.jd
+++ /dev/null
@@ -1,99 +0,0 @@
-page.title=Buttons
-page.tags=button,input
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/buttons.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Buttons<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/button.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Buttons</p>
-  </div>
-</a>
-
-<p itemprop="description">A button consists of text and/or an image that clearly communicates what action
-  will occur when the user touches it. A button can have an image, text, or both.
-</p>
-
-<div class="layout-content-row" style="margin-top:22px">
-  <div class="layout-content-col span-3">
-    <img src="{@docRoot}design/media/icon_magnifying_glass.png" style="height:64px;padding:20px 0 0 40px;">
-  </div>
-  <div class="layout-content-col span-3">
-    <img src="{@docRoot}design/media/buttons_text.png"  style="height:94px;">
-  </div>
-  <div class="layout-content-col span-7">
-    <img src="{@docRoot}design/media/buttons_image_and_text.png"  style="height:94px;">
-  </div>
-</div>
-
-<div class="layout-content-row" style="margin-top:0;">
-  <div class="layout-content-col span-3">
-      <p>An image alone works best when the action can be represented by a symbol that's well understood.</p>
-  </div>
-  <div class="layout-content-col span-3">
-      <p>Text alone is most appropriate for actions that would be difficult to
-      represent visually, or are critical to convey in words to avoid any ambiguity.</p>
-  </div>
-  <div class="layout-content-col span-7">
-    <p>
-      Both an icon and text is most appropriate when they complement each other:
-      each carrying its own bit of information, but together making a larger whole.
-    </p>
-
-    <p>
-      For example, in a birthday reminder card in Google Now, the button's text
-      describes the action while its image indicates that the action will be done
-      in Google+.
-    </p>
-  </div>
-</div>
-
-<h3>What about button backgrounds?</h3>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-    <p>For <strong>image-only</strong> buttons, a background isn't necessary because
-    users are accustomed to interacting with objects.</p>
-
-    <div class="layout-content-row" style="margin-left:72px">
-      <div class="layout-content-col span-2">
-        <div class="do-dont-label bad emulate-content-left-padding" style="width:30px">Don't</div>
-        <img src="{@docRoot}design/media/buttons_image_bg_dont.png" style="padding-left:14px;">
-      </div>
-      <div class="layout-content-col span-2" style="width:29px;margin-left:10px;">
-        <div class="do-dont-label good"><strong>Do</strong></div>
-        <img src="{@docRoot}design/media/icon_alarm.png" style="width:31px;padding-top:7px;">
-      </div>
-    </div>
-  </div>
-
-<div class="layout-content-col span-7">
-<p>
-  For buttons <strong>with text</strong>, a background is also usually
-  unnecessary. To invite users to touch, phrase it as a clear action (e.g.
-  "Start", "Sign in") and use different color and formatting than the screen's
-  usual body text.
-</p>
-
-<p>
-  Use buttons with backgrounds sparingly. Because they have a heavy appearance,
-  they work best when there's only one or two of them on the screen. They're
-  most appropriate for:
-</p>
-
-<ul>
-  <li>A call to action you really want users to pursue (e.g. "Sign up")</li>
-  <li>A key decision point (e.g. "Accept" / "Decline")</li>
-  <li>When the user is about to commit a significant action (e.g. "Erase
-  everything", "Buy now")</li>
-</ul>
-</div>
-</div>
-
diff --git a/docs/html/design/building-blocks/dialogs.jd b/docs/html/design/building-blocks/dialogs.jd
deleted file mode 100644
index 9c91abf..0000000
--- a/docs/html/design/building-blocks/dialogs.jd
+++ /dev/null
@@ -1,186 +0,0 @@
-page.title=Dialogs
-page.tags=dialog,alert,popup,toast
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/dialogs.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Dialogs<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/dialogs.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Dialogs</p>
-  </div>
-</a>
-
-<p itemprop="description">Dialogs prompt the user for decisions or additional information required by the app to continue a
-task. Such requests can range from simple Cancel/OK decisions to more complex layouts asking the
-user to adjust settings or enter text.</p>
-
-<img src="{@docRoot}design/media/dialogs_main.png">
-
-<div class="with-callouts">
-
-<ol>
-  <li>
-  <h4>Optional title region</h4>
-  <p>The title introduces the content of your dialog. It can, for example, identify the name of a
-   setting that the user is about to change, or request a decision.</p>
-  </li>
-  <li>
-  <h4>Content area</h4>
-  <p>Dialog content varies widely. For settings dialogs, a dialog may contain UI elements such as
-   sliders, text fields, checkboxes, or radio buttons that allow the user to change app or system
-   settings. In other cases, such as alerts, the content may consist solely of text that provides
-   further context for a user decision.</p>
-  </li>
-
-  <li>
-  <h4>Action buttons</h4>
-  <p>Action buttons are typically Cancel and/or OK, with OK indicating the preferred or most likely action. However, if the options consist of specific actions such as Close or Wait rather than a confirmation or cancellation of the action described in the content, then all the buttons should be active verbs. Order actions following these rules:</p>
-    <ul>
-
-    <li>The dismissive action of a dialog is always on the left. Dismissive actions return to the user to the previous state.</li>
-    <li>The affirmative actions are on the right. Affirmative actions continue progress toward the user goal that triggered the dialog.</li>
-    </ul>
-  </li>
-</ol>
-</div>
-
-<img src="{@docRoot}design/media/dialogs_examples.png">
-<div class="figure-caption">
-  Samples of typical dialog use in Android.
-</div>
-
-<h2 id="alerts">Alerts</h2>
-
-<p>Alerts inform the user about a situation that requires their confirmation or acknowledgement before
-proceeding. They differ slightly in appearance based upon the severity and impact of the message
-conveyed.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/dialogs_w_no_title.png">
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<h4>Alerts without title bars</h4>
-<p>Most alerts don't need titles. Usually the decision doesn't have a severe impact and can be summed
-up succinctly in a sentence or two. The content area should either ask a question (such as "Delete
-this conversation?") or make a clear statement whose relationship to the action buttons is obvious.</p>
-
-  </div>
-</div>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/dialogs_w_title.png">
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<h4>Alerts with title bars</h4>
-<p>Use alerts with title bars sparingly. They are appropriate only when a high-risk operation involving
-potential loss of data, connectivity, extra charges, and so on requires a clear question or
-statement (the title) and some additional explanation (in the content area).</p>
-<p>Keep the question or statement short: for example, "Erase USB storage?" Avoid apologies. A user
-should be able to skip the content completely and still have a clear idea of what choices are
-available based on the title and the text of the action buttons.</p>
-
-  </div>
-</div>
-<p>When crafting a confirmation dialog, make the title meaningful by echoing the requested action.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-    <div class="do-dont-label bad">Don't</div>
-      <table class="ui-table bad">
-      <thead>
-        <tr>
-          <th class="label">
-          Are you sure?
-          </th>
-        </tr>
-      </thead>
-      </table>
-  </div>
-  <div class="layout-content-col span-4">
-    <div class="do-dont-label bad">Don't</div>
-      <table class="ui-table bad">
-      <thead>
-        <tr>
-          <th class="label">
-          Warning!
-          </th>
-        </tr>
-      </thead>
-      </table>
-  </div>
-  <div class="layout-content-col span-5">
-    <div class="do-dont-label good">Do</div>
-      <table class="ui-table good">
-      <thead>
-        <tr>
-          <th class="label">
-          Erase USB storage?
-          </th>
-        </tr>
-      </thead>
-      </table>
-  </div>
-</div>
-
-
-<h2 id="popups">Popups</h2>
-
-<p>Popups are lightweight version of dialogs that require a single selection from the user. Popups
-don't have have explicit buttons that accept or cancel the operation. Instead, making a selection
-advances the workflow, and simply touching outside the popup dismisses it.</p>
-
-<img src="{@docRoot}design/media/dialogs_popups_example.png">
-
-
-<h2 id="toasts">Toasts</h2>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-    <div class="vspace size-3"></div>
-
-<p>Toasts provide lightweight feedback about an operation in a small popup. For example, navigating
-away from an email before you send it triggers a "Draft saved" toast to let you know that you can
-continue editing later. Toasts automatically disappear after a timeout.</p>
-
-<a class="notice-designers-material left"
-  href="http://www.google.com/design/spec/components/snackbars-toasts.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Toasts<p>
-  </div>
-</a>
-
-
-<a class="notice-developers left" href="{@docRoot}guide/topics/ui/notifiers/toasts.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Toasts</p>
-  </div>
-</a>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/dialogs_toasts.png">
-
-  </div>
-</div>
-
diff --git a/docs/html/design/building-blocks/grid-lists.jd b/docs/html/design/building-blocks/grid-lists.jd
deleted file mode 100644
index ac3a3ebf..0000000
--- a/docs/html/design/building-blocks/grid-lists.jd
+++ /dev/null
@@ -1,96 +0,0 @@
-page.title=Grid Lists
-page.tags=gridview,layout,listview
-@jd:body
-
-<img src="{@docRoot}design/media/gridview_overview.png">
-
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/grid-lists.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Grid lists<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/layout/gridview.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Grid View</p>
-  </div>
-</a>
-
-<p itemprop="description">Grid lists are an alternative to standard list views. They are best suited for showing data sets
-that represent themselves through images. In contrast to simple lists, grid lists may scroll either
-vertically or horizontally.</p>
-
-
-
-<h2 id="generic_grid">Generic Grids</h2>
-
-
-<p>The items in a grid list are arranged in two dimensions, one of which is fixed when scrolling
-content. The scrolling direction dictates the ordering of the items within the grid list. Since the
-scrolling direction is not deterministic, make it easy for the user to determine the orientation by
-cutting off grid items to communicate where the overflow is located.</p>
-<p>Avoid creating grid lists that scroll in two dimensions.</p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/gridview_vertical.png">
-
-  </div>
-  <div class="layout-content-col span-6">
-
-<h4>Vertical scrolling</h4>
-<p>Vertically scrolling grid list items are sorted in traditional western reading direction:
-left-to-right and top-down. When displaying the list, cut off the items in the bottom row to
-communicate that the user can scroll the list down to show additional items. Be sure to retain this
-scheme when the user rotates the screen.</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/gridview_horizontal.png">
-
-  </div>
-  <div class="layout-content-col span-6">
-
-<h4>Horizontal scrolling</h4>
-<p>Horizontally scrolling lists fix the vertical axis of the item grid. Compared to vertically
-scrolling lists, the sorting changes slightly to a top-down and left-to-right arrangement. Employ
-the same technique of cutting off the items in the rightmost column to indicate the scrolling
-direction.</p>
-<p>Don't use scrolling tabs as a means to switch views in conjunction with horizontally scrolling grid
-lists, because the horizontal gesture for view and content navigation will conflict. If you show
-scrolling tabs for view navigation together with a grid list, use vertical grid scrolling for list
-navigation.</p>
-
-  </div>
-</div>
-
-
-<h2 id="with-labels">Grid List with Labels</h2>
-
-<p>Use labels to display additional contextual information for your grid list items.</p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/gridview_style.png">
-
-  </div>
-  <div class="layout-content-col span-6">
-
-<h4>Style</h4>
-<p>Use semi-transparent panels on top of the grid list items to display your labels. This allows you to
-control the contrast and ensures legibility of the labels while letting the content "shine through".</p>
-
-  </div>
-</div>
diff --git a/docs/html/design/building-blocks/index.jd b/docs/html/design/building-blocks/index.jd
deleted file mode 100644
index 7fb0e55..0000000
--- a/docs/html/design/building-blocks/index.jd
+++ /dev/null
@@ -1,30 +0,0 @@
-page.title=Building Blocks
-header.justLinks=1
-footer.hide=1
-@jd:body
-
-<style>
-#landing-graphic-container {
-  position: relative;
-}
-
-#text-overlay {
-  position: absolute;
-  left: 0;
-  top: 520px;
-  width: 450px;
-}
-</style>
-
-<div id="landing-graphic-container">
-  <div id="text-overlay">
-    <span itemprop="description">Your inventory of ready-to-use elements for creating
-    outstanding apps.</span>
-    <br><br>
-    <a href="{@docRoot}design/building-blocks/tabs.html" class="landing-page-link">Tabs</a>
-  </div>
-
-  <a href="{@docRoot}design/building-blocks/tabs.html">
-    <img src="{@docRoot}design/media/building_blocks_landing.png">
-  </a>
-</div>
diff --git a/docs/html/design/building-blocks/lists.jd b/docs/html/design/building-blocks/lists.jd
deleted file mode 100644
index 6f69feb..0000000
--- a/docs/html/design/building-blocks/lists.jd
+++ /dev/null
@@ -1,56 +0,0 @@
-page.title=Lists
-page.tags=listview,layout
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/lists.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Lists<p>
-  </div>
-</a>
-
-<p itemprop="description">Lists present multiple line items in a vertical arrangement. They can be used for data selection as
-well as drilldown navigation.</p>
-
-<div class="vspace size-1">&nbsp;</div>
-
-<div class="layout-content-row clearfix">
-  <div class="layout-content-col span-9">
-
-    <img src="{@docRoot}design/media/lists_main.png">
-
-  </div>
-  <div class="layout-content-col span-4 with-callouts">
-
-<ol style="margin-bottom: 60px;">
-<li>
-<h4>Section Divider</h4>
-<p>Use section dividers to organize the content of your list into groups and facilitate scanning.</p>
-</li>
-<li>
-<h4>Line Items</h4>
-<p>List items can accommodate a wide range of data types in different arrangements, including
- simple single-line items, multi-line items, and custom items with icons, checkboxes, and action
- buttons.</p>
-</li>
-</ol>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/layout/listview.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>List View</p>
-  </div>
-</a>
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/lists-controls.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Lists: Controls<p>
-  </div>
-</a>
-
-
-  </div>
-</div>
diff --git a/docs/html/design/building-blocks/pickers.jd b/docs/html/design/building-blocks/pickers.jd
deleted file mode 100644
index fb5e287..0000000
--- a/docs/html/design/building-blocks/pickers.jd
+++ /dev/null
@@ -1,40 +0,0 @@
-page.title=Pickers
-page.tags=datepicker,timepicker
-@jd:body
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/pickers.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Pickers</p>
-  </div>
-</a>
-
-<p itemprop="description">Pickers provide a simple way to select a single value from a set. In addition to touching the
-up/down arrow buttons, it's possible to set the desired value from the keyboard or via a swipe
-gesture.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-    <img src="{@docRoot}design/media/picker_space.png">
-
-  </div>
-  <div class="layout-content-col span-6">
-
-<h4>Space considerations</h4>
-<p>Pickers can be used inline on a form, but their relatively large footprint is best suited for
-display in a dialog. For inline display, consider using more compact controls such as text fields or
-spinners.</p>
-
-  </div>
-</div>
-
-<h2 id="date-time">Date and time pickers</h2>
-
-<p>Android provides these as ready-to-use dialogs. Each picker is a dialog with a set of controls for
-entering the parts of the date (month, day, year) or time (hour, minute, AM/PM). Using these in your
-app helps ensure that a user's specification of a data or time input is valid and formatted
-correctly. The format of a time and date picker adjusts automatically to the locale.</p>
-
-<img src="{@docRoot}design/media/picker_datetime.png">
-
diff --git a/docs/html/design/building-blocks/progress.jd b/docs/html/design/building-blocks/progress.jd
deleted file mode 100644
index 2de75dc..0000000
--- a/docs/html/design/building-blocks/progress.jd
+++ /dev/null
@@ -1,105 +0,0 @@
-page.title=Progress &amp; Activity
-page.tags=progressbar,download,network
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/progress-activity.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Progress and Activity<p>
-  </div>
-</a>
-
-<p>Progress bars and activity indicators signal to users that something is happening that will take a moment.</p>
-<h2 id="progress">Progress bars</h2>
-
-<p>Progress bars are for situations where the percentage completed can be determined. They give users a quick sense of how much longer an operation will take.</p>
-
-<img src="{@docRoot}design/media/progress_download.png">
-
-<p>A progress bar should always fill from 0% to 100% and never move backwards to a lower value. If multiple operations are happening in sequence, use the progress bar to represent the delay as a whole, so that when the bar reaches 100%, it doesn't return back to 0%.</p>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<img src="{@docRoot}design/media/progress_themes.png">
-<div class="figure-caption">
-  Progress bar in Holo Dark and Holo Light.
-</div>
-
-<h2 id="activity">Activity indicators</h2>
-
-<p>Activity indicators are for operations of an indeterminate length. They ask users to wait a moment while something finishes up, without getting into specifics about what's happening behind the scenes.</p>
-
-<p>Two styles are available: a bar and a circle. Each is offered in a variety of sizes, in both Holo Light and Holo Dark themes. Choose the appropriate style and size for the surrounding context. For example, the largest activity circle works well when displayed in a blank content area, but not in a smaller dialog box. Each operation should only be represented by one activity indicator.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-    <img src="{@docRoot}design/media/progress_activity.png">
-
-  </div>
-  <div class="layout-content-col span-7 with-callouts">
-
-    <ol>
-      <li class="value-1"><h4>Activity bar</h4>
-        <p>In this example, an activity bar (in Holo Dark) appears when a user first requests a download. There's an unknown period of time when the download has not yet started. As soon as the download starts, this activity bar transforms into a progress bar.</p>
-      </li>
-    </ol>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-    <img src="{@docRoot}design/media/progress_activity2.png">
-
-  </div>
-  <div class="layout-content-col span-7 with-callouts">
-
-    <ol>
-      <li class="value-2"><h4>Activity circle</h4>
-        <p>In this example, an activity circle (in Holo Light) is used in the Gmail application when a message is being loaded because it's not possible to determine how long it will take to download the email.</p>
-        <p>When displaying an activity circle, do not include text to communicate what the app is doing. The moving circle alone provides sufficient feedback about the delay, and does so in an understated way that minimizes the impact.</p>
-        <p>
-        <div style="margin-left:0;margin-top:1em;">
-          <img src="{@docRoot}design/media/progress_activity_do_dont.png">
-        </div>
-        </p>
-      </li>
-    </ol>
-
-  </div>
-</div>
-
-<h2 id="custom-indicators">Custom indicators</h2>
-<p>The standard progress bar and activity indicators work well for most situations and should be used whenever possible to provide a consistent experience across Android. However, some situations may call for something more custom.</p>
-
-<p>Here's an example:<br>
-In all of the Google Play apps (Music, Books, Movies, Magazines), we wanted the current download state of each item to be visible at all times at the top-level screen. These states are:
-  <ul>
-    <li>Not downloaded</li>
-    <li>Temporarily downloaded (automatically cached by the app)</li>
-    <li>Permanently downloaded on the device at the user's request</li>
-  </ul>
-</p>
-<p>We also needed to indicate progress from one download state to another, because downloading is not instantaneous.</p>
-<p>This presented a challenge, because the Google Play apps use a variety of different layouts, and some of them are highly space-constrained. We didn't want this information to clutter the top-level screens, or compete too much with the cover art.</p>
-<p>So we designed a custom indicator that could show all of the information in a tiny footprint, with the flexibility to appear on top of content if necessary.</p>
-
-<img src="{@docRoot}design/media/progress_activity_custom.png">
-
-<p>The color indicates whether it's downloaded (blue) or not (gray). The appearance of the pin indicates whether the download is permanent (white, upright) or temporary (gray, diagonal). And when state is in the process of changing, progress is indicated by a moving pie chart.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-9">
-    <img src="{@docRoot}design/media/progress_activity_custom_app.png">
-  </div>
-  <div class="layout-content-col span-4">
-    <div class="figure-caption">
-      Across Google Play apps with different layouts, the same custom indicator appears with each item. It communicates download state as well as progress, in a compact package that can be incorporated into any screen design.
-    </div>
-  </div>
-</div>
-
-<p>If you find that the standard indicators aren't meeting your needs (due to space constraints, state complexities), by all means design your own. Make it feel like part of the Android family by injecting some of the visual characteristics of the standard indicators. In this example, we carried over the circular shape, the same shade of blue, and the flat and simple style.</p>
diff --git a/docs/html/design/building-blocks/scrolling.jd b/docs/html/design/building-blocks/scrolling.jd
deleted file mode 100644
index 04b1e4a..0000000
--- a/docs/html/design/building-blocks/scrolling.jd
+++ /dev/null
@@ -1,39 +0,0 @@
-page.title=Scrolling
-page.tags=scrollview,listview
-@jd:body
-
-
-<p>Scrolling allows the user to navigate to content in the overflow using a swipe gesture. The
-scrolling speed is proportional to the speed of the gesture.</p>
-<h2 id="indicator">Scroll Indicator</h2>
-
-<p>Appears during scrolling to indicate what portion of the content is currently in view.</p>
-
-<div class="framed-nexus5-land-span-13">
-  <video class="play-on-hover" autoplay>
-    <source src="{@docRoot}design/media/scroll_indicator.mp4" type="video/mp4">
-    <source src="{@docRoot}design/media/scroll_indicator.webm" type="video/webm">
-    <source src="{@docRoot}design/media/scroll_indicator.ogv" type="video/ogg">
-  </video>
-</div>
-<div class="figure-caption">
-  <div class="video-instructions">&nbsp;</div>
-</div>
-
-<h2 id="index-scrolling">Index Scrolling</h2>
-
-<p>In addition to traditional scrolling, a long alphabetical list can also offer index scrolling: a way
-to quickly navigate to the items that begin with a particular letter. With index scrolling, a scroll
-indicator appears even when the user isn't scrolling. Touching or dragging it causes the current
-letter to pop up in a prominent way.</p>
-
-<div class="framed-nexus5-land-span-13">
-  <video class="play-on-hover" autoplay>
-    <source src="{@docRoot}design/media/scroll_index.mp4" type="video/mp4">
-    <source src="{@docRoot}design/media/scroll_index.webm" type="video/webm">
-    <source src="{@docRoot}design/media/scroll_index.ogv" type="video/ogg">
-  </video>
-</div>
-<div class="figure-caption">
-  <div class="video-instructions">&nbsp;</div>
-</div>
diff --git a/docs/html/design/building-blocks/seek-bars.jd b/docs/html/design/building-blocks/seek-bars.jd
deleted file mode 100644
index 5c42102..0000000
--- a/docs/html/design/building-blocks/seek-bars.jd
+++ /dev/null
@@ -1,45 +0,0 @@
-page.title=Seek Bars and Sliders
-page.tags=seekbar,progressbar
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/sliders.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Sliders<p>
-  </div>
-</a>
-
-<p>Interactive sliders make it possible to select a value from a continuous or discrete range of values
-by moving the slider thumb. The smallest value is to the left, the largest to the right. The
-interactive nature of the slider makes it a great choice for settings that reflect intensity levels,
-such as volume, brightness, or color saturation.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-9">
-
-    <img src="{@docRoot}design/media/seekbar_example.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-<div class="vspace size-2">&nbsp;</div>
-
-<h4>Example</h4>
-<p>Interactive slider to set the ringer volume. The value can either be set through the hardware volume controls or interactively via a gesture.</p>
-
-  </div>
-</div>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-9">
-
-    <img src="{@docRoot}design/media/seekbar_style.png">
-    <div class="figure-caption">
-      Seek bars in Holo Light &amp; Dark
-    </div>
-
-  </div>
-  <div class="layout-content-col span-4">&nbsp;</div>
-</div>
diff --git a/docs/html/design/building-blocks/spinners.jd b/docs/html/design/building-blocks/spinners.jd
deleted file mode 100644
index 3a74ccf..0000000
--- a/docs/html/design/building-blocks/spinners.jd
+++ /dev/null
@@ -1,54 +0,0 @@
-page.title=Spinners
-page.tags=spinner,dropdown
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/menus.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Menus<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/spinner.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Spinners</p>
-  </div>
-</a>
-
-<p itemprop="description">Spinners provide a quick way to select one value from a set. In the default state, a spinner shows
-its currently selected value. Touching the spinner displays a dropdown menu with all other available
-values, from which the user can select a new one.</p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-    <img src="{@docRoot}design/media/spinners_form.png">
-
-<h4>Spinners in forms</h4>
-<p>Spinners are useful for data picking in forms. They are compact and integrate nicely with other
-components. Use spinners in forms for both simple data input and in combination with other input
-fields. For example, a text field might let you edit an email address for a contact, while its
-associated spinner allows you to select whether it's a Home or Work address.</p>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/spinners_actionbar.png">
-
-<h4>Spinners in action bars</h4>
-<p>Use spinners in action bars to switch views. For example, Gmail uses a spinner to permit switching
-between accounts or commonly used labels. Spinners are useful when changing the view is important to
-your app, but not necessarily a frequent occurrence. In cases where view switching is frequent, use
-tabs.</p>
-
-  </div>
-</div>
-
-<img src="{@docRoot}design/media/spinners_hololightanddark.png">
-<div class="figure-caption">
-  Spinners in the Holo Dark and Holo Light themes, in various states.
-</div>
-
diff --git a/docs/html/design/building-blocks/switches.jd b/docs/html/design/building-blocks/switches.jd
deleted file mode 100644
index 9dd09ca..0000000
--- a/docs/html/design/building-blocks/switches.jd
+++ /dev/null
@@ -1,64 +0,0 @@
-page.title=Switches
-page.tags=switch,checkbox,radiobutton,button
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/selection-controls.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Selection Controls<p>
-  </div>
-</a>
-
-<p>Switches allow the user to select options. There are three kinds of switches: checkboxes, radio
-buttons, and on/off switches.</p>
-
-
-
-<h2 id="checkboxes">Checkboxes</h2>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/checkbox.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Checkboxes</p>
-  </div>
-</a>
-
-<p itemprop="description">Checkboxes allow the user to select multiple options from a set. Avoid using a single checkbox to
-turn an option off or on. Instead, use an on/off switch.</p>
-
-  <img src="{@docRoot}design/media/switches_checkboxes.png">
-
-
-
-<h2 id="radio-buttons">Radio Buttons</h2>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/radiobutton.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Radio Buttons</p>
-  </div>
-</a>
-
-<p>Radio buttons allow the user to select one option from a set. Use radio buttons for exclusive
-selection if you think that the user needs to see all available options side-by-side. Otherwise,
-consider a spinner, which uses less space.</p>
-
-  <img src="{@docRoot}design/media/switches_radios.png">
-
-
-
-<h2 id="switches">On/off Switches</h2>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/togglebutton.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Toggle Buttons</p>
-  </div>
-</a>
-
-<p>On/off switches toggle the state of a single settings option.</p>
-
-  <img src="{@docRoot}design/media/switches_switches.png">
-
-
diff --git a/docs/html/design/building-blocks/tabs.jd b/docs/html/design/building-blocks/tabs.jd
deleted file mode 100644
index 078de92..0000000
--- a/docs/html/design/building-blocks/tabs.jd
+++ /dev/null
@@ -1,65 +0,0 @@
-page.title=Tabs
-page.tags=tabs,actionbar,navigation,viewpager
-@jd:body
-
-<img src="{@docRoot}design/media/tabs_overview.png">
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/tabs.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Tabs<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}training/implementing-navigation/lateral.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Creating Swipe Views<br>with Tabs</p>
-  </div>
-</a>
-
-<p itemprop="description">Tabs in the action bar make it easy to explore and switch between different views or functional
-aspects of your app, or to browse categorized data sets.</p>
-
-<p>For details on using gestures to move between tabs, see the <a href="{@docRoot}design/patterns/swipe-views.html">Swipe Views</a> pattern.</p>
-
-<h2 id="scrollable">Scrollable Tabs</h2>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-<p>Scrolling tab controls can contain a larger number of items than a standard tab control. To navigate
-to the next/previous view, swipe left or right.</p>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <video width="400" class="with-shadow play-on-hover" autoplay>
-      <source src="{@docRoot}design/media/tabs_scrolly.mp4" type="video/mp4">
-      <source src="{@docRoot}design/media/tabs_scrolly.webm" type="video/webm">
-      <source src="{@docRoot}design/media/tabs_scrolly.ogv" type="video/ogg">
-    </video>
-    <div class="figure-caption">
-      Scrolling tabs in the Play Store app.
-      <div class="video-instructions-image">&nbsp;</div>
-    </div>
-
-  </div>
-</div>
-
-
-<h2 id="fixed">Fixed Tabs</h2>
-<p>Fixed tabs display all items concurrently. To navigate to a different view, touch the tab, or swipe left or right.</p>
-<p>Fixed tabs are displayed with equal width, based on the width of the widest tab label. If there is insufficient room to display all tabs, the tab labels themselves will be scrollable. For this reason, fixed tabs are best suited for displaying 3 or fewer tabs.</p>
-
-<img src="{@docRoot}design/media/tabs_standard.png">
-<div class="figure-caption">
-  Tabs in Holo Dark &amp; Light.
-</div>
-
-<img src="{@docRoot}design/media/tabs_youtube.png">
-<div class="figure-caption">
-  Tabs in the Google Play Movies app.
-</div>
diff --git a/docs/html/design/building-blocks/text-fields.jd b/docs/html/design/building-blocks/text-fields.jd
deleted file mode 100644
index 19c22f9..0000000
--- a/docs/html/design/building-blocks/text-fields.jd
+++ /dev/null
@@ -1,88 +0,0 @@
-page.title=Text Fields
-page.tags=text,edittext,input
-@jd:body
-
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/components/text-fields.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Text Fields<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/text.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Text Fields</p>
-  </div>
-</a>
-
-<p itemprop="description">Text fields allow the user to type text into your app. They can be either single line or multi-line.
-Touching a text field places the cursor and automatically displays the keyboard. In addition to
-typing, text fields allow for a variety of other activities, such as text selection (cut, copy,
-paste) and data lookup via auto-completion.</p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-12">
-
-    <img src="{@docRoot}design/media/text_input_singlevsmultiline.png">
-
-  </div>
-</div>
-
-<h4>Single line and multi line</h4>
-<p>Single-line fields automatically scroll their content to the left as the text input cursor reaches
-the right edge of the input field. Multi-line text fields automatically break to a new line for
-overflow text and scroll vertically when the cursor reaches the lower edge.</p>
-
-<img src="{@docRoot}design/media/text_input_typesandtypedown.png">
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-<h4>Text field types</h4>
-<p>Text fields can have different types, such as number, message, or email address. The type determines
-what kind of characters are allowed inside the field, and may prompt the virtual keyboard to
-optimize its layout for frequently used characters.</p>
-
-  </div>
-  <div class="layout-content-col span-6">
-
-<h4>Auto-complete text fields</h4>
-<p>Use auto-complete text fields to present real-time completions or search results in popups, so users
-can enter information more accurately and efficiently.</p>
-
-  </div>
-</div>
-
-<h2 id="text-selection">Text Selection</h2>
-
-<p>Users can select any word in a text field with a long press. This action triggers a text selection
-mode that facilitates extending the selection or choosing an action to perform on the selected text.
-Selection mode includes:</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-9">
-
-    <img src="{@docRoot}design/media/text_input_textselection.png">
-
-  </div>
-  <div class="layout-content-col span-4 with-callouts">
-
-<ol>
-<li>
-<h4>Contextual action bar</h4>
-<p>A contextual action bar (CAB) displays the actions available to perform on the selection:
- typically cut, copy, and paste, but apps can insert additional commands as needed.</p>
-</li>
-<li>
-<h4>Selection handles</h4>
-<p>Selection handles can be dragged to select more or less text while remaining in selection mode.</p>
-</li>
-</ol>
-
-  </div>
-</div>
-
diff --git a/docs/html/design/design_toc.cs b/docs/html/design/design_toc.cs
index 63f5cad..85569ef 100644
--- a/docs/html/design/design_toc.cs
+++ b/docs/html/design/design_toc.cs
@@ -1,15 +1,15 @@
 <ul id="nav">
 
   <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot ?>design/index.html">Get Started</a></div>
+    <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/creative-vision.html">Creative Vision</a></li>
       <li><a href="<?cs var:toroot ?>design/get-started/principles.html">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 Design</a></div>
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>design/material/index.html">Material for Android</a></div>
   </li>
 
   <li class="nav-section">
@@ -43,59 +43,20 @@
   </li>
 
   <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot ?>design/style/index.html">Style</a></div>
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>design/style/index.html">Pure Android</a></div>
     <ul>
       <li><a href="<?cs var:toroot ?>design/style/devices-displays.html">Devices and Displays</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/themes.html">Themes</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/touch-feedback.html">Touch Feedback</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/metrics-grids.html">Metrics and Grids</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/typography.html">Typography</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/color.html">Color</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/iconography.html">Iconography</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/branding.html">Your Branding</a></li>
-      <li><a href="<?cs var:toroot ?>design/style/writing.html" zh-cn-lang="写作风格">Writing Style</a></li>
-    </ul>
-  </li>
-
-  <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot ?>design/patterns/index.html">Patterns</a></div>
-    <ul>
-      <li><a href="<?cs var:toroot ?>design/patterns/new.html">New in Android</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/gestures.html">Gestures</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/actionbar.html">Action Bar</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/navigation-drawer.html">Navigation Drawer</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/multi-pane-layouts.html">Multi-pane Layouts</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/selection.html">Selection</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/notifications.html">Notifications</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/widgets.html">Widgets</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/settings.html">Settings</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/help.html">Help</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/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>
-      <li><a href="<?cs var:toroot ?>design/patterns/pure-android.html">Pure Android</a></li>
-    </ul>
-  </li>
-
-  <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot ?>design/building-blocks/index.html">Building Blocks</a></div>
-    <ul>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/tabs.html">Tabs</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/lists.html">Lists</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/grid-lists.html">Grid Lists</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/scrolling.html">Scrolling</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/spinners.html">Spinners</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/buttons.html">Buttons</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/text-fields.html">Text Fields</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/seek-bars.html">Seek Bars</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/progress.html">Progress &amp; Activity</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/switches.html">Switches</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/dialogs.html">Dialogs</a></li>
-      <li><a href="<?cs var:toroot ?>design/building-blocks/pickers.html">Pickers</a></li>
+      <li><a href="<?cs var:toroot ?>design/patterns/help.html">Help</a></li>
     </ul>
   </li>
 
@@ -103,8 +64,8 @@
     <div class="nav-section-header empty"><a href="<?cs var:toroot ?>design/downloads/index.html">Downloads</a></div>
   </li>
 
-  <li class="nav-section">
+<!-- <li class="nav-section">
     <div class="nav-section-header empty"><a href="<?cs var:toroot ?>design/videos/index.html">Videos</a></div>
-  </li>
+  </li> -->
 
 </ul>
diff --git a/docs/html/design/devices.jd b/docs/html/design/devices.jd
index c67e585..3d23d07 100644
--- a/docs/html/design/devices.jd
+++ b/docs/html/design/devices.jd
@@ -1,8 +1,9 @@
-page.title=Devices
+page.title=Android devices
 page.viewport_width=970
 section.landing=true
 header.hide=1
 footer.hide=1
+page.image=images/cards/android-devices_2x.jpg
 @jd:body
 
 <style>
diff --git a/docs/html/design/downloads/index.jd b/docs/html/design/downloads/index.jd
index 4111bca..089a4af 100644
--- a/docs/html/design/downloads/index.jd
+++ b/docs/html/design/downloads/index.jd
@@ -3,121 +3,30 @@
 @jd:body
 
 
-<p>You may use these materials without restriction to facilitate your app design
-and implementation.</p>
+<p>For icons, sticker sheets, and other downloadable resources, visit the
+<a href="http://www.google.com/design">Design site</a> or use the links below. </p>
 
-
-<h2 id="stencils">Phone &amp; Tablet Stencils</h2>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
-
-
-<p>Drag and drop your way to beautifully designed Android apps. The stencils feature the
-rich typography, colors, interactive controls, and icons found throughout Android, along with
-phone and tablet outlines to frame your creations. Source files for icons and controls are also
-available.</p>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/downloads_stencils.png">
-
-  </div>
-
-  <div class="layout-content-col span-4">
-    <a class="notice-designers-material"
-      style="width:218px;"
-      href="http://www.google.com/design/spec/resources/layout-templates.html">
-      <div>
-        <h3>Material Design</h3>
-        <p>Layout Templates<p>
-      </div>
-    </a>
-  </div>
-
-  <div class="layout-content-col span-4">
-    <a class="notice-designers-material"
-      style="width:218px;"
-      href="http://www.google.com/design/spec/resources/sticker-sheets-icons.html">
-      <div>
-        <h3>Material Design</h3>
-        <p>Sticker Sheets<p>
-      </div>
-    </a>
-  </div>
-
-  <div class="layout-content-col span-4">
-<p>
-  <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Photoshop Sources');"
-    href="{@docRoot}downloads/design/Android_Design_Stencils_Sources_20131106.zip">Adobe&reg; Photoshop&reg; Stencils and Sources</a>
-</p>
-
-  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:design/landing/resources"
+       data-cardSizes="6x2"
+       data-maxResults="6"></div>
 </div>
 
 
-
-
-
-
-<h2 id="action-bar-icon-pack">Action Bar Icon Pack</h2>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
-
-<p>Action bar icons are graphic buttons that represent the most important actions people can take
-within your app. <a href="{@docRoot}design/style/iconography.html">More on Action Bar Iconography</a></p>
-<p>The download package includes icons that are scaled for various screen densities and suitable for
-use with the Holo Light and Holo Dark themes. The package also includes unstyled icons that you can
-modify to match your theme, plus source files.</p>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_actionbar_style.png">
-
-  </div>
-
-  <div class="layout-content-col span-4">
-    <a class="notice-designers-material"
-      style="width:218px;"
-      href="http://www.google.com/design/spec/resources/sticker-sheets-icons.html">
-      <div>
-        <h3>Material Design</h3>
-        <p>Sticker Sheets<p>
-      </div>
-    </a>
-  </div>
-
-  <div class="layout-content-col span-4">
-
-<p>
-  <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Action Bar Icons');"
-    href="{@docRoot}downloads/design/Android_Design_Icons_20131106.zip">Action Bar Icon Pack</a>
-</p>
-
-  </div>
-</div>
-
-
-
-
-
 <h2 id="Wear">Android Wear Materials</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
   <h4>UI toolkit</h4>
 <p>The toolkit contains detailed specs and measurements of all of the primary Android Wear UI components. Available in PDF and Illustrator formats.</p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/downloads_wear_toolkit.png" width="220">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear Toolkit AI');"
     href="{@docRoot}downloads/design/Android_Wear_Toolkit_20140722.ai">Adobe&reg; Illustrator&reg; Toolkit</a>
 
@@ -127,18 +36,18 @@
 </div>
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
   <h4>Sample user flow patterns</h4>
 <p>Examples of how to chain together simple Android Wear UI components into common user flow patterns, from simple notifications to complex interactions involving full screen activities.
 </p>
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/downloads_wear_flows.png" width="220">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear App Patterns AI');"
     href="{@docRoot}downloads/design/Android_Wear_Patterns_20140722.ai">Adobe&reg; Illustrator&reg; App Patterns</a>
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear App Patterns PDF');"
@@ -147,182 +56,100 @@
 </div>
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
   <h4>Sample app design mocks</h4>
 <p>Stream cards and UI elements for some example apps in fully editable PSD format.
 </p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/downloads_wear_psds.png" width="220">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear Sample PSD Mocks');"
     href="{@docRoot}downloads/design/Android_Wear_Sample_Assets.zip">Adobe&reg; Photoshop&reg; mocks</a>
   </div>
 </div>
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
   <h4>Watch faces UI toolkit</h4>
 <p>Detailed specifications and measurements for the the background canvas, notification cards, and
 system indicators.
 </p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/downloads_wear_DesignSpec_Icon.png" width="220">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear Watch Face Specifications');"
     href="{@docRoot}downloads/design/AndroidWear_DesignSpec_11.13.pdf">PDF Toolkit</a>
   </div>
 </div>
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
   <h4>Slide watch face</h4>
 <p>Example of a watch face design in AI format.
 </p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/downloads_wear_Slide_Ai_Icon.png" width="150"
          style="width:150px;margin:0 auto;display:block">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear Watch Face Example');"
     href="{@docRoot}downloads/design/Slide.ai">Adobe&reg; Illustrator&reg; Design</a>
   </div>
 </div>
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
   <h4>Slide watch face specifications</h4>
 <p>Design specifications for the Slide watch face in PSD format.
 </p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/downloads_wear_Slide_Psd_Icon.png" width="150"
          style="width:150px;margin:0 auto;display:block">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear Watch Face Example Specifications');"
     href="{@docRoot}downloads/design/Slide.psd">Adobe&reg; Photoshop&reg; Specifications</a>
   </div>
 </div>
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
   <h4>Watch face icon example</h4>
 <p>Template for creating watch face icons for the carousel on Android Wear devices.
 </p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/downloads_wear_Slide_IconExample.png" width="150"
          style="width:150px;margin:0 auto;display:block">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
   <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Wear Watch Face Example Specifications');"
     href="{@docRoot}downloads/design/Slide_IconExample.psd">Adobe&reg; Photoshop&reg; Icon</a>
   </div>
-</div>
-
-
-
-
-<h2 id="style">Style</h2>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
-
-<h4 id="roboto">Roboto</h4>
-<p>Ice Cream Sandwich introduced a new type family named Roboto, created specifically for the
-requirements of UI and high-resolution screens.</p>
-<p>For Android Wear, Roboto Condensed is the system font and the Regular and Light variants should be used by all Wear apps.</p>
-<p><a href="{@docRoot}design/style/typography.html">More on Roboto</a></p>
-<p><a href="http://www.google.com/fonts/specimen/Roboto" class="external-link">Roboto on Google Fonts</a></p>
-<p><a href="http://www.google.com/fonts/specimen/Roboto+Condensed" class="external-link">Roboto Condensed on Google Fonts</a></p>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/downloads_roboto_specimen_preview.png">
-
-  </div>
-
-  <div class="layout-content-col span-4">
-    <a class="notice-designers-material"
-      style="width:218px;"
-      href="http://www.google.com/design/spec/resources/roboto-noto-fonts.html">
-      <div>
-        <h3>Material Design</h3>
-        <p>Roboto Font<p>
-      </div>
-    </a>
-  </div>
-
-  <div class="layout-content-col span-4">
-
-<p>
-  <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Roboto ZIP');"
-    href="{@docRoot}downloads/design/roboto-1.2.zip">Roboto</a>
-  <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Roboto Specemin Book');"
-    href="{@docRoot}downloads/design/Roboto_Specimen_Book_20131031.pdf">Specimen Book</a>
-</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
-
-<h4>Color</h4>
-<p>In Android's color palette, each color has a corresponding darker
-shade that can be used as a complement when needed.</p>
-<p><a href="{@docRoot}design/style/color.html">More on Color</a></p>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/downloads_color_swatches.png">
-
-  </div>
-
-  <div class="layout-content-col span-4">
-    <a class="notice-designers-material"
-      style="width:218px;"
-      href="http://www.google.com/design/spec/resources/color-palettes.html">
-      <div>
-        <h3>Material Design</h3>
-        <p>Color Palettes<p>
-      </div>
-    </a>
-  </div>
-
-  <div class="layout-content-col span-4">
-
-<p>
-  <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Color Swatches');"
-    href="{@docRoot}downloads/design/Android_Design_Color_Swatches_20120229.zip">Color Swatches</a>
-</p>
-
-  </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/docs/html/design/get-started/creative-vision.jd b/docs/html/design/get-started/creative-vision.jd
index 9261c6e..974d5d0 100644
--- a/docs/html/design/get-started/creative-vision.jd
+++ b/docs/html/design/get-started/creative-vision.jd
@@ -1,4 +1,5 @@
 page.title=Creative Vision
+page.image=images/cards/design-creative-vision_2x.jpg
 @jd:body
 
 <img src="{@docRoot}design/media/creative_vision_main.png">
@@ -6,16 +7,15 @@
 <div class="vspace size-1">&nbsp;</div>
 
 <p itemprop="description">
-  Starting with Ice Cream Sandwich, we focused the design of
-  Android around these three overarching goals, which apply
-  to our core apps as well as the system at large.
-  As you work with Android, consider these goals.
+  Android design is shaped by three overarching goals for users that apply
+  to apps as well as the system at large. As you work with Android,
+  keep these goals in mind.
 </p>
 
 <div class="vspace size-1">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
 
 <h4>Enchant me</h4>
 <p>Beauty is more than skin deep. Android apps are sleek and aesthetically pleasing on multiple levels.
@@ -24,7 +24,7 @@
 simplicity and purpose to create a magical experience that is effortless and powerful.</p>
 
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
 
 <h4>Simplify my life</h4>
 <p>Android apps make life easier and are easy to understand. When people use your app for the first
@@ -35,7 +35,7 @@
 irrelevant flash.</p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
 <h4>Make me amazing</h4>
 <p>It's not enough to make an app that is easy to use. Android apps empower people to try new things
diff --git a/docs/html/design/get-started/principles.jd b/docs/html/design/get-started/principles.jd
index 73ec3a6..172a4e4 100644
--- a/docs/html/design/get-started/principles.jd
+++ b/docs/html/design/get-started/principles.jd
@@ -14,8 +14,8 @@
 
 <h2 id="enchant-me">Enchant Me</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="delight-me">Delight me in surprising ways</h4>
 <p>A beautiful surface, a carefully-placed animation, or a well-timed sound effect is a joy to
@@ -23,7 +23,7 @@
 force is at hand.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_delight.png">
 
@@ -32,15 +32,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="real-objects-more-fun">Real objects are more fun than buttons and menus</h4>
 <p>Allow people to directly touch and manipulate objects in your app. It reduces the cognitive effort
 needed to perform a task while making it more emotionally satisfying.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_real_objects.png">
 
@@ -49,8 +49,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="make-it-mine">Let me make it mine</h4>
 <p>People love to add personal touches because it helps them feel at home and in control. Provide
@@ -58,7 +58,7 @@
 primary tasks.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_make_it_mine.png">
 
@@ -67,15 +67,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="get-to-know-me">Get to know me</h4>
 <p>Learn peoples' preferences over time. Rather than asking them to make the same choices over and
 over, place previous choices within easy reach.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_get_to_know_me.png">
 
@@ -84,14 +84,14 @@
 
 <h2 id="simplify-my-life">Simplify My Life</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="keep-it-brief">Keep it brief</h4>
 <p>Use short phrases with simple words. People are likely to skip sentences if they're long.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_keep_it_brief.png">
 
@@ -100,15 +100,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="pictures-faster-than-words">Pictures are faster than words</h4>
 <p>Consider using pictures to explain ideas. They get people's attention and can be much more efficient
 than words.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_pictures.png">
 
@@ -117,15 +117,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="decide-for-me">Decide for me but let me have the final say</h4>
 <p>Take your best guess and act rather than asking first. Too many choices and decisions make people
 unhappy. Just in case you get it wrong, allow for 'undo'.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_decide_for_me.png">
 
@@ -134,15 +134,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="only-show-when-i-need-it">Only show what I need when I need it</h4>
 <p>People get overwhelmed when they see too much at once. Break tasks and information into small,
 digestible chunks. Hide options that aren't essential at the moment, and teach people as they go.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_information_when_need_it.png">
 
@@ -151,15 +151,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="always-know-where-i-am">I should always know where I am</h4>
 <p>Give people confidence that they know their way around. Make places in your app look distinct and
 use transitions to show relationships among screens. Provide feedback on tasks in progress.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_navigation.png">
 
@@ -168,8 +168,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="never-lose-my-stuff">Never lose my stuff</h4>
 <p>Save what people took time to create and let them access it from anywhere. Remember settings,
@@ -177,7 +177,7 @@
 easiest thing in the world.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
 
@@ -186,15 +186,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="looks-same-should-act-same">If it looks the same, it should act the same</h4>
 <p>Help people discern functional differences by making them visually distinct rather than subtle.
 Avoid modes, which are places that look similar but act differently on the same input.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_looks_same.png">
 
@@ -203,15 +203,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="interrupt-only-if-important">Only interrupt me if it's important</h4>
 <p>Like a good personal assistant, shield people from unimportant minutiae. People want to stay
 focused, and unless it's critical and time-sensitive, an interruption can be taxing and frustrating.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_important_interruption.png">
 
@@ -220,8 +220,8 @@
 
 <h2 id="make-me-amazing">Make Me Amazing</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="give-me-tricks">Give me tricks that work everywhere</h4>
 <p>People feel great when they figure things out for themselves. Make your app easier to learn by
@@ -229,7 +229,7 @@
 may be a good navigational shortcut.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_tricks.png">
 
@@ -238,8 +238,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="its-not-my-fault">It's not my fault</h4>
 <p>Be gentle in how you prompt people to make corrections. They want to feel smart when they use your
@@ -247,7 +247,7 @@
 If you can fix it behind the scenes, even better.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_error.png">
 
@@ -256,15 +256,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="sprinkle-encouragement">Sprinkle encouragement</h4>
 <p>Break complex tasks into smaller steps that can be easily accomplished. Give feedback on actions,
 even if it's just a subtle glow.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
 
@@ -273,8 +273,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="do-heavy-lifting-for-me">Do the heavy lifting for me</h4>
 <p>Make novices feel like experts by enabling them to do things they never thought they could. For
@@ -282,7 +282,7 @@
 only a few steps.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_heavy_lifting.png">
 
@@ -291,15 +291,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4 id="make-important-things-fast">Make important things fast</h4>
 <p>Not all actions are equal. Decide what's most important in your app and make it easy to find and
 fast to use, like the shutter button in a camera, or the pause button in a music player.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/principles_make_important_fast.png">
 
diff --git a/docs/html/design/handhelds/index.jd b/docs/html/design/handhelds/index.jd
index 882b070..81c2c19 100644
--- a/docs/html/design/handhelds/index.jd
+++ b/docs/html/design/handhelds/index.jd
@@ -20,8 +20,8 @@
 
 <div class="vspace size-1">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/ui_overview_home_screen.png">
 
@@ -34,7 +34,7 @@
 the Favorites Tray.</p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/ui_overview_all_apps.png">
 
@@ -45,7 +45,7 @@
 any Home screen.</p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/ui_overview_recents.png">
 
@@ -94,13 +94,13 @@
 interrupting the user. Open the notifications drawer by swiping down on the status bar. Touching a
 notification opens the associated app. <a href="{@docRoot}design/patterns/notifications.html">More on Notifications</a></p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
 
     <img src="{@docRoot}design/media/ui_overview_notifications.png">
 
   </div>
-  <div class="layout-content-col span-9">
+  <div class="col-9">
 
     <img src="{@docRoot}design/media/notifications_dismiss.png">
 
@@ -116,13 +116,13 @@
 <h2 id="app">Common App UI</h2>
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
     <img src="{@docRoot}design/media/app_structure_drawer.png">
 
   </div>
-  <div class="layout-content-col span-6 with-callouts">
+  <div class="col-6 with-callouts">
 
 <p>A typical Android app uses action bars, and many apps will include a navigation drawer.</p>
 <ol>
diff --git a/docs/html/design/index.jd b/docs/html/design/index.jd
index 47e8d26..638f35b 100644
--- a/docs/html/design/index.jd
+++ b/docs/html/design/index.jd
@@ -1,3 +1,4 @@
+fullpage=true
 page.title=Design
 page.viewport_width=970
 section.landing=true
@@ -6,43 +7,67 @@
 footer.hide=1
 @jd:body
 
-<style>
-#landing-graphic-container {
-  position: relative;
-}
-
-#text-overlay {
-  position: absolute;
-  left: 0;
-  top: 42px;
-  width: 266px;
-
-}
-#hero-image {
-  padding-left:68px;
-}
-</style>
-
-<div id="landing-graphic-container">
-  <div id="text-overlay">
-    <span itemprop="description">Welcome to <strong>Android Design</strong>, your place for
-    learning how to design exceptional Android apps.</span>
-    <br><br>
-    Want to know what <strong>Android 5.0</strong> has for designers? See <a href="{@docRoot}design/patterns/new.html">New in Android</a>.<br><br>
-    <a href="/design/get-started/creative-vision.html" class="landing-page-link">Creative Vision</a>
+<section class="dac-expand dac-hero dac-light">
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-1of2 col-push-1of2 dac-hero-figure">
+        <img class="dac-hero-image" src="/design/media/hero-material-design.png">
+      </div>
+      <div class="col-1of2 col-pull-1of2">
+        <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. 
+        </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>
+          Introducing material design
+        </a><br>
+        <a class="dac-hero-cta" href="https://www.google.com/design/spec/resources/color-palettes.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Downloads for designers
+        </a><br>
+        <a class="dac-hero-cta" href="https://google.com/design/articles/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Articles
+        </a>
+      </div>
+    </div>
+    <div class="dac-section dac-small">
+      <div class="resource-widget resource-flow-layout col-16"
+           data-query="collection:design/landing/materialdesign"
+           data-cardSizes="6x2"
+           data-maxResults="6"></div>
+    </div>
   </div>
-  <a id="hero-image" href="/design/get-started/creative-vision.html">
-    <img src="{@docRoot}design/media/index_landing_page.png" width="760" height="600" alt=""
-         srcset="{@docRoot}design/media/index_landing_page_2x.png 2x"/>
-  </a>
+</section>
 
-<div style="background: hsl(8, 70%, 54%); margin: 0; padding: 20px 20px 10px 20px;color: #fff; position: absolute;top: 255px;width: 179px;">
-<h2 style="color: #fff;margin:0 0 10px; font-size:18px" class="norule">Material Design</h2>
-<p>Android 5.0 introduces a design
-metaphor inspired by paper and ink that provides a reassuring sense of tactility.
-</p>
-<p><a class="white" href="{@docRoot}design/material/index.html">Learn more</a></p>
-</div>
+<section class="dac-section dac-gray dac-small dac-invert"><div class="wrap">
+  <h2 class="norule">Latest</h2>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:design/landing/latest"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-</div>
+<section class="dac-section dac-light"><div class="wrap">
+  <h1 class="dac-section-title">Pure Android</h1>
+  <div class="dac-section-subtitle">
+    Design around Android's capabilities and conventions to give users the best experience.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:design/landing/pureandroid"
+       data-cardSizes="6x6"
+       data-maxResults="6"></div>
+</div></section>
 
+<section class="dac-section dac-gray"><div class="wrap">
+  <h1 class="dac-section-title">Resources</h1>
+  <div class="dac-section-subtitle">
+    Essential downloads, stencils, and tools to help you create your design.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:design/landing/resources"
+       data-cardSizes="6x2"
+       data-maxResults="6"></div>
+</div></section>
diff --git a/docs/html/design/material/index.jd b/docs/html/design/material/index.jd
index 4d9a1a7..c5893a7 100644
--- a/docs/html/design/material/index.jd
+++ b/docs/html/design/material/index.jd
@@ -1,7 +1,7 @@
-page.title=Material Design
+page.title=Material Design for Android
 page.tags=Material,design
 page.type=design
-page.image=design/material/images/MaterialLight.png
+page.image=images/cards/design-material-for-android_2x.jpg
 
 @jd:body
 
diff --git a/docs/html/design/media/hero-material-design.png b/docs/html/design/media/hero-material-design.png
new file mode 100644
index 0000000..55c4420
--- /dev/null
+++ b/docs/html/design/media/hero-material-design.png
Binary files differ
diff --git a/docs/html/design/patterns/accessibility.jd b/docs/html/design/patterns/accessibility.jd
index b968237..b910294 100644
--- a/docs/html/design/patterns/accessibility.jd
+++ b/docs/html/design/patterns/accessibility.jd
@@ -48,11 +48,11 @@
 <h4>Label visual UI elements meaningfully</h4>
 <p>In your wireframes, <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#label-ui">label functional UI components</a> that have no visible text. Those components might be buttons, icons, tabs with icons, and icons with state (like stars). Developers can use the <code><a href="{@docRoot}guide/topics/ui/accessibility/apps.html#label-ui">contentDescription</a></code> attribute to set the label.</p>
 
-<div class ="layout-content-row">
-    <div class="layout-content-col span-8">
+<div class ="cols">
+    <div class="col-8">
       <img src="{@docRoot}design/media/accessibility_contentdesc.png">
     </div>
-    <div class="layout-content-col span-5 with-callouts">
+    <div class="col-5 with-callouts">
       <ol>
         <li class="value-1">group</li>
         <li class="value-2">all contacts</li>
@@ -95,4 +95,4 @@
   <li>Provide alternatives to affordances that time out</li>
   <li>Use standard framework controls or enable TalkBack for custom controls</li>
   <li>Try it out yourself</li>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/docs/html/design/patterns/actionbar.jd b/docs/html/design/patterns/actionbar.jd
index 5467722..ef02c53 100644
--- a/docs/html/design/patterns/actionbar.jd
+++ b/docs/html/design/patterns/actionbar.jd
@@ -34,8 +34,8 @@
 <p>The action bar is split into four different functional areas that apply to most apps.</p>
 <img src="{@docRoot}design/media/action_bar_basics.png">
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7 with-callouts">
+<div class="cols">
+  <div class="col-7 with-callouts">
 
     <ol>
       <li class="value-1"><h4>App icon</h4>
@@ -57,7 +57,7 @@
     </ol>
 
   </div>
-  <div class="layout-content-col span-6 with-callouts">
+  <div class="col-6 with-callouts">
 
     <ol>
       <li class="value-2"><h4>View control</h4>
@@ -107,8 +107,8 @@
 
 <h2 id="considerations-split-action-bars">Layout Considerations for Split Action Bars</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-8 with-callouts">
+<div class="cols">
+  <div class="col-8 with-callouts">
 
 <p>When splitting up content across multiple action bars, you generally have three possible locations
 for action bar content:</p>
@@ -124,7 +124,7 @@
 <p>To display actions and, if necessary, the action overflow, use the bottom bar.</p>
 
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
 
     <img src="{@docRoot}design/media/action_bar_pattern_considerations.png">
 
@@ -144,8 +144,8 @@
 
 <p>For guidance on prioritizing actions, use the FIT scheme.</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
 
 <p><strong>F &mdash; Frequent</strong></p>
 <ul>
@@ -155,7 +155,7 @@
 </ul>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
 <p><strong>I &mdash; Important</strong></p>
 <ul>
@@ -164,7 +164,7 @@
 </ul>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
 <p><strong>T &mdash; Typical</strong></p>
 <ul>
@@ -194,8 +194,8 @@
 
 </p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
 <h4>Action overflow</h4>
 <p>The action overflow in the action bar provides access to your app's less frequently used actions.
@@ -203,7 +203,7 @@
 display the action overflow when the user presses the key.</p>
 
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
 
     <img src="{@docRoot}design/media/action_bar_pattern_overflow.png">
     <div class="figure-caption">
@@ -285,4 +285,4 @@
 <p>Sometimes it is important to display contextual information for your app that's always visible.
 Examples are the number of unread messages in a messaging inbox view or the Now Playing information
 in a music player. Carefully plan which important information you would like to display and
-structure your action bars accordingly.</p>
\ No newline at end of file
+structure your action bars accordingly.</p>
diff --git a/docs/html/design/patterns/app-structure.jd b/docs/html/design/patterns/app-structure.jd
index 404dd4d..4f3106e 100644
--- a/docs/html/design/patterns/app-structure.jd
+++ b/docs/html/design/patterns/app-structure.jd
@@ -25,13 +25,13 @@
 <p>A typical Android app consists of top level and detail/edit views. If the navigation hierarchy is
 deep and complex, category views connect top level and detail views.</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-9">
+<div class="cols">
+  <div class="col-9">
 
     <img src="{@docRoot}design/media/app_structure_overview.png">
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
 <h4>Top level views</h4>
 <p>The top level of the app typically consists of the different views that your app supports. The views
@@ -57,8 +57,8 @@
 <p>Ask yourself: "What are my typical users most likely going to want to do in my app?", and structure
 your start screen experience accordingly.</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
 <h4>Put content forward</h4>
 <p>Many apps focus on the content display. Avoid navigation-only screens and instead let people get to
@@ -66,7 +66,7 @@
 layouts that are visually engaging and appropriate for the data type and screen size.</p>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/app_structure_market.png">
     <div class="figure-caption">
@@ -80,8 +80,8 @@
 
 <h4>Set up action bars for navigation and actions</h4>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
   <p>All screens in your app should display action bars to provide consistent navigation and surface
 important actions.</p>
@@ -96,7 +96,7 @@
     </ul>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/app_structure_gmail.png">
     <div class="figure-caption">
@@ -111,8 +111,8 @@
 <p>The top level communicates your app’s capabilities by introducing the user to the major functional areas. In many cases the top level will consist of multiple views, and you need to make sure that the user can navigate between them efficiently. Android supports a number of view controls for this task. Use the control that best matches your app's navigation needs:</p>
 
 <h4>Fixed tabs</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 <p><em>Fixed tabs</em> display top-level views concurrently and make it easy to explore and switch between them. They are always visible on the screen, and can't be moved out of the way like scrollable tabs. <em>Fixed tabs</em> should always allow the user to navigate between the views by swiping left or right on the content area.</p>
 <p><strong>Use tabs if</strong>:</p>
 <ul>
@@ -122,7 +122,7 @@
 </ul>
 
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
 
     <img src="{@docRoot}design/media/app_structure_default_tabs.png">
     <div class="figure-caption">
@@ -132,8 +132,8 @@
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
 <h4>Spinners</h4>
 <p>A <em>spinner</em> is a drop-down menu that allows users to switch between views of your app. </p>
@@ -144,7 +144,7 @@
 </ul>
 
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
 
     <img src="{@docRoot}design/media/app_structure_spinner.png">
     <div class="figure-caption">
@@ -155,8 +155,8 @@
 </div>
 
 <h4>Navigation drawers</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 <p>A <em>navigation drawer</em> is a slide-out menu that allows users to switch between views of your app. It can hold a large number of items and is accessible from anywhere in your app. Navigation drawers show your app's top-level views, but can also provide navigation to lower-level screens. This makes them particularly suitable for complex apps.</p>
 
 <p><strong>Use navigation drawers if</strong>:</p>
@@ -169,7 +169,7 @@
 </ul>
 
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
     <img src="{@docRoot}design/media/app_structure_drawer.png">
     <div class="figure-caption">
       Navigation drawer from the Keep app.
@@ -196,8 +196,8 @@
 
 <div class="vspace size-1">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
+<div class="cols">
+  <div class="col-8">
 
 <p>If the categories are familiar, predictable, or closely related, use scrolling tabs (where not all
 items are in view simultaneously). Keep the number of scrolling tabs at a manageable level to
@@ -210,7 +210,7 @@
     </div>
 
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
 
 <p>If the categories in the tabs are not closely related, favor fixed tabs, so that all categories are
 in view at the same time.</p>
@@ -257,14 +257,14 @@
 
 <p>The detail view allows you to view and act on your data. The layout of the detail view depends on the data type being displayed, and therefore differs widely among apps.</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
 
 <h4>Layout</h4>
 <p>Consider the activities people will perform in the detail view and arrange the layout accordingly.</p>
 
   </div>
-  <div class="layout-content-col span-9">
+  <div class="col-9">
 
     <img src="{@docRoot}design/media/app_structure_people_detail.png">
 
diff --git a/docs/html/design/patterns/buttons.jd b/docs/html/design/patterns/buttons.jd
index 2d65b2d..085acec 100644
--- a/docs/html/design/patterns/buttons.jd
+++ b/docs/html/design/patterns/buttons.jd
@@ -19,13 +19,13 @@
   back into view.
 </p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>Lean Back</h4>
     <p>Touch the screen anywhere to bring back system bars. </p>
     <img src="{@docRoot}design/media/fullscreen_leanback.png" style="width:311px;">
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <h4>Immersive</h4>
     <p>Swipe from the any edge of the screen with a hidden bar to bring back system bars. </p>
     <img src="{@docRoot}design/media/fullscreen_immersive_swipe_bottom.png" style="width:160px;float:right">
@@ -69,8 +69,8 @@
   interrupted by accidental touches and swipes.
 </p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <img src="{@docRoot}design/media/fullscreen_immersive_swipe_bottom.png" style="width:160px;float:right">
     <img src="{@docRoot}design/media/fullscreen_immersive_swipe_top.png" style="width:160px">
   </div>
diff --git a/docs/html/design/patterns/compatibility.jd b/docs/html/design/patterns/compatibility.jd
index dfc52c0..2905676 100644
--- a/docs/html/design/patterns/compatibility.jd
+++ b/docs/html/design/patterns/compatibility.jd
@@ -20,8 +20,8 @@
 
 <h2 id="older-hardware">Adapting Android 4.0 to Older Hardware and Apps</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
 <h4>Phones with virtual navigation controls</h4>
 <p>Android apps written for Android 3.0 and later display actions in the action bar. Actions that don't
@@ -30,15 +30,15 @@
 <p>Users access the action overflow by touching it in the action bar.</p>
 
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
 
     <img src="{@docRoot}design/media/compatibility_virtual_nav.png">
 
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
 <h4>Phones with physical navigation keys</h4>
 <p>Android phones with traditional navigation hardware keys don't display the virtual navigation bar at
@@ -46,15 +46,15 @@
 resulting actions popup has the same style as in the previous example, but is displayed at the bottom of the screen.</p>
 
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
 
     <img src="{@docRoot}design/media/compatibility_physical_buttons.png">
 
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
 <h4>Legacy apps on phones with virtual navigation controls</h4>
 <p>When you run an app that was built for Android 2.3 or earlier on a phone with virtual navigation
@@ -62,7 +62,7 @@
 can touch the control to display the app's actions in the traditional Android menu styling.</p>
 
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
 
     <img src="{@docRoot}design/media/compatibility_legacy_apps.png">
 
diff --git a/docs/html/design/patterns/confirming-acknowledging.jd b/docs/html/design/patterns/confirming-acknowledging.jd
index d39d32d..201e5a05 100644
--- a/docs/html/design/patterns/confirming-acknowledging.jd
+++ b/docs/html/design/patterns/confirming-acknowledging.jd
@@ -4,12 +4,12 @@
 
 <p>In some situations, when a user invokes an action in your app, it's a good idea to <em>confirm</em> or <em>acknowledge</em> that action through text.</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <img src="{@docRoot}design/media/confirm_ack_confirming.png">
     <p><strong>Confirming</strong> is asking the user to verify that they truly want to proceed with an action they just invoked. In some cases, the confirmation is presented along with a warning or critical information related to the action that they need to consider.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
     <p><strong>Acknowledging</strong> is displaying text to let the user know that the action they just invoked has been completed. This removes uncertainty about implicit operations that the system is taking. In some cases, the acknowledgment is presented along with an option to undo the action.</p>
   </div>
@@ -22,14 +22,14 @@
 <img src="{@docRoot}design/media/confirm_ack_flowchart.png">
 
 <h2>Confirming</h2>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>Example: Google Play Books</h4>
     <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
     <p>In this example, the user has requested to delete a book from their Google Play library. An <a href="{@docRoot}design/building-blocks/dialogs.html#alerts">alert</a> appears to confirm this action because it's important to understand that the book will no longer be available from any device.</p>
     <p>When crafting a confirmation dialog, make the title meaningful by echoing the requested action.</p>
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
     <h4>Example: Android Beam</h4>
     <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
     <p>Confirmations don't necessarily have to be presented in an alert with two buttons. After initiating Android Beam, the user is prompted to touch the content to be shared (in this example, it's a photo). If they decide not to proceed, they simply move their phone away.</p>
@@ -37,15 +37,15 @@
 </div>
 
 <h2>Acknowledging</h2>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>Example: Abandoned Gmail draft saved</h4>
     <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
     <p>In this example, if the user navigates back or up from the Gmail compose screen, something possibly unexpected happens: the current draft is automatically saved. An acknowledgment in the form of a toast makes that apparent. It fades after a few seconds.</p>
     <p>Undo isn't appropriate here because saving was initiated by the app, not the user. And it's quick and easy to resume composing the message by navigating to the list of drafts.</p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <h4>Example: Gmail conversation deleted</h4>
     <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
     <p>After the user deletes a conversation from the list in Gmail, an acknowledgment appears with an undo option. The acknowledgment remains until the user takes an unrelated action, such as scrolling the list.</p>
@@ -53,14 +53,14 @@
 </div>
 
 <h2>No Confirmation or Acknowledgment</h2>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>Example: +1'ing</h4>
     <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
     <p><strong>Confirmation is unnecessary</strong>. If the user +1'd by accident, it's not a big deal. They can just touch the button again to undo the action.</p>
     <p><strong>Acknowledgment is unnecessary</strong>. The user will see the +1 button bounce and turn red. That's a very clear signal.</p>
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
     <h4>Example: Removing an app from the Home Screen</h4>
     <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
     <p><strong>Confirmation is unnecessary</strong>. This is a deliberate action: the user must drag and drop an item onto a relatively large and isolated target. Therefore, accidents are highly unlikely. But if the user regrets the decision, it only takes a few seconds to bring it back again.</p>
diff --git a/docs/html/design/patterns/fullscreen.jd b/docs/html/design/patterns/fullscreen.jd
index 624d44c..1c95f21 100644
--- a/docs/html/design/patterns/fullscreen.jd
+++ b/docs/html/design/patterns/fullscreen.jd
@@ -19,13 +19,13 @@
   back into view.
 </p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>Lean Back</h4>
     <p>Touch the screen anywhere to bring back system bars. </p>
     <img src="{@docRoot}design/media/fullscreen_leanback.png" style="width:311px;">
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <h4>Immersive</h4>
     <p>Swipe from the any edge of the screen with a hidden bar to bring back system bars. </p>
     <img src="{@docRoot}design/media/fullscreen_immersive_swipe_bottom.png" style="width:160px;float:right">
@@ -69,8 +69,8 @@
   interrupted by accidental touches and swipes.
 </p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <img src="{@docRoot}design/media/fullscreen_immersive_swipe_bottom.png" style="width:160px;float:right">
     <img src="{@docRoot}design/media/fullscreen_immersive_swipe_top.png" style="width:160px">
   </div>
diff --git a/docs/html/design/patterns/gestures.jd b/docs/html/design/patterns/gestures.jd
deleted file mode 100644
index ada0735..0000000
--- a/docs/html/design/patterns/gestures.jd
+++ /dev/null
@@ -1,135 +0,0 @@
-page.title=Gestures
-page.tags=gesture,input,touch
-@jd:body
-
-<a class="notice-designers-material"
-   href="http://www.google.com/design/spec/patterns/gestures.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Gestures<p>
-  </div>
-</a>
-
-<p>Gestures allow users to interact with your app by manipulating the screen objects you provide. The
-following table shows the core gesture set that is supported in Android.</p>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_touch.png">
-    <h4>Touch</h4>
-    <p>Triggers the default functionality for a given item.</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>Press, lift</p></li>
-    </ul>
-  </div>
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_longtouch.png">
-    <h4>Long press</h4>
-    <p>Enters data selection mode. Allows you to select one or more items in a view and act upon
-    the data using a contextual action bar. Avoid using long press for showing contextual menus.</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>Press, wait, lift</p></li>
-    </ul>
-  </div>
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_swipe.png">
-    <h4>Swipe or drag</h4>
-    <p>Scrolls overflowing content, or navigates between views in the same hierarchy. Swipes are
-    quick and affect the screen even after the finger is picked up. Drags are slower and more precise,
-    and the screen stops responding when the finger is picked up.</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>Press, move, lift</p></li>
-    </ul>
-  </div>
-
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_drag.png">
-    <h4>Long press drag</h4>
-    <p>Rearranges data within a view, or moves data into a container (e.g. folders on Home Screen).</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>Long press, move, lift</p></li>
-    </ul>
-  </div>
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_doubletouch.png">
-    <h4>Double touch </h4>
-    <p> Scales up a standard amount around the target with each repeated gesture until reaching
-    maximum scale. For nested views, scales up the smallest targetable view, or returns it to
-    its original scale. Also used as a secondary gesture for text selection.</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>Two touches in quick succession</p>
-      </li>
-    </ul>
-  </div>
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_doubletouchdrag.png">
-    <h4>Double touch drag</h4>
-    <p>Scales content by pushing away or pulling closer, centered around gesture.</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>A single touch followed in quick succession by a drag up or down:</p>
-        <ul style="padding-left:1.5em;list-style-type:disc;">
-          <li>Dragging up decreases content scale</li>
-          <li>Dragging down increases content scale</li>
-          <li>Reversing drag direction reverses scaling.</li>
-        </ul>
-      </li>
-    </ul>
-  </div>
-
-</div>
-
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_pinchopen.png" style="margin-left:-4px">
-    <h4>Pinch open</h4>
-    <p>Zooms into content.</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>2-finger press, move outwards, lift</p></li>
-    </ul>
-  </div>
-
-  <div class="layout-content-col span-4">
-    <img src="{@docRoot}design/media/gesture_pinchclose.png">
-    <h4>Pinch close</h4>
-    <p>Zooms out of content.</p>
-    <ul>
-      <li class="no-bullet with-icon action">
-        <h4>Action</h4>
-        <p>2-finger press, move inwards, lift</p>
-      </li>
-    </ul>
-  </div>
-
-</div>
-
diff --git a/docs/html/design/patterns/help.jd b/docs/html/design/patterns/help.jd
index 97949e2..6ef155a 100644
--- a/docs/html/design/patterns/help.jd
+++ b/docs/html/design/patterns/help.jd
@@ -21,8 +21,8 @@
 <em>To teach high value functionality that's only available through a gesture.</em></p>
 
 <p>For example, we use help content to teach users how to place apps on their Home screen. This functionality is:</p>
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
+<div class="cols">
+  <div class="col-8">
     <ul>
       <li><strong>High value</strong>
       <p style="margin-top:0;">Without it, users wouldn't be able to customize the most frequently visited Android screen to meet their needs.</p></li>
@@ -31,7 +31,7 @@
     </ul>
     <p>However, not all high value gesture-only functionality needs a tutorial. For example, don't teach users how to scroll content. They already know how because it's a fundamental, system-wide interaction.</p>
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
     <img src="{@docRoot}design/media/help_cling.png">
     <div class="figure-caption">
       The first time each user visits the All Apps screen, a semi-transparent overlay appears to teach an important gesture.
@@ -44,11 +44,11 @@
 
 <p>On every screen in your app, offer help in the <a href="{@docRoot}design/patterns/actionbar.html">action overflow</a>. Always make it the very last item in the menu and label it "Help".</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
     <img src="{@docRoot}design/media/help_overflow.png">
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/help_solo_overflow.png">
     <div class="figure-caption">
       Even if your screen has no other action overflow items, "Help" should appear there and not be promoted to the action bar.
@@ -67,28 +67,28 @@
 
 <p>When someone chooses "Help":</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
     <img src="{@docRoot}design/media/help_dont.png">
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
     <img src="{@docRoot}design/media/help_better.png">
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
     <img src="{@docRoot}design/media/help_evenbetter.png">
   </div>  
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
     <h4 class="do-dont-label bad">Don't</h4>
     <p>Present a dialog asking them to choose between help and other options.</p>
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
     <h4 class="do-dont-label good">Better</h4>
     <p>Immediately launch a web browser with help content. Place other options in a footer.</p>
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
     <h4 class="do-dont-label good">Even Better</h4>
     <p>Build a help screen in your app and offer other options in the action bar. For example, you could let users contact you with questions or feedback through an action button. The action overflow is the ideal place for non-help information that users rarely need.</p>
     <p>This requires more development work than launching a web browser, but it's a nicer experience for users because they don't leave your app to get the help they need and doesn't require a network connection.</p>
diff --git a/docs/html/design/patterns/index.jd b/docs/html/design/patterns/index.jd
deleted file mode 100644
index e091a29..0000000
--- a/docs/html/design/patterns/index.jd
+++ /dev/null
@@ -1,30 +0,0 @@
-page.title=Patterns
-header.justLinks=1
-footer.hide=1
-@jd:body
-
-<style>
-#landing-graphic-container {
-  position: relative;
-}
-
-#text-overlay {
-  position: absolute;
-  left: 0;
-  top: 492px;
-  width: 200px;
-}
-</style>
-
-<div id="landing-graphic-container">
-  <div id="text-overlay">
-    <span itemprop="description">Design apps that behave in a consistent, predictable
-    fashion.</span>
-    <br><br>
-    <a href="{@docRoot}design/patterns/new.html" class="landing-page-link">New in Android</a>
-  </div>
-
-  <a href="{@docRoot}design/patterns/new.html">
-    <img src="{@docRoot}design/media/patterns_landing.png">
-  </a>
-</div>
diff --git a/docs/html/design/patterns/multi-pane-layouts.jd b/docs/html/design/patterns/multi-pane-layouts.jd
deleted file mode 100644
index dbe7d01..0000000
--- a/docs/html/design/patterns/multi-pane-layouts.jd
+++ /dev/null
@@ -1,130 +0,0 @@
-page.title=Multi-pane Layouts
-page.tags="tablet","navigation","layout","fragment"
-page.metaDescription=Design guide with examples of how to flatten navigation and provide improved layout across the range of Android devices.
-
-@jd:body
-
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/layout/structure.html#structure-ui-regions">
-  <div>
-    <h3>Material Design</h3>
-    <p>UI Regions and Guidance<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}training/basics/fragments/index.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Building a Dynamic UI with Fragments</p>
-  </div>
-</a>
-
-<p>When writing an app for Android, keep in mind that Android devices
-come in many different screen sizes and types. Make sure that your app consistently provides a
-balanced and aesthetically pleasing layout by adjusting its content to varying screen sizes and
-orientations.</p>
-
-<p><em>Panels</em> are a great way for your app to achieve this. They allow you to combine multiple views into
-one compound view when a lot of horizontal screen real estate is available and by splitting them up
-when less space is available.</p>
-<h2 id="combining-views">Combining Multiple Views Into One</h2>
-
-<p>On smaller devices your content is typically divided into a master grid or list view and a detail
-view. Touching an item in the master view opens a different screen showing that item's detail
-information.</p>
-
-<img src="{@docRoot}design/media/multipane_views.png">
-
-<p>Because tablets have more screen real estate than phones, you can use panels to combine the related
-list and detail views into a single compound view. This uses the additional space more efficiently
-and makes navigating the app easier. </p>
-
-<img src="{@docRoot}design/media/multipane_view_tablet.png">
-
-<p>In general, use the pane on the right to present more information about the item you selected in the
-left pane. Make sure to keep the item in the left pane selected in order to establish the
-relationship between the panels.</p>
-<h2 id="orientation">Compound Views and Orientation Changes</h2>
-
-<p>Screens should strive to have the same functionality regardless of orientation. If you use a compound view in
-one orientation, try not to split it up when the user rotates the screen. There are several techniques
-you can use to adjust the layout after orientation change while keeping functional parity intact.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/multipane_stretch.png">
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<h4>Stretch/compress</h4>
-<p>Adjust the column width of your left pane to achieve a balanced layout in both orientations.</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/multipane_stack.png">
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<h4>Stack</h4>
-<p>Rearrange the panels on your screen to match the orientation.</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/multipane_expand.png">
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<h4>Expand/collapse</h4>
-<p>When the device rotates, collapse the left pane view to only show the most important information.</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/multipane_show.png">
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<h4>Show/hide</h4>
-<p>If your screen cannot accommodate the compound view on rotation show the right pane in full screen view on rotation to portrait. Use the Up icon in action bar to show the parent screen.</p>
-
-  </div>
-</div>
-
-
-
-
-<h2 id="checklist">Checklist</h2>
-
-<ul>
-<li>
-<p>Plan in advance on how your app scales to different screen sizes and screen orientations.</p>
-</li>
-<li>
-<p>Identify the most appropriate method for the panels in your compound views to reorganize
-  themselves when screen orientation changes.</p>
-</li>
-<li>
-<p>Look for opportunities to consolidate your views into multi-panel compound views.</p>
-</li>
-<li>
-<p>Make sure that your screens try to provide functional parity after the screen orientation
-  changes.</p>
-</li>
-</ul>
diff --git a/docs/html/design/patterns/navigation-drawer.jd b/docs/html/design/patterns/navigation-drawer.jd
deleted file mode 100644
index dbac459..0000000
--- a/docs/html/design/patterns/navigation-drawer.jd
+++ /dev/null
@@ -1,346 +0,0 @@
-page.title=Navigation Drawer
-page.tags=DrawerLayout,SlidingPaneLayout
-@jd:body
-
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/layout/structure.html#structure-side-nav">
-  <div>
-    <h3>Material Design</h3>
-    <p>Side Nav<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}training/implementing-navigation/nav-drawer.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Creating a Navigation Drawer</p>
-  </div>
-</a>
-
-
-<p>The navigation drawer is a panel that transitions in from the left edge of the screen and
-displays the app’s main navigation options.</p>
-
-
-<h4>Displaying the navigation drawer</h4>
-
-<p>The user can bring the navigation drawer onto the screen by swiping from the left edge of the
-screen or by touching the application icon on the action bar.</p>
-
-<p>As the navigation drawer expands, it overlays the content but not the action bar. When the
-drawer is fully extended, the action bar adjusts its content by replacing the current action
-bar title with the app name and removing all actions that are contextual to the view underneath
-the navigation drawer. The overflow menu with the standard action items for Settings and Help
-remains visible.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_overview.png">
-<div class="figure-caption">
-  The user can open the drawer panel by touching the navigation drawer indicator.
-</div>
-
-<p>Because they are transient, navigation drawers make views less cluttered. You can also use
-them at deeper levels in the navigation hierarchy, allowing users to switch to your app's most
-important screens from anywhere in the app.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_open_from_lower.png">
-<div class="figure-caption">
-  Open the drawer from anywhere in your app by swiping from the left edge of the screen.
-</div>
-
-
-<h4>Dismissing the navigation drawer</h4>
-
-<p> When the navigation drawer is expanded, the user can dismiss it in one of four ways: </p>
-<ul>
-  <li>Touching the content outside the navigation drawer</li>
-  <li>Swiping to the left anywhere on the screen (including edge swipe from right)</li>
-  <li>Touching the app icon/title in the action bar</li>
-  <li>Pressing Back</li>
-</ul>
-
-
-<h2 id="WhenToUse"> When to Use the Navigation Drawer </h2>
-
-<p> The navigation drawer is not a general replacement for top-level navigation via spinners
-or tabs. The structure of your app should guide your choice of which pattern to use for
-top-level switching. For more information on top-level switching mechanisms, see the
-<a href="{@docRoot}design/patterns/app-structure.html">Application Structure</a> design pattern.</p>
-<p> Here are some examples of where navigation drawers work best:</p>
-
-<h4>More than 3 top-level views</h4>
-<p> Navigation drawers are great for displaying a large number of navigation targets
-concurrently. Use the navigation drawer if you have more than 3 unique top-level views.
-If not, use fixed tabs for top-level organization to ease discovery and interaction.</p>
-
-<h4>Cross-navigation from lower levels</h4>
-<p> If your app requires cross-navigating between lower-level screens, consider using the
-navigation drawer. Because it is accessible from anywhere in the app, the drawer enables
-efficient navigation from lower-level screens to other important places in your app.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_cross_nav.png">
-<div class="figure-caption">
-  The navigation drawer makes cross-navigation at lower levels possible.
-</div>
-
-
-<h4>Deep navigation branches</h4>
-<p> If you have particularly deep branches, navigating to the top-level of your app can become
-repetitive and cumbersome with Up and Back alone. Since navigation drawers are accessible from
-anywhere in the app, navigation up to the top level is faster and more efficient.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_quick_to_top.png">
-<div class="figure-caption">
-  The navigation drawer allows for quick jumps to the top-level of your app, removing the need
-  for repetitive Back or Up sequences.
-</div>
-
-
-<h2 id="Hubs">Navigation Hubs</h2>
-
-<p>The navigation drawer is a reflection of your app’s structure and displays its major
-navigation hubs. Think of navigation hubs as those places in your app that a user will want
-to visit frequently or use as a jumping-off point to other parts of the app.
-At a minimum, the navigation hubs are the top-level views, since they correspond to your app’s
-major functional areas.</p>
-<p> If your app’s structure is deep, you can add screens from lower levels that your users will
-likely visit often and make those navigation hubs as well.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_navigation_hubs.png">
-<div class="figure-caption">
-  The navigation drawer contains all of your app's navigation hubs. Include your top level
-  screens as well as important lower-level screens.
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-  <p> To facilitate access to the navigation drawer on navigation hubs, all screens that
-  correspond to an entry in your navigation drawer should show the navigation drawer indicator
-  next to the application icon in the action bar. Touching the app icon causes the navigation
-  drawer to slide in from the left. </p>
-  <p> All other lower-level screens show the traditional Up indicator next to the application
-  icon. The drawer is still accessible with an edge-swipe, but is not featured in the action bar.</p>
-  </div>
-  <div class="layout-content-col span-5">
-    <img src="{@docRoot}design/media/navigation_drawer_indicator_big.png">
-    <div class="figure-caption">
-    App icon with navigation drawer indicator.
-  </div>
-  </div>
-</div>
-
-
-<h2 id="Content">Content of the Navigation Drawer</h2>
-
-<p> Keep the content of the navigation drawer focused on app navigation. Expose the navigation
-hubs of your app as list items inside the navigation drawer - one item per row.
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-  <h4>Titles, icons, and counters</h4>
-  <p> You can structure navigation targets by adding titles. The titles are not interactive,
-  but just organize navigation targets into functional topics. If you have many navigation
-  targets, use titles to orient the user within the drawer.</p>
-  <p> Navigation targets can have optional leading icons as well as trailing counters. Use
-  the counters to inform users about a changed state of data in the corresponding view.</p>
-  </div>
-  <div class="layout-content-col span-5">
-  <img src="{@docRoot}design/media/navigation_drawer_titles_icons.png">
-  <div class="figure-caption">
-    Use titles and icons to organize your drawer.
-  </div>
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-  <img src="{@docRoot}design/media/navigation_drawer_collapse.png">
-  <div class="figure-caption">
-    Collapsible navigation items are split. Use the left side for navigation and the right
-    to collapse and expand items.
-    </div>
-  </div>
-  <div class="layout-content-col span-5">
-  <h4>Collapsible navigation items</h4>
-  <p>If you have many views with some subordinate to others, consider collapsing them into one
-  expandable item to conserve space.
-  The parent in the navigation drawer then turns into a split item. The left side allows
-  navigation to the parent item’s view, and the right side collapses or expands the list of
-  child items. </p>
-  <p> At launch, the initial state of the collapsible items is up to you. As a rule, all
-  top-level view entries of the navigation drawer should be visible. If you have many collapsible
-  items, consider collapsing all items to allow the user to see the top-level views in their
-  entirety.</p>
-  <p> When the user opens the drawer from a lower-level screen, expand the associated branch
-  of the top-level view to give a stronger sense of place and highlight navigation opportunities
-  close to the user’s current
-  location in the app.</p>
-  </div>
-</div>
-
-
-<h2 id="ActionBar">Navigation Drawers and Action Bars</h2>
-
-<p> When the user expands the navigation drawer, the task focus switches to selecting an item
-from the drawer. Because the drawer does not overlay the action bar, users may not realize that
-the items in the action bar do not pertain to the navigation drawer. </p>
-<p> To reduce confusion, adjust the content of the action bar to the following, once the drawer
-is fully expanded:</p>
-<ul>
-  <li>App icon</li>
-  <li>App name</li>
-  <li>Remove actions from the action bar that are contextual to the underlying view (such as
-  Create new, Refresh). You may retain actions with global scope, such as “Search”.</li>
-  <li>Overflow menu with expected navigation targets, such as Settings and Help.</li>
-</ul>
-
-<img src="{@docRoot}design/media/navigation_drawer_open_overflow.png">
-<div class="figure-caption">
-  Clean up the action bar when the drawer is fully expanded. Remove actions that are not needed
-  and display your app's name in the title area.
-</div>
-
-<h4>Actions</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-  <img src="{@docRoot}design/media/navigation_drawer_nav_and_actions.png">
-    <div class="figure-caption">
-    Keep actions on the right side of the action bar and in the overflow
-  </div>
-  </div>
-  <div class="layout-content-col span-6">
-  <p> Don’t place actions in the navigation drawer. Actions belong in the action bar, and the
-  user expects to see them there. Keep in mind that not all applications use the navigation
-  drawer pattern. It may be tempting to expose all your app’s capabilities in a single place,
-  but keep the bigger picture in mind. Place your actions where all apps display them.</p>
-  </div>
-</div>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-  <p> This also applies to common navigation targets, such as access to Help or the app’s
-  Settings. As per style guide convention Help and Settings are always located in the action
-  overflow.</p>
-  </div>
-  <div class="layout-content-col span-6">
-  <img src="{@docRoot}design/media/navigation_drawer_settings_help.png">
-    <div class="figure-caption">
-    Keep Help and Settings in the overflow.
-  </div>
-  </div>
-</div>
-
-
-<h4>Contextual action bars</h4>
-<p> Sometimes the user will be in a state where a contextual action bar (CAB) appears instead
-of the app’s action bar. This typically happens when the user selects text or selects multiple
-items after a press-and-hold gesture. While the CAB is visible, you should still allow the
-user to open the navigation drawer using an edge swipe. However, replace the CAB with the
-standard action bar while the navigation drawer is open. When the user dismisses the drawer,
-re-display the CAB.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_CAB.png">
-<div class="figure-caption">
-  Hide contextual action bars while the drawer is visible.
-</div>
-
-<p>If the user navigates away from a view with selected content, deselect the content before
-before navigating to the new view.</p>
-
-
-<h2 id="Interaction">Interaction Details</h2>
-
-<h4>Introduce the user to the drawer at first use</h4>
-<p> Upon first launch of your app, introduce the user to the navigation drawer by
-automatically opening it. This ensures that users know about the navigation drawer and prompts
-them to learn about the structure of your app by exploring its content. Continue showing the
-drawer upon subsequent launches until the user actively expands the navigation drawer manually.
-Once you know that the user understands how to open the drawer, launch the app with the
-navigation drawer closed. </p>
-
-<img src="{@docRoot}design/media/navigation_drawer_first_run.png">
-<div class="figure-caption">
-  At first use, show the navigation drawer automatically to help the user learn the
-  functionality and structure of your app.
-</div>
-
-<h4>Give the user a quick peek</h4>
-<p> If the user touches the very left edge of the screen (within 20 dp from the left), have the
-drawer peek out as soon as the finger makes contact with the display. This promotes accidental
-discovery and provides richer feedback. </p>
-
-<img src="{@docRoot}design/media/navigation_drawer_peek.png">
-<div class="figure-caption">
-  The navigation drawer peeks out when the user touches the very left edge of the screen.
-</div>
-
-<h4>Highlights</h4>
-<p> When you open the navigation drawer from a screen that is represented inside the drawer,
-highlight its entry in the drawer. Vice versa, if you open the drawer from a screen that is
-not listed in the drawer, none of the items of the drawer should be highlighted.</p>
-
-
-<h2 id="ImpactOnNav">Impact of Drawer on Overall App Navigation</h2>
-
-<p>The navigation drawer is an alternative to other top-level navigation patterns. To make apps
-with navigation drawers work consistently with apps that use a tab or spinner pattern, remember
-that all navigation requirements for system Back and Up apply.</p>
-<p>Pay special attention to the following situations:</p>
-
-<h4>System Back at the top level of the app</h4>
-<p>Touching System Back at the app’s top level never opens the navigation drawer. Instead,
-System Back behaves according to the navigation rules for the top level, such as navigating
-to the previous app within the task or navigating to the Home screen.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_top_out.png">
-<div class="figure-caption">
-  System Back does not show the drawer, but behaves according to the navigation rules for
-  the top level.
-</div>
-
-<h4>System Back after cross navigation to lower hierarchy levels</h4>
-<p>If the user navigates to a lower hierarchy screen from the navigation drawer and the screen
-has a direct parent, then the Back stack is reset and Back points to the target screen’s parent.
-This Back behavior is the same as when a user navigates into an app from a notification.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_reset_backstack.png">
-<div class="figure-caption">
-  Reset the Back stack if your lower-level navigation target has direct parents.
-</div>
-
-
-<h2 id="Style">Style</h2>
-
-<p>The width of the navigation drawer depends on the content you want to display, but should be
-between a minimum of 240 dp and a maximum of 320 dp. The height of the individual line items
-should not fall below 48 dp. See the layout guideline below for recommendations on padding and
-spacing.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_layout.png">
-<div class="figure-caption">
-  Layout guidelines for the navigation drawer.
-</div>
-
-
-<p>Pick the drawer background to best match your app’s theme. See the following examples
-for a Holo light and a Holo dark themed drawer.</p>
-
-<img src="{@docRoot}design/media/navigation_drawer_holo_dark_light.png">
-<div class="figure-caption">
-  Navigation drawers in Holo light and Holo dark themed apps.
-</div>
-
-
-<h2 id="Checklist">Navigation Drawer Checklist</h2>
-
-<p>Even if you already support a similar navigation drawer, update your drawer to this
-pattern to make sure that:</p>
-<ul>
-  <li>The action bar remains in place and adjusts its content.</li>
-  <li>Your navigation drawer overlays the content.</li>
-  <li>Any view represented in the drawer has a navigation drawer indicator in its action bar
-  that allows the drawer to be opened by touching the app icon.</li>
-  <li>You take advantage of the new visual drawer transition.</li>
-  <li>Any view not represented in the drawer maintains the traditional Up indicator in its action bar.</li>
-  <li>You stay in sync with the general navigation patterns for Up and Back.</li>
-</ul>
-
diff --git a/docs/html/design/patterns/new.jd b/docs/html/design/patterns/new.jd
index 1523cea..47b05b2 100644
--- a/docs/html/design/patterns/new.jd
+++ b/docs/html/design/patterns/new.jd
@@ -1,5 +1,6 @@
 page.title=New in Android
 page.tags=KitKat,Android 4.4
+page.image=images/cards/design-new-in-android_2x.jpg
 @jd:body
 
 
@@ -92,8 +93,8 @@
 <h3>
   Gestures
 </h3>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 <p>
   The updated <a href="{@docRoot}design/patterns/gestures.html">Gestures</a>
   page covers new and updated gestures introduced in Android KitKat:
@@ -101,7 +102,7 @@
   gestures are used for changing the viewing size of content.
 </p>
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
     <img src="{@docRoot}design/media/gesture_doubletouch.png">
       <img src="{@docRoot}design/media/gesture_doubletouchdrag.png">
   </div>
@@ -111,8 +112,8 @@
 <h2>Android 4.1 Jelly Bean</h2>
 
 <h4>Notifications</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
     <p>Notifications have received some notable enhancements in Android 4.1:</p>
     <ul>
       <li>Users can act on notifications immediately from the drawer</li>
@@ -126,7 +127,7 @@
     href="{@docRoot}design/patterns/notifications.html">Notifications</a> page for
     more details.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/new_notifications.png">
   </div>
 </div>
@@ -134,8 +135,8 @@
 <div class="vspace size-2">&nbsp;</div>
 
 <h4>Resizable Application Widgets</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
     <p>Widgets are an essential aspect of home screen customization, allowing
     "at-a-glance" views of an app's most important data and functionality right from
     the user's home screen. Android 4.1 introduces improved App Widgets that can
@@ -152,7 +153,7 @@
     href="{@docRoot}design/patterns/widgets.html">Application Widgets</a> page has useful
     details about widget types, limitations, and design considerations.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/new_widgets.png">
   </div>
 </div>
@@ -160,8 +161,8 @@
 <div class="vspace size-2">&nbsp;</div>
 
 <h4>Accessibility</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-11">
+<div class="cols">
+  <div class="col-11">
     <p>One of Android's missions is to organize the world's information and
     make it universally accessible and useful. Our mission applies to all
     users-including people with disabilities such as visual impairment, color
@@ -183,7 +184,7 @@
     <a href="{@docRoot}design/patterns/widgets.html">Widgets</a> page has
     useful details about widget types, limitations, and design considerations.</p>
   </div>
-  <div class="layout-content-col span-2">
+  <div class="col-2">
     <img src="{@docRoot}design/media/new_accessibility.png">
   </div>
 </div>
@@ -191,8 +192,8 @@
 <h2>Android 4.0 Ice Cream Sandwich</h2>
 
 <h4>Navigation bar</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
     <p>Android 4.0 removes the need for traditional hardware keys on
     phones by replacing them with a virtual navigation bar that houses
     the Back, Home and Recents buttons. Read the
@@ -200,7 +201,7 @@
     pattern to learn how the OS adapts to phones with hardware buttons and
     how pre-Android 3.0 apps that rely on menu keys are supported.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/whats_new_nav_bar.png">
   </div>
 </div>
@@ -208,13 +209,13 @@
 <div class="vspace size-2">&nbsp;</div>
 
 <h4>Action bar</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
     <p>The action bar is the most important structural element of an Android
     app. It provides consistent navigation across the platform and allows your
     app to surface actions.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/whats_new_action_bar.png">
   </div>
 </div>
@@ -222,14 +223,14 @@
 <div class="vspace size-2">&nbsp;</div>
 
 <h4>Multi-pane layouts</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
     <p>Creating apps that scale well across different form factors and screen
     sizes is important in the Android world. Multi-pane layouts allow you to
     combine different activities that show separately on smaller devices into
     richer compound views for tablets.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/whats_new_multipanel.png">
   </div>
 </div>
@@ -238,13 +239,13 @@
 
 <h4>Selection</h4>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
     <p>The long press gesture which was traditionally used to show contextual
     actions for objects is now used for data selection. When selecting data,
     contextual action bars allow you to surface actions.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/whats_new_multiselect.png">
   </div>
 </div>
diff --git a/docs/html/design/patterns/notifications_k.jd b/docs/html/design/patterns/notifications_k.jd
index c8ef50b..01a12a7 100644
--- a/docs/html/design/patterns/notifications_k.jd
+++ b/docs/html/design/patterns/notifications_k.jd
@@ -22,8 +22,8 @@
 
 <h2>Anatomy of a notification</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>Base Layout</h4>
     <p>At a minimum, all notifications consist of a base layout, including:</p>
     <ul>
@@ -34,7 +34,7 @@
 image is shown for the main icon</li>
     </ul>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/notifications_pattern_anatomy.png">
     <div class="figure-caption">
       Base layout of a notification
@@ -54,8 +54,8 @@
 <img src="{@docRoot}design/media/notifications_pattern_expandable.png">
 
 <h4>Actions</h4>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <p>Android supports optional actions that are displayed at the bottom of
 the notification. With actions, users can handle the most common tasks for a
 particular notification from within the notification shade without having to
@@ -80,7 +80,7 @@
 or "Open")</li>
     </ul>
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
     <img src="{@docRoot}design/media/notifications_pattern_two_actions.png">
     <div class="figure-caption">
       Calendar reminder notification with two actions
@@ -96,11 +96,11 @@
 notification is available from within the associated application as well.</p>
 
 <h2>Design guidelines</h2>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <img src="{@docRoot}design/media/notifications_pattern_personal.png">
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
     <h4>Make it personal</h4>
     <p>For notifications of items sent by another user (such as a message or
 status update), include that person's image.</p>
@@ -264,8 +264,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
+<div class="cols">
+  <div class="col-7">
 
 <h4>When not to display a notification</h4>
 <p>There are however many other cases where notifications should not be
@@ -312,20 +312,20 @@
 </ul>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/notifications_pattern_social_fail.png">
   </div>
 </div>
 
 <h2 id="interacting-with-notifications">Interacting With Notifications</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/notifications_pattern_phone_icons.png">
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
   <p>Notifications are indicated by icons in the notification area and can be
 accessed by opening the notification drawer.</p>
@@ -337,8 +337,8 @@
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
 <p><h4>Ongoing notifications</h4>
 <p>Ongoing notifications keep users informed about an ongoing process in the
@@ -349,15 +349,15 @@
 manually removed from the notification drawer.</p></p>
 
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
     <img src="{@docRoot}design/media/notifications_pattern_ongoing_music.png">
 
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-12">
+<div class="cols">
+  <div class="col-12">
     <h4>Dialogs and toasts are for feedback not notification</h4>
     <p>Your app should not create a dialog or toast if it is not currently on
 screen. Dialogs and Toasts should only be displayed as the immediate response
diff --git a/docs/html/design/patterns/pure-android.jd b/docs/html/design/patterns/pure-android.jd
index a0f672e..e617711 100644
--- a/docs/html/design/patterns/pure-android.jd
+++ b/docs/html/design/patterns/pure-android.jd
@@ -1,4 +1,5 @@
 page.title=Pure Android
+page.image=images/cards/design-pure-android_2x.png
 @jd:body
 
 <p>Most developers want to distribute their apps on multiple platforms. As you plan your app for
@@ -10,8 +11,8 @@
 
 <div class="vspace size-1">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
 <h4>Don't mimic UI elements from other platforms</h4>
 <p>Platforms typically provide a carefully designed set of UI elements that are themed in a very
@@ -28,7 +29,7 @@
 conventions of a different platform.</p>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/migrating_ui_elements.png">
     <div class="figure-caption">
@@ -40,8 +41,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
 <h4>Don't carry over platform-specific icons</h4>
 <p>Platforms typically provide sets of icons for common functionality, such as sharing, creating a new
@@ -52,7 +53,7 @@
 <a href="{@docRoot}design/downloads/index.html">Downloads</a> page.</p>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/migrating_icons.png">
     <div class="figure-caption">
@@ -64,8 +65,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
 <h4>Don't use bottom tab bars</h4>
 <p>Other platforms use the bottom tab bar to switch between the app's views. Per platform convention,
@@ -77,7 +78,7 @@
 <a href="{@docRoot}design/patterns/actionbar.html">Action Bars</a>.</p>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/migrating_ios_dialers.png">
     <div class="figure-caption">
@@ -87,8 +88,8 @@
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
 <h4>Don't hardcode links to other apps</h4>
 <p>In some cases you might want your app to take advantage of another app's feature set. For
@@ -101,7 +102,7 @@
 sharing target.</p>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/migrating_intents.png">
     <div class="figure-caption">
@@ -114,8 +115,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
 <h4>Don't use labeled back buttons on action bars</h4>
 <p>Other platforms use an explicit back button with label to allow the user to navigate up the
@@ -125,7 +126,7 @@
 <p>Follow this guideline to provide a consistent navigation experience across the platform.</p>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/migrating_ios_galleries.png">
     <div class="figure-caption">
@@ -135,8 +136,8 @@
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
 <h4>Don't use right-pointing carets on line items</h4>
 <p>A common pattern on other platforms is the display of right-pointing carets on line items that allow
@@ -145,7 +146,7 @@
 the platform and in order to not have the user guess as to what the meaning of those carets may be.</p>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
 
     <img src="{@docRoot}design/media/migrating_ios_settings.png">
     <div class="figure-caption">
diff --git a/docs/html/design/patterns/selection.jd b/docs/html/design/patterns/selection.jd
deleted file mode 100644
index 7ed6dcc..0000000
--- a/docs/html/design/patterns/selection.jd
+++ /dev/null
@@ -1,123 +0,0 @@
-page.title=Selection
-page.tags=actionmode,navigation,contextual
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/patterns/selection.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Selection<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/menus.html#context-menu">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Menus: Creating Contextual Menus</p>
-  </div>
-</a>
-
-
-<p>Android 3.0 changed the <em>long press</em> gesture&mdash;that is, a touch that's held in the same position for a moment&mdash;to be the global gesture to select data.. This affects the way you should
-handle multi-select and contextual actions in your apps.</p>
-
-<div class="vspace size-1">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-<h4>What has changed?</h4>
-<p>In previous versions of Android, the long press gesture was universally used to display contextual
-actions for a given data item in a contextual menu.</p>
-<p>This pattern changed with Android 3.0. The long press gesture is now used to select data, combining
-contextual actions and selection management functions for selected data into a new element called
-the contextual action bar (CAB).</p>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/selection_context_menu.png">
-    <div class="figure-caption">
-      Traditional use of the long press gesture to show contextual menus.
-    </div>
-
-  </div>
-</div>
-
-<h4>Using the contextual action bar</h4>
-<p itemprop="description">The contextual action bar (CAB) is a temporary action bar that overlays your app's current action bar while data
-is selected. It appears after the user long-presses on a selectable data item.</p>
-
-<img src="{@docRoot}design/media/selection_cab_big.png">
-
-<div class="vspace size-1">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-<p>From here the user can:</p>
-<ul>
-<li>Select additional data items by touching them.</li>
-<li>Trigger an action from the CAB that applies to all highlighted data items. The CAB then
-  automatically dismisses itself.</li>
-<li>Dismiss the CAB via the navigation bar's Back button or the CAB's checkmark button. This removes
-  the CAB along with all selection highlights.</li>
-</ul>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/selection_cab_example.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-<h4>Selecting CAB actions</h4>
-<p>You can decide which actions and elements appear in the CAB. Use the guidelines in the <a href="actionbar.html">Action Bar
-pattern</a> to decide which items to surface at the top level and which to move to the
-action overflow.</p>
-<h4>Dynamically adjust CAB actions</h4>
-<p>In most cases you need to adjust the actions in the CAB dynamically as the user adds more items to
-the selection. Actions that apply to a single selected data item don't necessarily apply to multiple
-selected data items of the same kind.</p>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/selection_adjusting_actions.png">
-    <div class="figure-caption">
-      Adjusting actions in the CAB as additional items are selected.
-    </div>
-
-  </div>
-</div>
-
-<div class="note develop">
-<p><strong>Developer Guide</strong></p>
-  <p>For information about how to create a contextual action bar, read
-  <a href="{@docRoot}guide/topics/ui/menus.html#CAB">Using the contextual action mode</a>.</p>
-</div>
-
-
-<h2 id="checklist">Checklist</h2>
-
-<ul>
-<li>
-<p>Whenever your app supports the selection of multiple data items, make use of the contextual action
-  bar (CAB).</p>
-</li>
-<li>
-<p>Reserve the long press gesture for selection exclusively. Don't use it to display traditional
-  contextual menus.</p>
-</li>
-<li>
-<p>If you don't support multi-selection within a list, long press should do nothing.</p>
-</li>
-<li>
-<p>Plan the actions you want to display inside of a CAB in the same way you would plan the actions
-  inside your app's action bar.</p>
-</li>
-</ul>
diff --git a/docs/html/design/patterns/settings.jd b/docs/html/design/patterns/settings.jd
deleted file mode 100644
index a24d6c0..0000000
--- a/docs/html/design/patterns/settings.jd
+++ /dev/null
@@ -1,708 +0,0 @@
-page.title=Settings
-page.tags=preferences,sharedpreferences
-@jd:body
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/patterns/settings.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Settings<p>
-  </div>
-</a>
-
-<a class="notice-developers" href="{@docRoot}guide/topics/ui/settings.html">
-  <div>
-    <h3>Developer Docs</h3>
-    <p>Settings</p>
-  </div>
-</a>
-
-
-<p itemprop="description">Settings is a place in your app where users indicate their preferences for how your app should
-behave. This benefits users because:</p>
-
-<ul>
-<li>You don't need to interrupt them with the same questions over and over when certain situations
-arise. The settings predetermine what will always happen in those situations (see design
-principle: <a href="{@docRoot}design/get-started/principles.html#decide-for-me">Decide for me but
-let me have the final say</a>).</li>
-<li>You help them feel at home and in control (see design principle:
-<a href="{@docRoot}design/get-started/principles.html#make-it-mine">Let me make it mine</a>).</li>
-</ul>
-
-<h2 id="flow-structure">Flow and Structure</h2>
-
-<h4 id="settings-access">Provide access to Settings in the action overflow</h4>
-
-<p>Settings is given low prominence in the UI because it's not frequently needed. Even if there's
-room in the <a href="{@docRoot}design/patterns/actionbar.html">action bar</a>, never make Settings
-an action button. Always keep it in the action overflow and label it "Settings". Place it below
-all other items except "Help".</p>
-
-<img src="{@docRoot}design/media/settings_overflow.png">
-
-<div class="vspace size-2">&nbsp;</div>
-
-<h4 id="what-to-make-a-setting">Avoid the temptation to make everything a setting</h4>
-
-<p>Because Settings is a few navigational steps away, no matter how many items you have, they'll
-never clutter up the core part of your UI. This may seem like good news, but it also poses a
-challenge.</p>
-
-<p>Settings can be a tempting place to keep a lot of stuff&mdash;like a hall closet where things
-get stashed when you tidy up before company comes over. It's not a place where you spend lots of
-time, so it's easy to rationalize and ignore its cluttered condition. But when users visit
-Settings&mdash;however infrequently&mdash;they'll have the same expectations for the experience as
-they do everywhere else in your app. More settings means more choices to make, and too many are
-overwhelming.</p>
-
-<p>So don't punt on the difficult product decisions and debates that can bring on the urge to
-"just make it a setting". For each control you're considering adding to Settings, make sure it
-meets the bar:</p>
-
-<img src="{@docRoot}design/media/settings_flowchart.png">
-
-<div class="vspace size-3">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-5 with-callouts">
-
-<h4 id="group-settings">If you still have lots of settings, group related settings together</h4>
-
-<p>The number of items an average human can hold in short-term memory is 7&plusmn;2. If you
-present a list of 10 or more settings (even after applying the criteria above), users will have
-more difficulty scanning, comprehending, and processing them.</p>
-
-<p>You can remedy this by dividing some or all of the settings into groups, effectively turning
-one long list into multiple shorter lists. A group of related settings can be presented in one of
-two ways:</p>
-
-<ol>
-<li><h4>Under a section divider</h4></li>
-<li><h4>In a separate subscreen</h4></li>
-</ol>
-
-<p>You can use one or both these grouping techniques to organize your app's settings.</p>
-
-<p>For example, in the main screen of the Android Settings app, each item in the list navigates
-to a subscreen of related settings. In addition, the items themselves are grouped under section
-dividers.</p>
-
-  </div>
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/settings_grouping.png">
-
-  </div>
-</div>
-
-<p>Grouping settings is not an exact science, but here's some advice for how to approach it, based
-on the total number of settings in your app.</p>
-
-<div class="vspace size-1">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-2">
-
-<h4>7 or fewer</h4>
-
-  </div>
-  <div class="layout-content-col span-11">
-
-<p>Don't group them at all. It won't benefit users and will seem like overkill.</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-2">
-
-<h4>8 to 10</h4>
-
-  </div>
-  <div class="layout-content-col span-11">
-
-<p>Try grouping related settings under 1 or 2 section dividers. If you have any "singletons"
-(settings that don't relate to any other settings and can't be grouped under your section
-dividers), treat them as follows:</p>
-
-<ul>
-<li>If they include some of your most important settings, list them at the top without a section
-divider.</li>
-<li>Otherwise, list them at the bottom with a section divider called "OTHER", in order of
-importance.</li>
-</ul>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-2">
-
-<h4>11 to 15</h4>
-
-  </div>
-  <div class="layout-content-col span-11">
-
-<p>Same advice as above, but try 2 to 4 section dividers.</p>
-
-<p>Also, try the following to reduce the list:</p>
-
-<ul>
-<li>If 2 or more of the settings are mainly for power users, move them out of your main Settings
-screen and into an "Advanced" subscreen. Place an item in the action overflow called "Advanced" to
-navigate to it.</li>
-<li>Look for "doubles": two settings that relate to one another, but not to any other settings.
-Try to combine them into one setting, using the design patterns described later in this section.
-For example, you might be able to redesign two related checkbox settings into one multiple choice
-setting.</li>
-</ul>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-2">
-
-<h4>16 or more</h4>
-
-  </div>
-  <div class="layout-content-col span-11">
-
-<p>If you have any instances of 4 or more related settings, group them under a subscreen. Then use
-the advice suggested above for the reduced list size.</p>
-
-  </div>
-</div>
-
-
-<h2 id="patterns">Design Patterns</h2>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Checkbox</h4>
-<p>Use this pattern for a setting that is either selected or not selected.</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_checkbox.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Multiple choice</h4>
-<p>Use this pattern for a setting that needs to present a discrete set of options, from which the
-user can choose only one.</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_multiple_choice.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Slider</h4>
-<p>Use this pattern for a setting where the range of values are not discrete and fall along a
-continuum.</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_slider.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Date/time</h4>
-<p>Use this pattern for a setting that needs to collect a date and/or time from the user.</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_date_time.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Subscreen navigation</h4>
-<p>Use this pattern for navigating to a subscreen or sequence of subscreens that guide the user
-through a more complex setup process.</p>
-<ul>
-<li>If navigating to a single subscreen, use the same title in both the subscreen and the label
-navigating to it.</li>
-<li>If navigating to a sequence of subscreens (as in this example), use a title that describes the
-first step in the sequence.</li>
-</ul>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_subscreen_navigation.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>List subscreen</h4>
-<p>Use this pattern for a setting or category of settings that contains a list of equivalent items.
-</p>
-<p>The label provides the name of the item, and secondary text may be used for status. (In this
-example, status is reinforced with an icon to the right of the label.) Any actions associated with
-the list appear in the action bar rather than the list itself.</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_list_subscreen.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Master on/off switch</h4>
-<p>Use this pattern for a category of settings that need a mechanism for turning on or off as a
-whole.</p>
-<p>An on/off switch is placed as the first item in the action bar of a subscreen. When the switch
-is turned off, the items in the list disappear, replaced by text that describes why the list is
-empty. If any actions require the switch to be on, they become disabled.</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_master_on_off.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<div class="vspace size-2">&nbsp;</div>
-
-<p>You can also echo the master on/off switch in the menu item that leads to the subscreen.
-However, you should only do this in cases where users rarely need to access the subscreen once
-it's initially set up and more often just want to toggle the switch.</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_master_on_off_2.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Individual on/off switch</h4>
-<p>Use this pattern for an individual setting that requires a more elaborate description than can
-be provided in checkbox form.</p>
-<p>The on/off switch only appears in the subscreen so that users aren't able to toggle it without
-also being exposed to the descriptive text. Secondary text appears below the setting label to
-reflect the current selection.</p>
-<p>In this example, Android Beam is on by default. Since users might not know what this setting
-does, we made the status more descriptive than just "On".</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_individual_on_off.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Dependency</h4>
-<p>Use this pattern for a setting that changes availability based on the value of another setting.
-</p>
-<p>The disabled setting appears below its dependency, without any indentation. If the setting
-includes a status line, it says "Unavailable", and if the reason isn't obvious, a brief
-explanation is included in the status.</p>
-<p>If a given setting is a dependency to 3 or more settings, consider using a subscreen with a
-master on/off switch so that your main settings screen isn't cluttered by lots of disabled items.
-</p>
-
-  </div>
-  <div class="layout-content-col span-10">
-
-<img src="{@docRoot}design/media/settings_dependency.png">
-
-  </div>
-</div>
-
-<h2 id="defaults">Defaults</h2>
-
-<p>Take great care in choosing default values for each of your settings. Because settings
-determine app behavior, your choices will contribute to users' first impressions of your app. Even
-though users can change settings, they'll expect the initial states to be sensible. The following
-questions (when applicable) may help inform your decisions:</p>
-
-<ul>
-<li>Which choice would most users be likely to choose on their own if there were no default?</li>
-<li>Which choice is the most neutral or middle-of-the-road?</li>
-<li>Which choice is the least risky, controversial, or over-the-top?</li>
-<li>Which choice uses the least amount of battery or mobile data?</li>
-<li>Which choice best supports the design principle
-<a href="{@docRoot}design/get-started/principles.html#never-lose-my-stuff">Never lose my stuff</a>?</li>
-<li>Which choice best supports the design principle
-<a href="{@docRoot}design/get-started/principles.html#interrupt-only-if-important">Only interrupt
-me if it's important</a>?
-</li>
-</ul>
-
-<h2 id="writing">Writing Guidelines</h2>
-
-<h4>Label clearly and concisely</h4>
-
-<p>Writing a good label for a setting can be challenging because space is very limited. You only
-get one line, and it's incredibly short on the smallest of devices. Follow these guidelines to
-make your labels brief, meaningful, and scannable:</p>
-
-<ul>
-<li>Write each label in sentence case (i.e. only the first word and proper nouns are capitalized).
-</li>
-<li>Don't start a label with an instructional verb like "Set", "Change", "Edit", "Modify",
-"Manage", "Use", "Select", or "Choose". Users already understand that they can do these things to
-settings.</li>
-<li>Likewise, don't end a label with a word like "setting" or "settings". It's already implied.
-</li>
-<li>If the setting is part of a grouping, don't repeat the word(s) used in the section divider or
-subscreen title.</li>
-<li>Avoid starting a label with a negative word like "Don't" or "Never". For example, "Don't
-allow" could be rephrased to "Block".</li>
-<li>Steer clear of technical jargon as much as possible, unless it's a term widely understood by
-your target users. Use common verbs and nouns to convey the setting's purpose rather than its
-underlying technology.</li>
-<li>Don't refer to the user. For example, for a setting allowing the user to turn notifications on
-or off, label it "Notifications" instead of "Notify me".</li>
-</ul>
-
-<p>Once you've decided on labels for your settings, be sure to preview them on an
-<a href="{@docRoot}design/style/metrics-grids.html">LDPI handset</a> in portrait to make sure
-they'll fit everywhere.</p>
-
-<h4>Secondary text below is for status, not description&hellip;</h4>
-
-<p>Before Ice Cream Sandwich, we often displayed secondary text below a label to further describe
-it or provide instructions. Starting in Ice Cream Sandwich, we're using secondary text for status.
-</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label bad emulate-content-left-padding">Before</div>
-
-    <table class="ui-table bad emulate-content-left-padding">
-    <thead>
-      <tr>
-        <th class="label">
-        Screen timeout
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        Adjust the delay before the screen automatically turns off
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label good">After</div>
-
-    <table class="ui-table good">
-    <thead>
-      <tr>
-        <th class="label">
-        Sleep
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        After 10 minutes of inactivity
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-</div>
-
-<p>Status in secondary text has the following benefits:</p>
-<ul>
-<li>Users can see at a glance what the current value of a setting is without having to navigate
-any further.</li>
-<li>It applies the design principle
-<a href="{@docRoot}design/get-started/principles.html#keep-it-brief">Keep it brief</a>, which
-users greatly appreciate.</li>
-</ul>
-
-<h4>&hellip;unless it's a checkbox setting</h4>
-<p>There's one important exception to the using secondary text for status: checkbox settings.
-Here, use secondary text for description, not status. Status below a checkbox is unnecessary
-because the checkbox already indicates it. The reason why it's appropriate to have a description
-below a checkbox setting is because&mdash;unlike other controls&mdash;it doesn't display a dialog
-or navigate to another screen where additional information can be provided.</p>
-
-<p>That said, if a checkbox setting's label is clear enough on its own, there's no need to also
-provide a description. Only include one if necessary.</p>
-
-<p>Follow these guidelines to write checkbox setting descriptions:</p>
-<ul>
-<li>Keep it to one sentence and don't use ending punctuation.</li>
-<li>Convey what happens when the setting is checked, phrased in the form of a command. Example:
-"Allow data exchange", not "Allows data exchange".</li>
-<li>Avoid repetition by choosing words that don't already appear in the label.</li>
-<li>Don't refer to the user unless it's necessary for understanding the setting.</li>
-<li>If you must refer to the user, do so in the second person ("you") rather than the first person
-("I"). Android speaks to users, not on behalf of them.</li>
-</ul>
-
-<h4>Writing examples</h4>
-
-<p>The following are examples of changes we made to labels and secondary text in the Settings app
-in Ice Cream Sandwich.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label bad emulate-content-left-padding">Before</div>
-
-    <table class="ui-table bad emulate-content-left-padding">
-    <thead>
-      <tr>
-        <th class="label">
-        Use tactile feedback
-        </th>
-      </tr>
-    </thead>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label good">After</div>
-
-    <table class="ui-table good">
-    <thead>
-      <tr>
-        <th class="label">
-        Vibrate on touch
-        </th>
-      </tr>
-    </thead>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<p>In this checkbox setting, we eliminated the throwaway word "Use" and rephrased the label to be
-more direct and understandable.</p>
-
-  </div>
-
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label bad emulate-content-left-padding">Before</div>
-
-    <table class="ui-table bad emulate-content-left-padding">
-    <thead>
-      <tr>
-        <th class="label">
-        Screen timeout
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        Adjust the delay before the screen automatically turns off
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label good">After</div>
-
-    <table class="ui-table good">
-    <thead>
-      <tr>
-        <th class="label">
-        Sleep
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        After 10 minutes of inactivity
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<p>In this multiple choice setting, we changed the label to a friendlier term and also replaced
-the description with status. We put some descriptive words around the selected value, "10
-minutes", because on its own, the meaning could be misinterpreted as "sleep for 10 minutes".</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label bad emulate-content-left-padding">Before</div>
-
-    <table class="ui-table bad emulate-content-left-padding">
-    <thead>
-      <tr>
-        <th class="label">
-        Change screen lock
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        Change or disable pattern, PIN, or password security
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label good">After</div>
-
-    <table class="ui-table good">
-    <thead>
-      <tr>
-        <th class="label">
-        Screen lock
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        Pattern
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<p>This setting navigates to a a sequence of subscreens that allow users to choose a type of
-screen lock and then set it up. We eliminated the throwaway word "Change" in the label, and
-replaced the description with the current type of screen lock set up by the user. If the user
-hasn't set up a screen lock, the secondary text says "None".</p>
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label bad emulate-content-left-padding">Before</div>
-
-    <table class="ui-table bad emulate-content-left-padding">
-    <thead>
-      <tr>
-        <th class="label">
-        NFC
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        Use Near Field Communication to read and exchange tags
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <div class="do-dont-label good">After</div>
-
-    <table class="ui-table good">
-    <thead>
-      <tr>
-        <th class="label">
-        NFC
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td class="secondary-text">
-        Allow data exchange when the phone touches another device
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<p>In this checkbox setting&mdash;although it's technical jargon&mdash;we kept the "NFC" label
-because: (1) we couldn't find a clear, concise alternative, and (2) user familiarity with the
-acronym is expected to increase dramatically in the next couple of years.</p>
-<p>We did, however, rewrite the description. It's far less technical than before and does a better
-job of conveying how and why you'd use NFC. We didn't include what the acronym stands for because
-it doesn't mean anything to most users and would have taken up a lot of space.</p>
-
-  </div>
-</div>
-
-
-
-<h2 id="checklist">Checklist</h2>
-<ul>
-<li><p>Make sure each item in Settings meets the criteria for belonging there.</p></li>
-<li><p>If you have more than 7 items, explore ways to group related settings.</p></li>
-<li><p>Use design patterns wherever applicable so users don't face a learning curve.</p></li>
-<li><p>Choose defaults that are safe, neutral, and fit the majority of users.</p></li>
-<li><p>Give each setting a clear, concise label and use secondary text appropriately.</p></li>
-</ul>
diff --git a/docs/html/design/patterns/swipe-views.jd b/docs/html/design/patterns/swipe-views.jd
index af5c9dc..9ee33db 100644
--- a/docs/html/design/patterns/swipe-views.jd
+++ b/docs/html/design/patterns/swipe-views.jd
@@ -42,8 +42,8 @@
 
 <h2 id="between-tabs">Swiping Between Tabs</h2>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
+<div class="cols">
+  <div class="col-5">
 
     <div class="framed-nexus5-port-span-5">
       <video class="play-on-hover" autoplay>
@@ -58,7 +58,7 @@
     </div>
 
   </div>
-  <div class="layout-content-col span-8">
+  <div class="col-8">
     <p>If your app uses action bar tabs, use swipe to navigate between the different views.</p>
     <div class="vspace size-1">&nbsp;</div>
 
diff --git a/docs/html/design/patterns/widgets.jd b/docs/html/design/patterns/widgets.jd
index 47acc7b..b149af6 100644
--- a/docs/html/design/patterns/widgets.jd
+++ b/docs/html/design/patterns/widgets.jd
@@ -21,18 +21,18 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h3>Collection widgets</h3>
     <p>As the name implies, collection widgets specialize in displaying multitude elements of the same type, such as a collection of pictures from a gallery app, a collection of articles from a news app or a collection of emails/messages from a communication app. Collection widgets typically focus on two use cases: browsing the collection, and opening an element of the collection to its detail view for consumption. Collection widgets can scroll vertically.</p>
   </div>
-  <div class="layout-content-col span-3">
+  <div class="col-3">
     <img src="{@docRoot}design/media/widgets_collection_gmail.png">
     <div class="figure-caption">
       ListView widget
     </div>
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
     <img src="{@docRoot}design/media/widgets_collection_bookmarks.png">
     <div class="figure-caption">
       GridView widget
@@ -84,8 +84,8 @@
   <li>Open application at top level: Tapping on an information element will usually navigate the user to a lower level detail screen. Providing access to the top level of your application provides more navigation flexibility and can replace a dedicated app shortcut that users would otherwise use to navigate to the app from the home screen. Using your application icon as an affordance can also provide your widget with a clear identity in case the data you're displaying is ambiguous.</li>
 </ul>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h3>Widget resizing</h3>
     <p>With version 3.1, Android introduced resizable widgets to the platform. Resizing allows users to adjust the height and/or the width of a widget within the constraints of the home panel placement grid. You can decide if your widget is freely resizable or if it is constrained to horizontal or vertical size changes. You do not have to support resizing if your particular widget is inherently fixed-size.</p>
     <p>Allowing users to resize widgets has important benefits:</p>
@@ -95,7 +95,7 @@
     </ul>
   </div>
 
-  <div class="layout-content-col span-7">
+  <div class="col-7">
     <img src="{@docRoot}design/media/widgets_resizing01.png">
     <div class="figure-caption">
       A long press and subsequent release sets resizable widgets into resize mode. Users can use the drag handles or the widget corners to set the desired size.
@@ -116,14 +116,14 @@
 </ul>
 
 <h3>Widget configuration</h3>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <p>Sometimes widgets need to be setup before they can become useful. Think of an email widget for example, where you need to provide an account before the inbox can be displayed. Or a static photo widget where the user has to assign the picture that is to be displayed from the gallery.</p>
     <p>Android widgets display their configuration choices right after the widget is dropped onto a home panel. Keep the widget configuration light and don't present more than 2-3 configuration elements. Use dialog-style instead of full-screen activities to present configuration choices and retain the user's context of place, even if doing so requires use of multiple dialogs.</p>
 <p>Once setup, there typically is not a lot of reason to revisit the setup. Therefore Android widgets do not show a "Setup" or "Configuration" button.</p>
   </div>
 
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="{@docRoot}design/media/widgets_config.png">
     <div class="figure-caption">
       After adding a Play widget to a home panel, the widget asks the user to specify the type of media the widget should display.
diff --git a/docs/html/design/style/branding.jd b/docs/html/design/style/branding.jd
deleted file mode 100644
index b5bb77c..0000000
--- a/docs/html/design/style/branding.jd
+++ /dev/null
@@ -1,128 +0,0 @@
-page.title=Your Branding
-page.tags=branding,logo
-@jd:body
-
-<p>Following Android design patterns doesn't mean that your app has to look the same as
-everyone else's. In Android, your app can shine as an extension of your brand. </p>
-
-<h2 id="color">Color</h2>
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">
-  <div>
-    <h3>Material Design</h3>
-    <p>UI Color Application<p>
-  </div>
-</a>
-
-<p>Use your brand color for accent by overriding the Android framework's default blue in UI elements like checkboxes, progress bars, radio buttons, sliders, tabs, and scroll indicators.</p>
-
-<p>Look for opportunities to use high-contrast color for emphasis, for example, as the background color of the action bar or a primary button. But don't go overboard: not all actions are equal, so use it only for the one or two most important things.</p>
-<p>When customizing colors, <a href="{@docRoot}design/style/touch-feedback.html">touch feedback</a>
-  should be subtle &mdash; just slightly lighter or darker than the untouched color.</p>
-
-<div class="vspace size-1">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-    <img src="{@docRoot}design/media/branding_wallet.png" style="width:94%">
-    <div class="figure-caption">
-      The four colors of the Google Wallet logo provide a playful accent to the four dots
-      that appear as the user enters a PIN.
-    </div>
-  </div>
-  <div class="layout-content-col span-6">
-    <img src="{@docRoot}design/media/branding_googlemusic.png" style="width:94%">
-    <div class="figure-caption">
-      The Google Play Music app has an orange theme color, which is used for emphasis
-      in the action bar and for accent in the selected tab, scroll indicator, and
-      hyperlinks.
-    </div>
-  </div>
-</div>
-
-<h2 id="logo">Logo</h2>
-
-<p>Your app's <a href="{@docRoot}design/style/iconography.html#launcher">launcher icon</a> is
-  a key place to incorporate your logo, because it's what
-  users will look for and touch to begin using your app. You can carry the launcher
-  icon through to all the screens in your app by showing it in the
-  <a href="{@docRoot}design/patterns/actionbar.html">action bar</a> along
-  with the name of the app.</p>
-
-<p>Another approach to consider is to have your logo take the place of the launcher icon
-and app name in the action bar.</p>
-
-
-<div class="vspace size-1">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6" style="padding-top:24px;">
-        <img src="{@docRoot}design/media/branding_launcher_icon.png" style="width:60px;float:left;padding-right:1em;">
-    <div class="figure-caption" style="width:290px;margin-left:20px;">
-    Google+ reinforces its brand by carrying its launcher icon through to the action bar.
-    </div>
-        <img src="{@docRoot}design/media/branding_logo_icon_action_bar.png" style="width:320px;float:left;padding-right:1em;">
-  </div>
-  <div class="layout-content-col span-6">
-    <img src="{@docRoot}design/media/yourbranding_app.png" style="width:320px;">
-    <div class="figure-caption" style="width:320px;">
-      Example of a the logo in the action bar. This works well in cases where the brand's logo matches the name of the app.
-    </div>
-  </div>
-</div>
-
-<h2 id="logo">Icons</h2>
-
-<a class="notice-designers-material" href="http://www.google.com/design/spec/style/icons.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Icons<p>
-  </div>
-</a>
-
-<p>If you have icons that you're already using for your app on other platforms
-and they have a distinctive look intended to fit your brand, use them on your
-Android app as well. <strong>If you take this approach, make sure your brand styling is
-applied to every single icon in your app.</strong></p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-    <p>One exception: For any icon in your existing set where the symbol is different from
-    Android's, use Android's symbol but give it your brand's styling. That way, users will
-    understand what the purpose of the icon is based on what they've learned in other
-    Android apps (Design principle:
-    <a href="{@docRoot}design/get-started/principles.html#give-me-tricks">Give me tricks that
-    work everywhere</a>). But the icon will still look like it belongs with all of
-    your other icons as a part of your brand.</p>
-
-  </div>
-
-  <div class="layout-content-col span-6">
-    <img src="{@docRoot}design/media/yourbranding_in-app-icons.png" style="width:300px;margin:12px 48px 0 16px;">
-    </div>
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-    <p><strong>Example</strong>:<br />
-    </p>
-    <p>The brand's normal icon for sharing on other platforms is a right arrow.
-  </div>
-
-  <div class="layout-content-col span-6 lasyout-with-list-item-margins">
-
-    <div style="margin-bottom:1em;">
-      <span class="do-dont-label bad" style="margin-left:12px">Don't</span>
-      <span style="margin-left: 64px;"  class="do-dont-label good"><strong>Do</strong></span>
-    </div>
-      <img src="{@docRoot}design/media/yourbranding_sharing.png" style="width:180px;">
-  </div>
-</div>
-
-<p>What if you don't already have your own icons &mdash; for example, if you're creating a
-brand new app only for Android? In this case, use Android's standard icons and rely
-more on color and logo for branding. Get the Action Bar Icon Pack, available for free
-in <a href="{@docRoot}design/downloads/index.html">Downloads</a>.</p>
diff --git a/docs/html/design/style/color.jd b/docs/html/design/style/color.jd
deleted file mode 100644
index 4c5f5ab..0000000
--- a/docs/html/design/style/color.jd
+++ /dev/null
@@ -1,141 +0,0 @@
-page.title=Color
-@jd:body
-
-<style>
-  .color-row {
-    width: 760px;
-    margin:0;
-
-    display: -webkit-box;
-    display:    -moz-box;
-    display:         box;
-
-    -webkit-box-orient: horizontal;
-       -moz-box-orient: horizontal;
-            box-orient: horizontal;
-
-    cursor: pointer;
-
-    -webkit-user-select: none;
-            user-select: none;
-    /* nested user-select in FF is broken as of Jan 2012, don't use it */
-  }
-
-  .color-row-container {
-    line-height: 0; /* to remove more top space in FF for -moz-box elements */
-  }
-
-  .color-row-container + .color-row-container {
-    margin-top: -10px !important;
-  }
-
-  .color-row li {
-    margin-left: 0 !important;
-    position: relative;
-    list-style-type: none;
-    height: 80px;
-    display: block;
-
-    -webkit-box-flex: 1;
-       -moz-box-flex: 1;
-            box-flex: 1;
-  }
-
-  .color-row li:before {
-    display: none;
-  }
-
-  .color-row li.thin {
-    height: 40px;
-  }
-
-  .color-row li span {
-    display: none;
-    position: absolute;
-    top: -30px;
-    left: 50%;
-    margin-left: -2.5em;
-    width: 5em;
-    background-color: #fff;
-    padding: 10px;
-    font-weight: 600;
-    line-height: 20px;
-    text-align: center;
-    box-shadow: 0 5px 5px rgba(0,0,0,0.1);
-    cursor: text;
-
-    -webkit-user-select: text;
-            user-select: text;
-    /* nested user-select in FF is broken as of Jan 2012, don't use it */
-  }
-
-  .color-row li:hover span {
-    display: block;
-  }
-
-  /* triangle callout */
-  .color-row li span:after {
-    content: '';
-    display: block;
-    position: absolute;
-    left: 50%;
-    bottom: -16px;
-    border: 8px solid transparent;
-    border-top-color: #fff;
-    width: 0;
-    height: 0;
-    margin-left: -8px;
-  }
-</style>
-
-<a class="notice-designers-material" href="http://www.google.com/design/spec/style/color.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Color<p>
-  </div>
-</a>
-
-<p>Use color primarily for emphasis. Choose colors that fit with your brand and provide good contrast
-between visual components. Note that red and green may be indistinguishable to color-blind users.</p>
-
-    <div class="color-row-container">
-      <ul class="color-row">
-        <li><span>#33b5e5</span></li>
-        <li><span>#aa66cc</span></li>
-        <li><span>#99cc00</span></li>
-        <li><span>#ffbb33</span></li>
-        <li><span>#ff4444</span></li>
-      </ul>
-    </div>
-
-    <div class="color-row-container">
-      <ul class="color-row">
-        <li class="thin"><span>#0099cc</span></li>
-        <li class="thin"><span>#9933cc</span></li>
-        <li class="thin"><span>#669900</span></li>
-        <li class="thin"><span>#ff8800</span></li>
-        <li class="thin"><span>#cc0000</span></li>
-      </ul>
-    </div>
-
-<h2 id="palette">Palette</h2>
-
-<p>Blue is the standard accent color in Android's color palette. Each color has a corresponding darker
-shade that can be used as a complement when needed.</p>
-<p><a onClick="ga('send', 'event', 'Design', 'Download', 'Color Swatches (@color page)');"
-      href="{@docRoot}downloads/design/Android_Design_Color_Swatches_20120229.zip">Download the swatches</a></p>
-
-<img src="{@docRoot}design/media/color_spectrum.png">
-
-<script>
-  $(document).ready(function() {
-    $('.color-row li').each(function() {
-      var color = $(this).text();
-      $(this).css('background-color', color);
-      $(this).find('span')
-          .css('color', color)
-          .text(color.toUpperCase());
-    });
-
-  });
-</script>
diff --git a/docs/html/design/style/devices-displays.jd b/docs/html/design/style/devices-displays.jd
index 1590363..caa77da 100644
--- a/docs/html/design/style/devices-displays.jd
+++ b/docs/html/design/style/devices-displays.jd
@@ -19,15 +19,15 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
+<div class="cols">
+  <div class="col-4">
 
 <h4>Be flexible</h4>
 
 <p>Stretch and compress your layouts to accommodate various heights and widths.</p>
 
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
 
 <h4>Optimize layouts</h4>
 
@@ -35,7 +35,7 @@
 multiple views to reveal more content and ease navigation.</p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
 <h4>Assets for all</h4>
 <p>Provide resources for different screen densities (<acronym title="Dots per inch">DPI</acronym>) to
diff --git a/docs/html/design/style/iconography.jd b/docs/html/design/style/iconography.jd
deleted file mode 100644
index e2cdf3f..0000000
--- a/docs/html/design/style/iconography.jd
+++ /dev/null
@@ -1,601 +0,0 @@
-page.title=Iconography
-page.tags="icons"
-meta.tags="icons, googleplay, listing, branding"
-page.titleFriendly=Guidelines for creating your app's icons
-@jd:body
-
-<img src="{@docRoot}design/media/iconography_overview.png">
-
-
-<p>An icon is a graphic that takes up a small portion of screen real estate and provides a quick,
-intuitive representation of an action, a status, or an app.</p>
-
-<p>When you design icons for your app, it's important to keep in mind that your
-app may be installed on a variety of devices that offer a range of
-pixel densities, as mentioned in
-<a href="{@docRoot}design/style/devices-displays.html">Devices
-and Displays</a>. But you can make your icons look great on all devices
-by providing each icon in multiple sizes. When your app runs, Android checks the characteristics of
-the device screen and loads the appropriate density-specific assets for your app. </p>
-
-<p>Because you will deliver each icon in multiple sizes to support different densities,
-the design guidelines below
-refer to the icon dimensions in <acronym title="density-independent pixels">dp</acronym>
-units, which are based on the pixel dimensions of a medium-density (MDPI) screen.</p>
-
-<img src="{@docRoot}design/media/devices_displays_density@2x.png" alt="" height="160" />
-
-<p>So, to create an icon for different densities, you should follow the <strong>2:3:4:6:8
-scaling ratio</strong> between the five primary densities (medium, high, x-high, xx-high, and
-xxx-high respectively). For example, consider that the size for a launcher icon is specified to be
-48x48 dp. This means the baseline (MDPI) asset is 48x48 px, and the
-high-density(HDPI) asset should be 1.5x the baseline at 72x72 px, and the x-high
-density (XHDPI) asset should be 2x the baseline at 96x96 px, and so on.</p>
-
-<p class="note"><strong>Note:</strong> Android also supports low-density (LDPI) screens,
-but you normally don't need to create custom assets at this size because Android
-effectively down-scales your HDPI assets by 1/2 to match the expected size.</p>
-
-
-
-
-<h2 id="launcher">Launcher</h2>
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/style/icons.html#icons-product-icons">
-  <div>
-    <h3>Material Design</h3>
-    <p>Product Icons<p>
-  </div>
-</a>
-
-<p>The launcher icon is the visual representation of your app on the Home or All Apps screen. Since the
-user can change the Home screen's wallpaper, make sure that your launcher icon is clearly visible on
-any type of background.</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_launcher_size.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_launcher_focal.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_launcher_style.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <h4>Sizes &amp; scale</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Launcher icons on a mobile device must be <strong>48x48 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
-      <li class="no-bullet with-icon web">
-        <p>Launcher icons for display on Google Play must be <strong>512x512 pixels</strong>.</p></li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <h4>Proportions</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Full asset, <strong>48x48 dp</strong></p>
-      </li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-<h4>Style</h4>
-<p>Use a distinct silhouette. Three-dimensional, front view, with a slight perspective as if viewed
-from above, so that users perceive some depth.</p>
-
-  </div>
-</div>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-    &nbsp;
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/iconography_launcher_example.png">
-
-  </div>
-  <!-- 2 free columns -->
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-12">
-
-    <img src="{@docRoot}design/media/iconography_launcher_example2.png">
-
-    <div class="vspace size-2">&nbsp;</div>
-
-  </div>
-  <!-- 1 free columns -->
-</div>
-
-
-<h2 id="action-bar">Action Bar</h2>
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/style/icons.html#icons-system-icons">
-  <div>
-    <h3>Material Design</h3>
-    <p>System Icons<p>
-  </div>
-</a>
-
-<p>
-
-Action bar icons are graphic buttons that represent the most important actions people can take
-within your app. Each one should employ a simple metaphor representing a single concept that most
-people can grasp at a glance.
-
-</p>
-<p>
-
-Pre-defined glyphs should be used for certain common actions such as "refresh" and "share." The
-download link below provides a package with icons that are scaled for various screen densities and
-are suitable for use with the Holo Light and Holo Dark themes. The package also includes unstyled
-icons that you can modify to match your theme, in addition to Adobe&reg; Illustrator&reg; source
-files for further customization.
-
-</p>
-<p>
-<a onClick="ga('send', 'event', 'Design', 'Download', 'Action Bar Icons (@iconography page)');"
-   href="{@docRoot}downloads/design/Android_Design_Icons_20131106.zip">Download the Action Bar Icon Pack</a>
-</p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_actionbar_size.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_actionbar_focal.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_actionbar_style.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <h4>Sizes &amp; scale</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Action bar icons for phones should be <strong>32x32 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <h4>Focal area &amp; proportions</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Full asset, <strong>32x32 dp</strong></p>
-        <p>Optical square, <strong>24x24 dp</strong></p>
-      </li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-<h4>Style</h4>
-<p>Pictographic, flat, not too detailed, with smooth curves or sharp shapes. If the graphic is thin,
-rotate it 45&deg; left or right to fill the focal space. The thickness of the strokes and negative
-spaces should be a minimum of 2 dp.</p>
-
-  </div>
-</div>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
-
-<h4>Colors</h4>
-<p>Colors: <strong>#333333</strong><br />
-Enabled: <strong>60%</strong> opacity<br />
-Disabled: <strong>30%</strong> opacity</p>
-<div class="vspace size-1">&nbsp;</div>
-
-<p>Colors: <strong>#FFFFFF</strong><br />
-Enabled: <strong>80%</strong> opacity<br />
-Disabled: <strong>30%</strong> opacity</p>
-
-  </div>
-  <div class="layout-content-col span-9">
-
-    <img src="{@docRoot}design/media/iconography_actionbar_colors.png">
-
-  </div>
-</div>
-
-
-<h2 id="small-contextual">Small / Contextual Icons</h2>
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/style/icons.html#icons-system-icons">
-  <div>
-    <h3>Material Design</h3>
-    <p>System Icons<p>
-  </div>
-</a>
-
-<p>Within the body of your app, use small icons to surface actions and/or provide status for specific
-items. For example, in the Gmail app, each message has a star icon that marks the message as
-important.</p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_small_size.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_small_focal.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_small_style.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <h4>Sizes &amp; scale</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Small icons should be <strong>16x16 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <h4>Focal area &amp; proportions</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Full asset, <strong>16x16 dp</strong></p>
-        <p>Optical square, <strong>12x12 dp</strong></p>
-      </li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-<h4>Style</h4>
-<p>Neutral, flat, and simple. Filled shapes are easier to see than thin strokes. Use a single visual
-metaphor so that a user can easily recognize and understand its purpose.</p>
-
-  </div>
-</div>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_small_colors.png">
-
-    <div class="vspace size-2">&nbsp;</div>
-
-<h4>Colors</h4>
-<p>Use non-neutral colors sparingly and with purpose. For example, Gmail uses yellow in the star icon
-to indicate a bookmarked message. If an icon is actionable, choose a color that contrasts well with
-the background.</p>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/iconography_small_example.png">
-
-  </div>
-  <!-- 2 free columns -->
-</div>
-
-
-<h2 id="notification">Notification Icons</h2>
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/style/icons.html#icons-system-icons">
-  <div>
-    <h3>Material Design</h3>
-    <p>System Icons<p>
-  </div>
-</a>
-
-
-<p>If your app generates notifications, provide an icon that the system can display in the status bar
-whenever a new notification is available.</p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_notification_size.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_notification_focal.png">
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <img src="{@docRoot}design/media/iconography_notification_style.png">
-
-  </div>
-</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-    <h4>Sizes &amp; scale</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Notification icons must be <strong>24x24 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-    <h4>Focal area &amp; proportions</h4>
-
-    <ul>
-      <li class="no-bullet with-icon tablet">
-        <p>Full asset, <strong>24x24 dp</strong></p>
-        <p>Optical square, <strong>22x22 dp</strong></p>
-      </li>
-    </ul>
-
-  </div>
-  <div class="layout-content-col span-4">
-
-<h4>Style</h4>
-<p>Keep the style flat and simple, using the same single, visual metaphor as your launcher icon.</p>
-
-  </div>
-</div>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-4">
-
-<h4>Colors</h4>
-<p>Notification icons must be entirely white. Also, the system may scale down and/or darken the icons.</p>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/iconography_notification_example.png">
-
-  </div>
-  <!-- 2 free columns -->
-</div>
-
-
-
-
-
-
-
-
-
-
-<h2 id="DesignTips">Design Tips</h2>
-
-<p>Here are some tips you might find useful as you create icons or other
-drawable assets for your application. These tips assume you are using
-Adobe&reg; Photoshop&reg; or a similar raster and vector image-editing program.</p>
-
-
-
-
-<h3>Use vector shapes where possible</h3>
-
-<p>Many image-editing programs such as Adobe&reg; Photoshop&reg; allow you to use a
-combination of vector shapes and raster layers and effects. When possible,
-use vector shapes so that if the need arises, assets can be scaled up without
-loss of detail and edge crispness.</p>
-
-<p>Using vectors also makes it easy to align edges and corners to pixel
-boundaries at smaller resolutions.</li>
-
-
-
-<h3>Start with large artboards</h3>
-
-<p>Because you will need to create assets for different screen densities,
-it is best to start your icon
-designs on large artboards with dimensions that are multiples of the target icon
-sizes. For example, launcher icons are 48, 72, 96, or 144 pixels wide,
-depending on screen density (mdpi, hdpi, xhdpi, and xxhdpi, respectively). If you
-initially draw launcher icons on an 864x864 artboard, it will be easier and
-cleaner to adjust the icons when you scale the artboard down to the target
-sizes for final asset creation.</p>
-
-
-
-<h3>When scaling, redraw bitmap layers as needed</h3>
-
-<p>If you scaled an image up from a bitmap layer, rather than from a vector
-layer, those layers will need to be redrawn manually to appear crisp at higher
-densities. For example if a 60x60 circle was painted as a bitmap for
-mdpi it will need to be repainted as a 90x90 circle for hdpi.</p>
-
-
-
-<h3>Use common naming conventions for icon assets</h3>
-
-<p>Try to name files so that related assets will group together inside a
-directory when they are sorted alphabetically. In particular, it helps to use a
-common prefix for each icon type. For example:</p>
-
-<table>
-<tr>
-<th>Asset Type</th>
-<th>Prefix</th>
-<th>Example</th>
-</tr>
-<tr>
-<td>Icons</td>
-<td><code>ic_</code></td>
-<td><code>ic_star.png</code></td>
-</tr>
-<tr>
-<td>Launcher icons</td>
-<td><code>ic_launcher</code></td>
-<td><code>ic_launcher_calendar.png</code></td>
-</tr>
-<tr>
-<td>Menu icons and Action Bar icons</td>
-<td><code>ic_menu</code></td>
-<td><code>ic_menu_archive.png</code></td>
-</tr>
-<tr>
-<td>Status bar icons</td>
-<td><code>ic_stat_notify</code></td>
-<td><code>ic_stat_notify_msg.png</code></td>
-</tr>
-<tr>
-<td>Tab icons</td>
-<td><code>ic_tab</code></td>
-<td><code>ic_tab_recent.png</code></td>
-</tr>
-<tr>
-<td>Dialog icons</td>
-<td><code>ic_dialog</code></td>
-<td><code>ic_dialog_info.png</code></td>
-</tr>
-</table>
-
-<p>Note that you are not required to use a shared prefix of any
-type&mdash;doing so is for your convenience only.</p>
-
-
-<h3>Set up a working space that organizes files by density</h3>
-
-<p>Supporting multiple screen densities means you must create multiple versions
-of the same icon. To help keep the multiple copies of files safe and easier to
-find, we recommend creating a directory structure in your working space that
-organizes asset files based on the target density. For example:</p>
-
-<pre>
-art/...
-    mdpi/...
-        _pre_production/...
-            <em>working_file</em>.psd
-        <em>finished_asset</em>.png
-    hdpi/...
-        _pre_production/...
-            <em>working_file</em>.psd
-        <em>finished_asset</em>.png
-    xhdpi/...
-        _pre_production/...
-            <em>working_file</em>.psd
-        <em>finished_asset</em>.png
-    xxhdpi/...
-        _pre_production/...
-            <em>working_file</em>.psd
-        <em>finished_asset</em>.png
-</pre>
-
-<p>Because the structure in your working space is similar to that of the application, you
-can quickly determine which assets should be copied to each
-resources directory. Separating assets by density also helps you detect any
-variances in filenames across densities, which is important because
-corresponding assets for different densities must share the same filename.</p>
-
-<p>For comparison, here's the resources directory structure of a typical
-application: </p>
-
-<pre>res/...
-    drawable-ldpi/...
-        <em>finished_asset</em>.png
-    drawable-mdpi/...
-        <em>finished_asset</em>.png
-    drawable-hdpi/...
-        <em>finished_asset</em>.png
-    drawable-xhdpi/...
-        <em>finished_asset</em>.png
-    drawable-xxhdpi/...
-        <em>finished_asset</em>.png
-
-    mipmap-ldpi/...
-        <em>finished_launcher_asset</em>.png
-    mipmap-mdpi/...
-        <em>finished_launcher_asset</em>.png
-    mipmap-hdpi/...
-        <em>finished_launcher_asset</em>.png
-    mipmap-xhdpi/...
-        <em>finished_launcher_asset</em>.png
-    mipmap-xxhdpi/...
-        <em>finished_launcher_asset</em>.png
-    mipmap-xxxhdpi/...
-        <em>finished_launcher_asset</em>.png
-</pre>
-
-<p>For more information about how to save resources in the application project,
-see <a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a>.
-</p>
-
-<p> For more information about using the mipmap folders, see
-<a href="{@docRoot}tools/projects/index.html#mipmap">Managing Projects Overview</a>.</p>
-
-<h3 id="xxxhdpi-launcher">Provide an xxx-high-density launcher icon</h3>
-
-<p>Some devices scale-up the launcher icon by as much as 25%. For example, if your highest density
-launcher icon image is already extra-extra-high density, the scaling process will make it appear
-less crisp. So you should provide a higher density launcher icon in the <code>mipmap-xxxhdpi
-</code> directory, which the system uses instead of scaling up a smaller version of the icon.</p>
-
-<p class="note"><strong>Note:</strong> The <code>mipmap-xxxhdpi</code> qualifier is necessary
-only to provide a launcher icon that can appear larger than usual on an xxhdpi device. It is best
-practice to place all your launcher icons in the <code>res/mipmap-[density]/</code> folders. This
-enables your app to display launcher icons that have a higher density than the device, without
-scaling up a lower density version of the icon. You do not need to provide xxxhdpi assets for all
-your app's images.</p>
-
-<p>See <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> for
-more information.</p>
-
-
-<h3>Remove unnecessary metadata from final assets</h3>
-
-<p>Although the Android SDK tools will automatically compress PNGs when packaging
-application resources into the application binary, a good practice is to remove
-unnecessary headers and metadata from your PNG assets. Tools such as <a
-href="http://optipng.sourceforge.net/">OptiPNG</a> or <a
-href="http://pmt.sourceforge.net/pngcrush/">Pngcrush</a> can ensure that this
-metadata is removed and that your image asset file sizes are optimized.</p>
-
-
diff --git a/docs/html/design/style/metrics-grids.jd b/docs/html/design/style/metrics-grids.jd
deleted file mode 100644
index d7b5f78..0000000
--- a/docs/html/design/style/metrics-grids.jd
+++ /dev/null
@@ -1,90 +0,0 @@
-page.title=Metrics and Grids
-page.metaDescription=Optimize your app's UI by designing layouts based on density-independent grids.
-page.tags="layout","screens"
-meta.tags="multiple screens, layout, tablets"
-page.image=/design/media/metrics_closeup.png
-@jd:body
-
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/layout/metrics-keylines.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Metrics and Keylines<p>
-  </div>
-</a>
-
-
-<p>Devices vary not only in physical size, but also in screen density (<acronym title="Dots per
-inch">DPI</acronym>). To simplify the way you design for multiple screens, think of each device as
-falling into a particular size bucket and density bucket:</p>
-<ul>
- <li>The size buckets are <em>handset</em> (smaller than
-600<acronym title="Density-independent pixels: One dp is one pixel on a 160 dpi (mdpi)
-screen.">dp</acronym>) and <em>tablet</em> (larger than or equal 600dp).</li>
- <li>The density buckets are <acronym
-title="Low density (120 dpi)">LDPI</acronym>, <acronym title="Medium density (160
-dpi)">MDPI</acronym>, <acronym title="High density (240 dpi)">HDPI</acronym>, <acronym title
-="Extra-high density (320 dpi)">XHDPI</acronym>, <acronym title
-="Extra-extra!-high density (480 dpi)">XXHDPI</acronym>, and <acronym title
-="Extra-extra-extra!-high density (640 dpi)">XXXHDPI</acronym>.</li>
-</ul>
-
-<p>Optimize your application's UI by designing
-alternative layouts for some of the different size buckets, and provide alternative bitmap images
-for different density buckets.</p>
-
-<p>Because it's important that you design and implement your layouts for multiple densities,
-the guidelines below and throught the documentation
-refer to layout dimensions with <acronym title="Density-independent pixels: One dp is one pixel
-on a 160 dpi (mdpi) screen.">dp</acronym> measurements instead of pixels.</p>
-
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/metrics_diagram.png">
-
-  </div>
-  <div class="layout-content-col span-5">
-
-<h4>Space considerations</h4>
-<p>Devices vary in the amount of density-independent pixels (dp) they can display.</p>
-<p>To see more, visit the
-<a href="http://developer.android.com/resources/dashboard/screens.html" target="_blank">
-Screen Sizes and Densities Device Dashboard</a>.</p>
-
-  </div>
-</div>
-
-
-<h2 id="48dp-rhythm">48dp Rhythm</h2>
-
-<p>Touchable UI components are generally laid out along 48dp units.</p>
-
-<img src="{@docRoot}design/media/metrics_48.png">
-
-<div class="vspace size-2">&nbsp;</div>
-
-<h4>Why 48dp?</h4>
-<p>On average, 48dp translate to a physical size of about 9mm (with some variability). This is
-comfortably in the range of recommended target sizes (7-10 mm) for touchscreen objects and users
-will be able to reliably and accurately target them with their fingers.</p>
-<p>If you design your elements to be at least 48dp high and wide you can guarantee that:</p>
-<ul>
-<li>your targets will never be smaller than the minimum recommended target size of 7mm regardless of
-  what screen they are displayed on.</li>
-<li>you strike a good compromise between overall information density on the one hand, and
-  targetability of UI elements on the other.</li>
-</ul>
-
-<img src="{@docRoot}design/media/metrics_closeup.png">
-
-<div class="vspace size-2">&nbsp;</div>
-
-<h4>Mind the gaps</h4>
-<p>Spacing between each UI element is 8dp.</p>
-
-<h2 id="examples">Examples</h2>
-
-<img src="{@docRoot}design/media/metrics_forms.png">
diff --git a/docs/html/design/style/themes.jd b/docs/html/design/style/themes.jd
deleted file mode 100644
index 3313a2b..0000000
--- a/docs/html/design/style/themes.jd
+++ /dev/null
@@ -1,53 +0,0 @@
-page.title=Themes
-@jd:body
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-5">
-
-    <img src="{@docRoot}design/media/themes_holo_light.png">
-    <div class="figure-caption">
-      Gmail in Holo Light.
-    </div>
-
-    <img src="{@docRoot}design/media/themes_holo_dark.png">
-    <div class="figure-caption">
-      Settings in Holo Dark.
-    </div>
-
-  </div>
-  <div class="layout-content-col span-7">
-
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/style/color.html#color-themes">
-  <div>
-    <h3>Material Design</h3>
-    <p>Color Themes<p>
-  </div>
-</a>
-
-
-<p>Themes are Android's mechanism for applying a consistent style to an app or activity.
-The style specifies the visual properties of the elements that make up your user interface,
-such as color, height, padding and font size. To promote greater cohesion between all apps
-on the platform, Android provides two system themes that you can choose from when building apps:</p>
-<ul>
-<li>Holo Light</li>
-<li>Holo Dark</li>
-</ul>
-<p>Applying these themes will go a long way in helping you to build apps that fit right into the
-general visual language of Android.</p>
-<p>Pick the system theme that best matches the needs and design aesthetics for your app. If your
-desire is to have a more distinct look for your app, using one of the system themes as a starting
-point for your customizations is a good idea. The system themes provide a solid foundation on top
-of which you can selectively implement your own visual stylings.</p>
-
-<div class="note develop">
-<p><strong>Developer Guide</strong></p>
-  <p>For information about how to apply themes such as Holo Light and Dark, and
-  how to build your own themes, see the
-  <a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a> API guide.</p>
-</div>
-
-  </div>
-</div>
diff --git a/docs/html/design/style/touch-feedback.jd b/docs/html/design/style/touch-feedback.jd
deleted file mode 100644
index b6d6407..0000000
--- a/docs/html/design/style/touch-feedback.jd
+++ /dev/null
@@ -1,95 +0,0 @@
-page.title=Touch Feedback
-page.tags=input,button
-@jd:body
-
-<div class="layout-content-row" style="margin-bottom: -100px">
-<div class="layout-content-col span-7">
-
-<a class="notice-designers-material"
-  href="http://www.google.com/design/spec/animation/responsive-interaction.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Responsive Interaction<p>
-  </div>
-</a>
-
-
-<p>Use illumination and dimming to respond to touches, reinforce the resulting behaviors
-of gestures, and indicate what actions are enabled and disabled.</p>
-
-<p><strong>Be responsive to touches in a gentle way</strong>. Whenever a user touches an
-actionable area in your app, let them know the app is "listening" by providing a visual
-response. Make it subtle &mdash;just slightly lighter or darker than the untouched color. This
-provides two benefits:</p>
-
-<ul>
-<li><a href="{@docRoot}design/get-started/principles.html#sprinkle-encouragement">Sprinkles
-of encouragement</a> are more pleasant than jolts.</li>
-<li>Incorporating <a href="{@docRoot}design/style/branding.html">your branding</a> is much
-easier because the default touch feedback works with whatever hue you choose.</li>
-</ul>
-
-</div>
-
-<div class="layout-content-col span-6" style="float:right;">
-  <video  class="play-on-hover" width="268" height="442" autoplay style="border:1px solid #ddd;background-color:#f9f9f9;" poster="">
-    <source src="{@docRoot}design/media/touch_feedback.mp4" type="video/mp4">
-    <source src="{@docRoot}design/media/touch_feedback.webm" type="video/webm">
-    <source src="{@docRoot}design/media/touch_feedback.ogv" type="video/ogg">
-  </video>
-  <div class="figure-caption">
-    <div style="color:#a3a3a3;margin-left:130px;"><em>Click image to replay...</em></div>
-  </div>
-</div>
-
-<h4 style="clear:both;">States</h4>
-
-
-<div class="vspace size-1">&nbsp;</div>
-
-<img src="{@docRoot}design/media/touch_feedback_states.png">
-<div class="figure-caption">
-  Most of Android's UI elements have touch feedback built in, including
-  states that indicate whether touching the element will have any effect.
-</div>
-
-<div class="vspace size-3">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-    <h4>Communication</h4>
-<p>When your objects react to more complex gestures, help users
-understand what the outcome will be.</p>
-
-<p>In Recents, when a user starts swiping a thumbnail left or right, it
-begins to dim. This helps the user understand that swiping will cause the
-item to be removed.</p>
-  </div>
-  <div class="layout-content-col span-7">
-
-    <img src="{@docRoot}design/media/touch_feedback_manipulation.png">
-
-  </div>
-</div>
-<div class="vspace size-3">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-    <img src="{@docRoot}design/media/touch_feedback_communication.png">
-    <p><em>If a user attempts to scroll past the last home screen panel, the screen
-    content tilts to the right to indicate that further navigation in this direction
-    isn’t possible.</em></p>
-
-  </div>
-  <div class="layout-content-col span-6">
-
-<h4>Boundaries</h4>
-<p>
-  When users try to scroll past the beginning or end of a scrollable area,
-  communicate the boundary with a visual cue. Many of Android's scrollable UI
-  widgets, like lists and grid lists, have support for boundary feedback built
-  in. If you’re building custom widgets, keep boundary feedback in mind and
-  provide it from within your app.
-</p>
diff --git a/docs/html/design/style/typography.jd b/docs/html/design/style/typography.jd
deleted file mode 100644
index 2f8e91b..0000000
--- a/docs/html/design/style/typography.jd
+++ /dev/null
@@ -1,78 +0,0 @@
-page.title=Typography
-page.tags="textview","font"
-page.metaDescription=How to use typography in your Android apps.
-@jd:body
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-8">
-
-    <img src="{@docRoot}design/media/typography_main.png">
-
-  </div>
-
-<a class="notice-designers-material"
-  style="width: 278px;"
-  href="http://www.google.com/design/spec/style/typography.html">
-  <div>
-    <h3>Material Design</h3>
-    <p>Typography<p>
-  </div>
-</a>
-
-<div class="layout-content-col span-5">
-
-<p>
-  <a class="download-button"  onClick="ga('send', 'event', 'Design', 'Download', 'Roboto ZIP');"
-    href="{@docRoot}downloads/design/roboto-1.2.zip">Download Roboto</a>
-</p>
-
-<p>The Android design language relies on traditional typographic tools such as scale, space, rhythm,
-and alignment with an underlying grid. Successful deployment of these tools is essential to help
-users quickly understand a screen of information. To support such use of typography, Ice Cream
-Sandwich introduced a new type family named
-<a href="http://www.google.com/fonts/specimen/Roboto" class="external-link">Roboto</a>, created
-specifically for the requirements of UI and high-resolution screens.</p>
-
-<p>The current {@link android.widget.TextView} framework offers Roboto in thin, light, regular and bold
-weights, along with an italic style for each weight. The framework also offers the
-<a href="http://www.google.com/fonts/specimen/Roboto+Condensed" class="external-link">Roboto Condensed</a>
-variant in regular and bold weights, along with an italic style for each weight.</p>
-
-    <img src="{@docRoot}design/media/typography_variants@2x.png" width="220">
-
-<p><a onClick="ga('send', 'event', 'Design', 'Download', 'Roboto Specimen Book (@typography page)');"
-      href="{@docRoot}downloads/design/Roboto_Specimen_Book_20131031.pdf">Specimen Book</a></p>
-
-  </div>
-</div>
-
-<hr>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
-
-<h4>Default type colors</h4>
-<p>The Android UI uses the following default color styles: <code>textColorPrimary</code> and
-<code>textColorSecondary</code>. For light themes use <code>textColorPrimaryInverse</code> and
-<code>textColorSecondaryInverse</code>. The framework text color styles also support variants for
-touch feedback states when used inside UI elements.</p>
-
-    <img src="{@docRoot}design/media/typography_defaults.png">
-
-  </div>
-  <div class="layout-content-col span-6">
-
-<h4>Typographic Scale</h4>
-<p>Contrast in type sizes can go a long way to create ordered, understandable layouts. However, too
-many different sizes in the same UI can be messy. The Android framework uses the following limited
-set of type sizes:</p>
-
-<img src="{@docRoot}design/media/typography_sizes.png">
-
-<p>Users can select a system-wide scaling factor for text in the Settings app. In order to support
-these accessibility features, type should be specified in scale-independent pixels
-(<acronym title="Scale-independent pixels. One sp is one pixel on a 160 dpi screen if the user's global text scale is set to 100%.">sp</acronym>)
-wherever possible. Layouts supporting scalable types should be tested against these settings.</p>
-
-  </div>
-</div>
diff --git a/docs/html/design/style/writing.jd b/docs/html/design/style/writing.jd
deleted file mode 100644
index 4f62253..0000000
--- a/docs/html/design/style/writing.jd
+++ /dev/null
@@ -1,322 +0,0 @@
-page.title=Writing Style
-page.tags=dialog,toast,notification
-@jd:body
-
-<h2 id="voa">Android's Voice</h2>
-
-<p>When writing text that appears in your app, keep it concise, simple, and friendly.</p>
-
-<h4 id="concise">Concise</h4>
-
-<ul>
-  <li>Describe only what the user needs to know.</li>
-  <li>Eliminate redundancy, such as titles that restate the body of an information box.</li>
-  <li>Keep text as short as possible.</li>
-</ul>
-
-<p><em>Avoid wordy, stilted text</em></p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6 layout-with-list-item-margins">
-
-    <div class="do-dont-label bad">Don't</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    Consult the documentation that came with your phone for further instructions.
-    </td></tr></tbody></table>
-
-  </div>
-  <div class="layout-content-col span-6">
-
-    <div class="do-dont-label good">Do</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    Read the instructions that came with your phone.
-    </td></tr></tbody></table>
-
-  </div>
-</div>
-
-<p><em>Don't provide unnecessary information</em></p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6 layout-with-list-item-margins">
-
-    <div class="do-dont-label bad">From a Setup Wizard screen</div>
-
-    <table class="ui-table bad">
-    <thead>
-      <tr>
-        <th>
-        Signing in...
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td>
-        Your phone needs to communicate with<br>
-        Google servers to sign in to your account.<br>
-        This may take up to five minutes.
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-6">
-
-    <div class="do-dont-label good">From a Setup Wizard screen</div>
-
-    <table class="ui-table good">
-    <thead>
-      <tr>
-        <th>
-        Signing in...
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td>
-        Your phone is contacting Google.<br>
-        This can take up to 5 minutes.
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-</div>
-
-<h4 id="simple">Simple</h4>
-
-<ul>
-  <li>Use short words, active verbs, and common nouns.</li>
-  <li>Put the most important thing first. “Front-load” the first 11 characters
-      with the most salient information in the string.</li>
-  <li>Don’t try to explain subtle differences. They are lost on most users.</li>
-</ul>
-
-<p><em>Focus on the user's concern, not technical details</em></p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6 layout-with-list-item-margins">
-
-    <div class="do-dont-label bad">Don't</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    Manually control GPS to prevent other apps from using it
-    </td></tr></tbody></table>
-
-  </div>
-  <div class="layout-content-col span-6">
-
-    <div class="do-dont-label good">Do</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    To save power, switch Location mode to Battery saving
-    </td></tr></tbody></table>
-
-  </div>
-</div>
-
-<p><em>Put top news first</em></p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6 layout-with-list-item-margins">
-
-    <div class="do-dont-label bad">Don't</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    77 other people +1’d this, including Larry Page
-    </td></tr></tbody></table>
-
-  </div>
-  <div class="layout-content-col span-6">
-
-    <div class="do-dont-label good">Do</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    Larry Page and 76 others +1’d this
-    </td></tr></tbody></table>
-
-  </div>
-</div>
-
-<p><em>Put the user's goal first</em></p>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-6 layout-with-list-item-margins">
-
-    <div class="do-dont-label bad">Don't</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    Touch Next to complete setup using a Wi-Fi connection
-    </td></tr></tbody></table>
-
-  </div>
-  <div class="layout-content-col span-6">
-
-    <div class="do-dont-label good">Do</div>
-
-    <table class="ui-table good"><tbody><tr><td>
-    To finish setup using Wi-Fi, touch Next
-    </td></tr></tbody></table>
-
-  </div>
-</div>
-
-
-<h4 id="friendly">Friendly</h4>
-
-<ul>
-  <li>Use contractions.</li>
-  <li>Talk directly to the reader. Use “you”  to refer to the reader.</li>
-  <li>Keep your tone casual and conversational, but avoid slang.</li>
-</li>
-</ul>
-
-<p><em>Avoid being confusing or annoying</em></p>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6 layout-with-list-item-margins">
-    <div class="do-dont-label bad">Don't</div>
-    <table class="ui-table bad">
-    <thead>
-      <tr>
-        <th>
-        Sorry!
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td>
-        Activity MyAppActivity (in application<br />
-        MyApp) is not responding
-        </td>
-      </tr>
-    </tbody>
-    </table>
-
-  </div>
-  <div class="layout-content-col span-6">
-    <div class="do-dont-label good">Do</div>
-    <table class="ui-table good">
-    <thead>
-      <tr>
-        <th>
-        MyApp isn’t responding 
-        </th>
-      </tr>
-    </thead>
-    <tbody>
-      <tr>
-        <td>
-        Do you want to close it?
-        </td>
-      </tr>
-    </tbody>
-    </table>
-  </div>
-</div>
-
-
-<h4>Words to avoid</h4>
-
-<div style="padding:5px 2.1em;">
-<table>
-  <tr>
-    <td class="do-dont-label bad" style="width:40%">Don't use</td>
-    <td class="do-dont-label good" style="width:40%">Use</td>
-  </tr>
-  <tr>
-    <td>one, two, three, four, ...</td>
-    <td>1, 2, 3, 4, ...</td>
-  </tr>
-  <tr>
-    <td>application</td>
-    <td>app</td>
-  </tr>
-  <tr>
-    <td>cannot, could not, do not, did not 
-will not, you will</td>
-    <td><em>Contractions:</em> can’t, couldn’t, don’t, didn’t won’t, you’ll, and so on</td>
-  </tr>
-    <tr>
-    <td>okay, ok</td>
-    <td>OK</td>
-  </tr>
-  <tr>
-    <td>please, sorry, thank you</td>
-    <td><em>Attempts at politeness can annoy the user, especially in messages that say
-        something has gone wrong.<br />
-        Exception: In Japanese, “please” is mandatory and imperative verbs should
-        be localized accordingly (turn on -> please turn on).
-        </em></td>
-  </tr>
-    <tr>
-    <td>there is, there are, it is<br />
-        <em>and other “disappeared” subjects (grammatical expletives)</em></td>
-    <td><em>Use a noun as the subject</em></td>
-  </tr>
-  <tr>
-    <td>abort, kill, terminate</td>
-    <td>stop, cancel, end, exit</td>
-  </tr>
-    <tr>
-    <td>fail, failed, <em>negative language</em></td>
-    <td><em>In general, use positive phrasing<br />
-        (for example, “do” rather than “don’t,” except in cases such as “Don’t show
-        again,” “Can’t connect,” and so on.)</em></td>
-  </tr>
-  <tr>
-    <td>me, I, my, mine</td>
-    <td>you, your, yours</td>
-  </tr>
-    <tr>
-    <td>Are you sure? Warning!</td>
-    <td><em>Tell user the consequence instead, for example, “You’ll lose all photos 
-        and media”</em></td>
-  </tr>
-</table>
-
-</div>
-
-<h2 id="formatting_text">Formatting text</h2>
-
-<h4 id="capitalization">Capitalization</h4>
-
-<ul>
-  <li>Use sentence-style capitalization for all UI strings: “Words to live by.”</li>
-  <li>Capitalize all important words in: 
-    <ul>
-      <li>App names (Calendar, Google Drive)</li>
-      <li>Named features (Android Beam, Face Unlock)</li>
-      <li>Proper nouns (Statue of Liberty, San Francisco Giants)</li>
-    </ul>
-  </li>
-  <li>Be conservative. Don't capitalize words that aren't part of a formal feature name: 
-    <ul>
-      <li>Sim card lock, Home screen, not Sim Card Lock, Home Screen.</li>
-    </ul>
-  </li>
-</ul>
-
-
-<h4 id="punctuation">Punctuation</h4>
-<ul>
-  <li><strong>Period.</strong> Don't use a period after a single sentence or
-  phrase used in isolation, such as in a toast, label, or notification. Wherever two or
-  more sentences run together, use a period for each sentence. </li>
-  <li><strong>Ellipsis.</strong> Use the ellipsis character (…) (Option-; on MacOS and &amp;hellip;
-    in HTML) to indicate 
-    <ul>
-      <li>Incompleteness, such as an action in progress (“Downloading...”) or truncated text.</li>
-      <li>That a menu item (such as Print… or Share…) leads to further UI involving significant
-        choices. Exception: Commands whose wording already implies further (but limited) UI, such
-        as <strong>Find in page</strong> or <strong>Pick a date</strong>, do not require an
-        ellipsis. </li>
-    </ul>
-  </li>
-</ul>
diff --git a/docs/html/design/tv/patterns.jd b/docs/html/design/tv/patterns.jd
index e786ee5..ccec285 100644
--- a/docs/html/design/tv/patterns.jd
+++ b/docs/html/design/tv/patterns.jd
@@ -43,8 +43,8 @@
 </a>. For a visual overview of recommendations, see <a href="design/tv/index.html#recommendations">
 Design for Android TV</a>.</p>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-8 with-callouts">
+<div class="cols">
+  <div class="col-8 with-callouts">
 
   <p>The design elements of the recommendation card are as follows:</p>
   <ol>
@@ -61,7 +61,7 @@
   Recommendations</a> for more information.</p>
 
   </div>
-  <div class="layout-content-col span-5">
+  <div class="col-5">
 
     <img src="{@docRoot}images/tv/recommend-card.png">
 
diff --git a/docs/html/design/videos/index.jd b/docs/html/design/videos/index.jd
deleted file mode 100644
index 976767d..0000000
--- a/docs/html/design/videos/index.jd
+++ /dev/null
@@ -1,130 +0,0 @@
-page.title=Videos
-@jd:body
-
-<p>The Android Design Team presents design-oriented sessions at Google I/O every year. Visit these pages to view the videos and presentations from the conferences.</p>
-
-<img src="{@docRoot}images/home/io-logo-2013-alt.png">
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="design-for-success"><a href="https://developers.google.com/events/io/2013/sessions/326368573">Enchant, Simplify, Amaze: Android's Design Principles</a></h3>
-    <p>Want to enchant people, simplify their lives, and make them feel amazing with your app? Learn how Android's Design Principles can help you create products that resonate with people. Find out about the meaning and research behind the principles. See real-world examples and practices from the Android Design team. Discover techniques for applying the principles in your daily work. No design experience necessary.</p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/s0HIP8EdlnE" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="design-for-success"><a href="https://developers.google.com/events/io/2013/sessions/326301704">Structure in Android App Design</a></h3>
-    <p>Life is simple when your app is simple. But when your apps gets more complex, how do you choose between spinners, tabs, and drawers for navigation? Members of the Android Design team look at techniques for making your app predictable and pleasing to use.</p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/XpqyiBR0lJ4" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="design-for-success"><a href="https://developers.google.com/events/io/2013/sessions/326425499">Fireside Chat with the Android Team</a></h3>
-    <p>Pull up a chair and join the Android platform team for a fireside chat. It's your opportunity to ask us about the platform and learn a little bit more about why things work the way they do, from the people who built it. </p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/A5OOJDIrYls" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="design-for-success"><a href="https://developers.google.com/events/io/2013/sessions/326483138">Agile UX Research Practice in Android</a></h3>
-    <p>In the Android UX team, it is critical to get user feedback frequently and consistently so that we are able to iterate and develop the best-in-class designs for our users. We will discuss how the team applied "Pulse Studies" (iterative research sessions) in order to put new ideas, designs, and concepts in front of users on a regular basis; it requires minimal advance planning, it can have an immediate product impact, and it can meet urgent needs. </p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/6MOeVNbh9cY" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="design-for-success"><a href="https://developers.google.com/events/io/2013/sessions/326460111">Cognitive Science and Design</a></h3>
-    <p>This session will provide an in-depth look at human perception and cognition, and its implications for interactive and visual design. The human brain is purely treated as an information processing machine, and we will teach the audience its attributes, its advantages, its limitations, and generally how to hack it. </p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/z2exxj4COhU" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<img src="{@docRoot}design/media/extras_googleio_12.png">
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="design-for-success"><a href="https://developers.google.com/events/io/sessions/gooio2012/112/">Android Design for Success</a></h3>
-    <p>You have a great idea for an Android app. You want it to stand out among hundreds of thousands. You want your users to love it and tell everyone they know. The Android User Experience team is here to help. We talk about the Android Design guide and other tricks of the trade for creating apps that delight users and help them accomplish their goals. No design background is required.</p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/2NL_83EG0no" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="design-for-engineers"><a href="https://developers.google.com/events/io/sessions/gooio2012/1204/">Android Design for Engineers</a></h3>
-    <p>Design isn't black magic, it's a field that people can learn. In this talk two elite designers from Google give you an advanced crash course in interactive and visual design. Topics include mental models, natural mappings, metaphors, mode errors, visual hierarchies, typography and gestalt principles. Correctly applied, this knowledge can drastically improve the quality of your work.</p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/iJDoxOTyMdk" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="navigation-in-android"><a href="https://developers.google.com/events/io/sessions/gooio2012/114/">Navigation in Android</a></h3>
-    <p>An app is useless if people can't find their way around it. Android introduced big navigation-support changes in 3.0 and 4.0. The Action Bar offers a convenient control for Up navigation, the Back key's behavior became more consistent within tasks, and the Recent Tasks UI got an overhaul. In this talk, we discuss how and why we got where we are today, how to think about navigation when designing your app's user experience, and how to write apps that offer effortless navigation in multiple Android versions.</p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/XwGHJJYBs0Q" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="now-what"><a href="https://developers.google.com/events/io/sessions/gooio2012/115/">So You've Read the Design Guide&#59; Now What?</a></h3>
-    <p>The Android Design Guide describes how to design beautiful Android apps, but not how to build them. In this talk we give practical tips for how to apply fit &amp; finish as you implement your design, we show you how to avoid some common pitfalls, we describe some useful patterns, and show how tools can help.</p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/2jCVmfCse1E" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<div class="vspace size-2">&nbsp;</div>
-
-<div class="layout-content-row">
-  <div class="layout-content-col span-7">
-    <h3 id="playing-with-patterns"><a href="https://developers.google.com/events/io/sessions/gooio2012/131/">Playing with Patterns</a></h3>
-    <p>Best-in-class application designers and developers talk about their experience in developing for Android, showing screenshots from their app, exploring the challenges they faced, and offering creative solutions congruent with the Android Design guide. Guests are invited to show examples of visual and interaction patterns in their application that manage to keep it simultaneously consistent and personal.</p>
-  </div>
-  <div class="layout-content-col span-6">
-    <iframe width="355" height="200" src="//www.youtube.com/embed/8iUbr8RZKtg" frameborder="0" allowfullscreen=""></iframe>
-  </div>
-</div>
-
-<p>Videos for the entire Design Track can also be found on the <a href="http://www.youtube.com/playlist?list=PL54FA004D676C3EE9">Android Developers Channel</a> on YouTube.</p>
diff --git a/docs/html/design/wear/creative-vision.jd b/docs/html/design/wear/creative-vision.jd
index a879cf9..0955240 100644
--- a/docs/html/design/wear/creative-vision.jd
+++ b/docs/html/design/wear/creative-vision.jd
@@ -2,17 +2,19 @@
 @jd:body
 
 <style>
-div.span-13 {
-  margin:10px 0;
+.page-vision  {
+  float: left;
+  margin: 10px 0;
+  width: 100%;
 }
-div.span-13 img {
+.page-vision img {
   float:left;
   margin:2px 20px 40px 0;
 }
-div.span-13 p {
+.page-vision p {
   margin-left:167px;
 }
-div.span-13 h2 {
+.page-vision h2 {
   margin-top:0;
   }
 </style>
@@ -22,28 +24,28 @@
 Wear experiences are:</p>
 
 
-  <div class="layout-content-col span-13">
+  <div class="page-vision">
     <img src="{@docRoot}design/media/wear/vision_traffic.png" width="147" height="147" />
 
     <h2 id="Launched">Launched automatically</h2>
     <p>Most people are used to launching apps by clicking an icon. Android Wear is different. Wearable apps are aware of the user’s context - time, location, physical activity, and so on. The apps use this information to insert cards into the stream when they become relevant. This makes Android Wear timely, relevant and very specific.</p>
   </div>
 
-  <div class="layout-content-col span-13">
+  <div class="page-vision">
     <img src="{@docRoot}design/media/wear/vision_navigation.png" width="147" height="147" />
 
     <h2 id="Glanceable">Glanceable</h2>
     <p>A classic wrist watch is designed to let you see the time in a split second and get on with what you were doing. Designing for Android Wear is no different. The less time it takes to use your software, the more time the user can be present in whatever they are doing. Android wear is fast, sharp, and immediate.</p>
   </div>
 
-  <div class="layout-content-col span-13">
+  <div class="page-vision">
     <img src="{@docRoot}design/media/wear/vision_voice.png" width="147" height="147" style="border: 1px solid #ddd;" />
 
     <h2 id="SuggestDemand">All about suggest and demand</h2>
     <p>Android Wear is like a great personal assistant: it knows you and your preferences, it only interrupts you when absolutely necessary, and it’s always on hand to provide a ready answer. Android Wear is helpful, respectful, and responsive.</p>
   </div>
 
-  <div class="layout-content-col span-13">
+  <div class="page-vision">
     <img src="{@docRoot}design/media/wear/vision_music.png" width="147" height="147" />
 
     <h2 id="Interaction">Zero or low interaction</h2>
diff --git a/docs/html/design/wear/style.jd b/docs/html/design/wear/style.jd
index abd3a9a..bb559fe 100644
--- a/docs/html/design/wear/style.jd
+++ b/docs/html/design/wear/style.jd
@@ -21,26 +21,26 @@
 
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
 
   <img src="{@docRoot}design/media/wear/assets_specifics.png" width="300"
     style="margin:32px 0 20px;">
   </div>
-  <div class="layout-content-col span-7">
+  <div class="col-7">
   <h2 id="Assets" style="clear:both">Specific Assets Required</h2>
 
   <p>A core set of standard assets may need to be provided depending on your card design: app icon, background image or images, action icons, and action confirmation animations. Of course, your specific design may necessitate other assets. Background images should be provided in landscape format at least 600px width for notifications that include pages of cards, since the system automatically adds a parallaxing effect.</p>
   </div>
 </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
   <h2 id="PeekCard" style="clear:both">Peek Card Readability</h2>
 
   <p>Test your card layout to ensure that useful information is conveyed in the peek state on the Home screen. The main message of the card should be readable in the peek state, particularly for contextual cards. Content that requires an interaction to be read, for example a long message, should be cropped appropriately to provide an affordance to the user to swipe the card to read more.</p>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
 
   <img src="{@docRoot}design/media/wear/peek-card.png" width="300"
     style="margin:12px 0 0 20px">
diff --git a/docs/html/design/wear/watchfaces.jd b/docs/html/design/wear/watchfaces.jd
index 2a00802..2def05b 100644
--- a/docs/html/design/wear/watchfaces.jd
+++ b/docs/html/design/wear/watchfaces.jd
@@ -55,42 +55,42 @@
 
 <p>These guidelines help your concepts align across devices:</p>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-6">
+<div class="cols" style="margin-top:20px">
+<div class="col-6">
   <h3>Create flexible concepts</h3>
   <p>Ideally, the visual functionality of the watch face works for both round and square
   formats. In this example, the visual functionality of the watch face is flexible enough
   to work well in either format without any adjustment. However, other design concepts require
   different executions for square and round screens.</p>
 </div>
-<div class="layout-content-col span-7">
+<div class="col-7">
   <img src="{@docRoot}design/media/wear/ScreenShapes_Invert.png" width="400"
        height="221" alt="" style="margin-top:-30px">
 </div>
 </div>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-6">
+<div class="cols" style="margin-top:20px">
+<div class="col-6">
   <h3>Use a common design language</h3>
   <p>Try using a common set of colors, line weights, shading, and other design elements
   to draw a visual connection between your square and round versions. By using similar color
   palettes and a few consistent visual elements, the overall appearance of square and round
   can be appropriately customized while still feeling like part of the same visual system.</p>
 </div>
-<div class="layout-content-col span-7">
+<div class="col-7">
   <img src="{@docRoot}design/media/wear/ScreenShapes_Pyramids.png" width="400"
        height="221" alt="" style="margin-top:-30px">
 </div>
 </div>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-6">
+<div class="cols" style="margin-top:20px">
+<div class="col-6">
   <h3>Adjust for analog concepts</h3>
   <p>Some of your concepts will naturally take the shape of an analog clock, like a center
   dial with hour and minute hands. In this case, consider the corner areas that are exposed
   when translating to a square format. Try extending and exploring this extra space.</p>
 </div>
-<div class="layout-content-col span-7">
+<div class="col-7">
   <img src="{@docRoot}design/media/wear/ScreenShapes_Rift.png" width="400"
        height="221" alt="" style="margin-top:-30px">
 </div>
@@ -137,8 +137,8 @@
 of screen available on the device. Consider the best design for your watch faces on all
 screens.</p>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>Reduced color space</h3>
   <p>Some displays use a reduced color space in ambient mode to save power.</p>
   <p>One reduced color space power saving method is to use a "low-bit" mode. In low-bit mode,
@@ -152,14 +152,14 @@
   displays which do not use color in ambient mode, the background may be either black or
   white.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/Render_LowBit.png" width="200"
        height="" alt="" style="margin-top:45px;margin-left:13px">
 </div>
 </div>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>Burn protection techniques</h3>
   <p>When designing for OLED screens, you should consider power efficiency and the screen
   burn-in effect. When these screens are in ambient mode, the system shifts the contents of
@@ -169,7 +169,7 @@
   replace filled images with pixel patterns. For analog watch face designs, hollow out the center
   where the hands meet to avoid pixel burn-in in this mode.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/Render_1Bit.png" width="200"
        height="" alt="" style="margin-top:-10px;margin-left:13px">
 </div>
@@ -183,8 +183,8 @@
 user the status of the wearable and show notifications from services on the user's phone. Try
 to keep critical elements in your watch face designs from being obscured by the UI elements.</p>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>Cards</h3>
 <p>Cards are the notification system that bridges information between the wearable and a
 mobile device. Cards are also how most applications communicate with users. The user will be
@@ -202,14 +202,14 @@
 <p>The system notifies your watch face when the bounds of a peek card change, so you can
 rearrange the elements in your design if necessary.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/CardsRender_Build.png" width="200"
        height="" alt="" style="margin-top:20px;margin-left:13px">
 </div>
 </div>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>Indicators</h3>
 <p>Indicators tell the user the status of the wearable, such as charging and airplane mode.
 When designing a watch face, consider how the indicator will fall over the watch face.</p>
@@ -219,14 +219,14 @@
 peek cards. If the edge of the watch face contains strong visual elements, such as
 ticks or numbers, place the indicators on the center of the screen.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/Indicators_Cropped.png" width="200"
        height="" alt="" style="margin-top:0px;margin-left:13px">
 </div>
 </div>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>The hotword</h3>
 <p>The hotword is the phrase "OK Google", which tells the user that they can interact with
 the watch using voice commands. When a user turns on the wearable, the hotword appears on
@@ -237,7 +237,7 @@
 turned on unless your design is tailored to have these elements appear on top of them, for example
 using dark solid colors with no patterns.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/Hotword_Cropped.png" width="200"
        height="" alt="" style="margin-top:0px;margin-left:13px">
 </div>
@@ -253,8 +253,8 @@
 <p>Your watch face can show users contextually relevant data and react to it by changing styles
 and colors in your design.</p>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>What do you want your user to know?</h3>
 <p>The first step in designing a data-integrated watch face is to define a conceptual user
 outcome based on available data. First, generate a strong concept or outcome you believe is
@@ -262,14 +262,14 @@
 at your design? Once you have identified your outcome, you need to determine how to obtain
 the required data.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/Render_Saturn.png" width="200"
        height="" alt="" style="margin-top:-10px;margin-left:13px">
 </div>
 </div>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>A watch dial is a timeline; add data to it</h3>
 <p>Your watch face concept may include use of data beyond time, such as weather, calendar
 and fitness data. Consider the inclusion of data integration creatively. Avoid simply
@@ -279,14 +279,14 @@
 you might design a watch face that describes how the temperature will change over the
 course of the day.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/Render_Episode.png" width="200"
        height="" alt="" style="margin-top:-10px;margin-left:13px">
 </div>
 </div>
 
-<div class="layout-content-row" style="margin-top:20px">
-<div class="layout-content-col span-9">
+<div class="cols" style="margin-top:20px">
+<div class="col-9">
   <h3>Stick to one message</h3>
 <p>Once you have solidified your conceptual direction or desired outcome, you will need to
 begin visualizing your watch face. The strongest watch face designs are highly glanceable
@@ -296,7 +296,7 @@
 upcoming event. By a process of reduction, you should arrive at a powerful singular
 expression of data to include in your design.</p>
 </div>
-<div class="layout-content-col span-4">
+<div class="col-4">
   <img src="{@docRoot}design/media/wear/Render_Albumem.png" width="200"
        height="" alt="" style="margin-top:-10px;margin-left:13px">
 </div>
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index e89e228..970aded 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -9,378 +9,109 @@
 excludeFromSuggestions=true
 @jd:body
 
-<style>
-#noplayer-message {
-position:absolute;top:50%;left:0;width:100%;z-index:-1;text-align:center;display:none;
-}
-#player-frame object {z-index:1;}
-</style>
-
-<div id="player-wrapper">
-  <div id="player-frame">
-    <div id="noplayer-message">
-      <!-- busted flash player message -->
-      Your video is supposed to appear here.<br/>
-      Make sure you have the <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash&reg; Player</a>.
+<section class="dac-expand dac-hero dac-light">
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-1of2 col-push-1of2 dac-hero-figure">
+        <img class="dac-hero-image" src="/images/develop/hero-android-studio-on-device.png">
+      </div>
+      <div class="col-1of2 col-pull-1of2">
+        <h1 class="dac-hero-title">Start!</h1>
+        <p class="dac-hero-description">
+          Set up your environment and create an app. Build faster with sample projects and templates.
+        </p>
+        <a class="dac-hero-cta" href="/sdk/index.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Set up Android Studio
+        </a><br>
+        <a class="dac-hero-cta" href="/training/basics/firstapp/index.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Make your first app
+        </a><br>
+        <a class="dac-hero-cta" href="/guide/index.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Learn about Android
+        </a><br>
+      </div>
     </div>
-    <div id="player"><!-- Youtube embeds here... actually replaces this div --></div>
-    <a class="close" onclick="$('#player-wrapper').hide()">close video</a>
+    <div class="dac-section dac-small">
+      <div class="resource-widget resource-flow-layout col-16"
+           data-query="collection:develop/landing/mainlinks"
+           data-cardSizes="6x2"
+           data-maxResults="6"></div>
+    </div>
   </div>
-</div>
-<div class="wrap">
-   <!-- Slideshow -->
-   <div class="slideshow-container slideshow-develop col-16">
-       <a href="" class="slideshow-prev">Prev</a>
-       <a href="" class="slideshow-next">Next</a>
-       <div class="frame">
-           <ul>
+</section>
 
-              <li class="item carousel-home">
-                 <div class="col-8">
-                   <img 
-                   style="max-height: 250px; margin-top:5px;
-                   margin-left: 30px; max-width: 451px;"
-src="{@docRoot}design/tv/images/focus.png"
-class="play no-shadow no-transform" />
-                 </div>
-                <div class="content-right col-6">
-                  <h2>Create Quality Apps for TV</h2>
-                  <p>Now that the Android platform has
-                  extended to TVs, your apps on Google Play have
-                  a new opportunity for engagement in the
-                  living room. To provide the best
-                  "leanback" experience on the couch, follow
-                  this quality checklist.</p>
-                  <p><a
-href="{@docRoot}distribute/essentials/quality/tv.html" class="button">Read
-more</a></p>
-                </div>            
-              </li>
-
-              <li class="item carousel-home">
-                 <div class="col-8">
-                   <img
-src="//lh4.ggpht.com/-lfjzgG5Dqrk/UHMThRtpRwI/AAAAAAAABpk/h4d3nsmkgPM/s400/mint.png"
-class="play no-shadow no-transform" />
-                 </div>
-                <div class="content-right col-6">
-                  <h2>Building Great Apps for Tablets</h2>
-                  <p>Tablets are a fast-growing part of the Android installed base and they offer new opportunities for user engagement and monetization. If you are targeting tablets, check out this list of tips and techniques on how to deliver a great app experience for tablet users.  </p>
-                  <p><a
-href="//android-developers.blogspot.com/2012/11/designing-for-tablets-were-here-to-help.html" class="button">Read
-more</a></p>
-                </div>            
-              </li>
-              <li class="item carousel-home">
-                 <div class="col-8">
-                   <img src="{@docRoot}images/google/gps-location.png"
-class="play no-shadow no-transform" style="margin:0 0 0 70px;height:230px;width:340px" />
-                 </div>
-                <div class="content-right col-6" style="width:350px">
-                  <h2>New Location APIs from Google</h2>
-                  <p>The latest version of Google Play services includes new APIs that provide more
-                  efficient and immediate user location data on devices running Android 2.2
-                  and higher. Features include geofencing APIs, user activity recognition, and
-                  power-efficient location updates.</p>
-                  <p><a
-href="{@docRoot}google/play-services/location.html" class="button">Read more</a></p>
-                </div>
-              </li>
-
-              <li class="item carousel-home">
-                 <div class="col-8">
-                   <img src="{@docRoot}images/google/gps-plus-signin-hero.jpg"
-class="play no-shadow no-transform" style="margin:0 0 0 40px;max-height:250px;height:250px;
-                                           max-width:409px;width:409px" />
-                 </div>
-                <div class="content-right col-6" style="width:350px">
-                  <h2>New Cross-Platform Single Sign On</h2>
-                  <p>Google+ Sign-In is an easy, trusted way to sign a user into your app.
-                  Now it's even more seamless. A user can sign in to your app on one device and
-                  pick it up on another&mdash;without signing in again. Best of all, it's built
-                  into Google+ Sign-in, so there's no change needed in your app.</p>
-                  <p><a
-href="{@docRoot}google/play-services/plus.html" class="button">Read more</a></p>
-                </div>
-              </li>
-
-              <li class="item carousel-home">
-                 <div class="col-8">
-                   <img src="{@docRoot}images/google/maps-v2-trulia-n7.png"
-class="play no-shadow no-transform" style="margin:0 0 0 40px;max-height:250px;height:250px;
-                                           max-width:409px;width:409px" />
-                 </div>
-                <div class="content-right col-6" style="width:350px">
-                  <h2>New Google Maps Android APIs!</h2>
-                  <p>Google Maps Android API version 2 is now available with enhanced
-                    features such as 3D buildings, vector-based map tiles, rich overlay capabilities,
-                    indoor maps, support for fragments, and much more.</p>
-                    
-                  <p>The APIs are bundled with Google Play services and are
-                  compatible with Android 2.2 and higher.</p>
-                  <p><a
-href="{@docRoot}google/play-services/maps.html" class="button">Read more</a></p>
-                </div>            
-              </li>
-           </ul>
-       </div>
-   </div>
-   <!-- /End slideshow -->
-</div>
-<div class="wrap">
-	<!-- news and feature feed -->
-	<div class="feed col-8" style="margin-left:0">
-		<ul class="feed-nav">
-			<li class="active">DEVELOPER NEWS</li>
-			<li>FEATURED DOCS</li>
-		</ul>
-		<div class="feed-container">
-			<div class="feed-frame">
-                                <!-- DEVELOPER NEWS -->
-          <ul>
-            <li><a href="//android-developers.blogspot.com/2013/07/making-beautiful-android-app-icons.html">
-              <div class="feed-image" style="background:url('//2.bp.blogspot.com/-HfoO6KNFBKA/UeiyRoELb7I/AAAAAAAAAFs/bHR-5viktU4/s1000/icons.png') no-repeat 0 0;background-size:500px;background-position:center center;"></div>
-              <h4>Making Beautiful Android App Icons</h4>
-              <p>As higher density screens gain popularity, it's important to make sure your launcher icon is crisp and high quality...</p>
-              </a></li>
-            <li><a href="//android-developers.blogspot.com/2013/07/beautiful-design-collection-summer-2013.html">
-              <div class="feed-image" style="background:url('//1.bp.blogspot.com/-k8DZYu0daT4/UdRt1AzstvI/AAAAAAAAAFM/CvEkb2yh-i0/s965/beautifulapps_4.png') no-repeat 0 0"></div>
-              <h4>The Beautiful Design Summer 2013 Collection</h4>
-              <p>See the apps chosen by the Android Design team for their masterfully crafted design details...</p>
-              </a></li>
-            <li><a href="//android-developers.blogspot.com/2013/10/new-developer-features-in-google-play.html">
-              <div class="feed-image" style="background:url('//3.bp.blogspot.com/-k33rf398Lqw/UlRUMQQRUNI/AAAAAAAAClM/pSwz2YgQpmY/s1600/gps-play_games_logo.png') no-repeat 0 0;background-size:130px;background-position:8px -4px;"></div>
-              <h4>New Features in Google Play Games</h4>
-              <p>Three new features that make it easier to understand what players are doing in your game and help you manage game features...</p>
-            </a></li>
-            <li><a href="//android-developers.blogspot.com/2013/05/new-ways-to-optimize-your-business-in.html">
-              <div class="feed-image" style="background:url('//3.bp.blogspot.com/-_8WvpdTVGsE/UkxxxrVoNNI/AAAAAAAACj8/FrQyA-BO11c/s1600/gp-referral-ga.png') no-repeat 0 0;background-size:180px"></div>
-              <h4>Linking Google Analytics with Google Play</h4>
-              <p>Understanding your users easier through a new integration between Google Analytics and the Google Play Developer Console...</p>
-              </a></li>
-          </ul>
-                                <!-- FEATURED DOCS -->
-          <ul>
-            <li><a href="{@docRoot}distribute/googleplay/spotlight/tablets.html">
-              <h4>Tablet Stories</h4>
-              <p>More developers are investing in a full tablet experience for their apps. Here are some stories from developers who are seeing real results as they expand their offering to include Android tablets. </p>
-              </a></li>
-            <li><a href="{@docRoot}distribute/googleplay/quality/core.html">
-              <h4>Core App Quality Guidelines</h4>
-              <p>This document helps you assess basic aspects of quality in your app through a compact set of core app quality criteria and associated tests. All Android apps should meet these criteria.</p>
-              </a></li>
-            <li><a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">
-              <h4>Updated Notifications API Guide</h4>
-              <p>The Notifications API Guide is updated to include information about building Jelly Bean rich notifications using the Support Library APIs for backwards-compatibility.</p>
-              </a></li>
-            <li><a href="{@docRoot}guide/topics/ui/dialogs.html">
-              <h4>Updated Dialogs API Guide</h4>
-              <p>The Dialogs API Guide now shows to use DialogFragment class, a simpler way to manage your dialogs and embed them in alternative layouts.</p>
-              </a></li>                                      
-          </ul>
-			</div>
-		</div>
-	</div>	<!-- /news and feature feed -->
-	<!-- video feed -->
-	<div class="feed col-8" style="margin-right:0">
-		<ul class="feed-nav">
-			<li class="active">DEVELOPERS LIVE</li>
-			<li>VIDEO PLAYLISTS</li>
-		</ul>
-		<div class="feed-container">
-			<div class="feed-frame">
-              <ul id="DevelopersLive">
-              </ul>
-              <ul id="VideoPlaylists">
-              </ul>
-			</div>
-		</div>
-	</div>
-	<!-- /video feed -->
-</div>
-
-<br class="clearfix"/>
-
-      
-      
-      
-      
-      
-      
-      
-      
-
-<script src="//swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js" type="text/javascript"></script>
-<script type="text/javascript">
-
-/* Load a video into the player box.
- * @param id        The YouTube video ID
- * @param title     The video title to display in the player box (character escaped)
- * @param autoplay  Whether to automatically play the video
- */
-function loadVideo(id, title, autoplay) {
-  swfobject.embedSWF('//www.youtube.com/v/' + id + '&rel=1&border=0&fs=1&autoplay=' +
-      (autoplay?1:0), 'player', '525', '330', '9.0.0', false, false, {allowfullscreen: 'true'});
-  $("#videoPlayerTitle").html("<h2>" + unescape(title) + "</h2>");
-  $("#player-wrapper").show();
-  setTimeout(function(){$('#noplayer-message').show()}, 2000);
-}
-
-/* Draw all videos from a playlist into a 'videoPreviews' list
- * @param data  The feed data returned from the youtube request
- */
-function renderVideoPlaylists(data) {
-  var MAX_LIST_DESC_LENGTH = 130; // the length at which we will trim the description
-  var MAX_VIDEO_DESC_LENGTH = 100; // the length at which we will trim the description
-  var MAX_LIST_LENGTH = 4; // number of videos to put in the list
-  var feed = data.feed;
-  var entries = feed.entry || [];
-  var playlistId = feed.yt$playlistId.$t;
-
-  var $ulVideos = $('<ul style="display:none"/>');
-  var summary = feed.media$group.media$description != null ? feed.media$group.media$description.$t : feed.subtitle.$t;
-  
-  var $liPlaylist = $('<li class="playlist"></li>');
-  var $aPlaylist = $('<a href="" onclick="togglePlaylist(this);return false;"></a>');
-  $liPlaylist.append($aPlaylist);
-  $aPlaylist.append('<h4>' + feed.title.$t + '</h4>');
-  
-  var playlistDescription = summary.substr(0, MAX_LIST_DESC_LENGTH);
-  playlistDescription += playlistDescription.length == MAX_LIST_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
-  $aPlaylist.append('<p>' +  playlistDescription + '</p>');
-  
-  // Loop through each entry (each video) and add it to the 'videoPreviews' list
-  var length = feed.entry.length < MAX_LIST_LENGTH ? feed.entry.length : MAX_LIST_LENGTH; // max of 4 videos per list
-  for (var i = 0; i < length; i++) {
-    var entry = entries[i];
-
-    var title = entry.title.$t;
-    var id = entry.media$group.yt$videoid.$t;
-    var thumbUrl = entry.media$group.media$thumbnail[0].url;
-    var fullDescription = entry.media$group.media$description.$t;
-    var playerUrl = entry.media$group.media$content[0].url;
-
-    var shortDescription = fullDescription.substr(0, MAX_VIDEO_DESC_LENGTH);
-    shortDescription += shortDescription.length == MAX_VIDEO_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
-
-    var img = $('<img src="' + thumbUrl + '" width="60" height="45"/>');
-    var a = $('<a href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />');
-    var pShortDescription = $('<p>' + shortDescription + '</p>');
-    var h5Title = "<h5>" + title + "</h5>";
-    var li = $('<li class="playlist-video"/>');
-
-    li.append(a);
-    a.append(img).append(h5Title).append(pShortDescription);
-
-    $ulVideos.append(li);
-    
-    // use the first entry's thumbnail for the playlist
-    if (i == 0) {
-      $aPlaylist.prepend('<img src="' + thumbUrl + '" width="120" height="90"/>');
-    }
-  }
-  
-  if (feed.entry.length > MAX_LIST_LENGTH) {
-    // add item to go to youtube for playlist
-    $ulVideos.append('<li class="more"><a href="//www.youtube.com/playlist?list=' + playlistId + '">More &raquo;</a></li>');
-  }
-
-  $liPlaylist.append($ulVideos);
-  $('#VideoPlaylists').append($liPlaylist);
-}
+<section class="dac-section dac-gray dac-small dac-invert"><div class="wrap">
+  <h2 class="norule">Latest</h2>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:develop/landing/latest"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
 
-function renderDevelopersLivePlaylist(data) {
+<section class="dac-section dac-light"><div class="wrap">
+  <h1 class="dac-section-title">Android performance patterns</h1>
+  <div class="dac-section-subtitle">
+    Everything you need to know about improving your app’s performance.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:develop/landing/performance"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+  <ul class="dac-section-links">
+    <li class="dac-section-link"><a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Playlist
+    </a></li>
+  </ul>
+</div></section>
 
-  var MAX_DESC_LENGTH = 125; // the length at which we will trim the description
-  var feed = data.feed;
-  var entries = feed.entry || [];
-  var playlistId = feed.yt$playlistId.$t;
+<section class="dac-section dac-section-light"><div class="wrap">
+  <h1 class="dac-section-title">Tools for building apps</h1>
+  <div class="dac-section-subtitle">
+    Insights into Android's tools and libraries to speed your development.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:develop/landing/tools"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+  <ul class="dac-section-links">
+  </ul>
+</div></section>
 
-  var ul = $('#DevelopersLive');
+<section class="dac-section dac-light"><div class="wrap">
+  <h1 class="dac-section-title">Ubiquitous computing</h1>
+  <div class="dac-section-subtitle">
+    Opening up new stuff.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:develop/landing/ubicomp"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+  <ul class="dac-section-links">
+    <li class="dac-section-link"><a href="/wear/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Wear
+    </a></li>
+    <li class="dac-section-link"><a href="/tv/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      TV
+    </a></li>
+    <li class="dac-section-link"><a href="/auto/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Auto
+    </a></li>
+  </ul>
+</div></section>
 
-  // Loop through each entry (each video) and add it to the '#DevelopersLive' list
-  for (var i = 0; i < 4; i++) {
-    var entry = entries[i];
-
-    var title = entry.title.$t;
-    var id = entry.media$group.yt$videoid.$t;
-    var thumbUrl = entry.media$group.media$thumbnail[0].url;
-    var fullDescription = entry.media$group.media$description.$t;
-    var playerUrl = entry.media$group.media$content[0].url;
-    var shortDescription = fullDescription.substr(0, MAX_DESC_LENGTH);
-    shortDescription += shortDescription.length == MAX_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
-
-    var img = $('<img src="' + thumbUrl + '" width="120" height="90"/>');
-    var a = $('<a href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />');
-    var pShortDescription = $('<p>' + shortDescription + '</p>');
-    var h4Title = "<h4>" + title + "</h4>";
-    var li = $('<li/>');
-
-    li.append(a);
-    a.append(img).append(h4Title).append(pShortDescription);
-
-    ul.append(li);
-  }
-}
-
-/* This 'playlist' object defines the playlist IDs for each tab.
- * Each name inside 'playlist' corresponds to class names for the tab that the playlists belong to (eg: "googleioTab" and "googleioBox" divs).
- * Each string in 'ids' is the ID of a YouTube playlist that belongs in the corresponding tab.
- */
-var playlists = {
-  'designinaction' : {
-    'ids': ["PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF"]
-  },
-  'bizdevbytes' : {
-    'ids': ["PLWz5rJ2EKKc8-Osr0TuHyTMEhKV0xJ6ql"]
-  },
-  'thisweek' : {
-    'ids': ["PLWz5rJ2EKKc9Wam5jE-9oY8l6RpeAx-XM"]
-  },
-  'googleio' : {
-    'ids': ["PLWz5rJ2EKKc9WGUwq2gQ-coU3fSyexgOx"]
-  }
-};
-
-/* Request the playlist feeds from YouTube */
-function showVideosPlaylists() {
-  for (var x in playlists) {
-    var ids = playlists[x].ids;
-    for (var i in ids) {
-      var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
-                    + ids[i] +
-                    "?v=2&alt=json-in-script&max-results=50&callback=renderVideoPlaylists&orderby=position'><\/script>";
-      $("body").append(script);
-    }
-  }
-}
-
-
-/* Request the playlist feeds from YouTube */
-function showDevelopersLivePlaylist() {
-  var playlistId = "PLWz5rJ2EKKc_XOgcRukSoKKjewFJZrKV0"; /* DevBytes */
-  var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
-                + playlistId +
-                "?v=2&alt=json-in-script&max-results=10&callback=renderDevelopersLivePlaylist&orderby=position'><\/script > ";
-  $("body").append(script);
-}
-
-
-function togglePlaylist(listLink) {
-  var $list = $(listLink).parent();
-  var $ul = $list.find('ul');
-  if ($ul.is(":visible")) {
-    $ul.slideUp(function() {
-      $list.css({'height':'inherit'});
-    });
-  } else {
-    $list.closest('ul').find('li.playlist').find('ul').slideUp();
-    $ul.slideDown();
-    $list.css({'height':'auto'});
-  }
-}
-
-showDevelopersLivePlaylist();
-showVideosPlaylists();
-</script>
+<section class="dac-section dac-gray"><div class="wrap">
+  <h1 class="dac-section-title">Courses</h1>
+  <div class="dac-section-subtitle">Free online courses from Android experts that bring you step-by-step to building your own apps.</div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:develop/landing/courses"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html/distribute/analyze/index.jd b/docs/html/distribute/analyze/index.jd
index d8ab59e..f948dbd 100644
--- a/docs/html/distribute/analyze/index.jd
+++ b/docs/html/distribute/analyze/index.jd
@@ -1,5 +1,6 @@
 page.title=Analyze
 page.metaDescription=Understanding what your users do inside your app is the key to engaging and monetizing them.
+page.image=images/cards/analytics-mobile_2x.jpg
 section.landing=true
 excludefromsuggestions=true
 nonavpage=true
@@ -37,4 +38,3 @@
     data-cardSizes="6x6"
     data-maxResults="10">
   </div>
- 
\ No newline at end of file
diff --git a/docs/html/distribute/engage/deep-linking.jd b/docs/html/distribute/engage/deep-linking.jd
index a25c3c6..ea1f1de 100644
--- a/docs/html/distribute/engage/deep-linking.jd
+++ b/docs/html/distribute/engage/deep-linking.jd
@@ -1,7 +1,7 @@
 page.title=Deep Link to Bring Users Back
 page.metaDescription=Use deep links to bring your users into your apps from social posts, search, or ads.
 page.tags="app indexing, google+ signin"
-page.image=/images/gp-listing-4.jpg
+page.image=images/cards/google-search_2x.png
 
 @jd:body
 
@@ -96,4 +96,4 @@
 <div class="resource-widget resource-flow-layout col-13" data-query=
 "collection:distribute/engage/deeplinks" data-sortorder="-timestamp"
 data-cardsizes="9x3" data-maxresults="6">
-</div>
\ No newline at end of file
+</div>
diff --git a/docs/html/distribute/engage/easy-signin.jd b/docs/html/distribute/engage/easy-signin.jd
index d066181..2bfa5d1 100644
--- a/docs/html/distribute/engage/easy-signin.jd
+++ b/docs/html/distribute/engage/easy-signin.jd
@@ -1,7 +1,7 @@
 page.title=Make Signing In Easy
 page.metaDescription=Increase conversion rates while helping users minimize typing by letting users sign in with Google+.
 page.tags="google+"
-page.image=/images/google/gps-googleplus.png
+page.image=images/cards/google-sign-in_2x.png
 
 
 @jd:body
diff --git a/docs/html/distribute/googleplay/about.jd b/docs/html/distribute/googleplay/about.jd
index c25a9cf..2652046 100644
--- a/docs/html/distribute/googleplay/about.jd
+++ b/docs/html/distribute/googleplay/about.jd
@@ -2,7 +2,7 @@
 meta.tags="visibility, growth, distributing"
 page.tags="play, apps, distributing, publishing"
 page.metaDescription=Billons of downloads a month and growing. Get your apps in front of users at Google's scale.
-page.image=/distribute/images/about-play.jpg
+page.image=images/cards/google-play_2x.png
 
 @jd:body
 
@@ -369,4 +369,4 @@
   data-sortOrder="-timestamp"
   data-cardSizes="9x3"
   data-maxResults="4"></div>
-    </div>
\ No newline at end of file
+    </div>
diff --git a/docs/html/distribute/googleplay/developer-console.jd b/docs/html/distribute/googleplay/developer-console.jd
index f5b3ac6..748c1d1 100644
--- a/docs/html/distribute/googleplay/developer-console.jd
+++ b/docs/html/distribute/googleplay/developer-console.jd
@@ -1,6 +1,6 @@
 page.title=Developer Console
 page.metaDescription=Learn about the Developer Console, your home for app publishing on Google Play.
-page.image=/distribute/images/developer-console.jpg
+page.image=images/cards/dev-console_2x.jpg
 Xnonavpage=true
 
 @jd:body
@@ -600,4 +600,4 @@
   data-sortOrder="-timestamp"
   data-cardSizes="9x3"
   data-maxResults="6"></div>
-  </div>
\ No newline at end of file
+  </div>
diff --git a/docs/html/distribute/googleplay/index.jd b/docs/html/distribute/googleplay/index.jd
index b25f6b75..72e2de8 100644
--- a/docs/html/distribute/googleplay/index.jd
+++ b/docs/html/distribute/googleplay/index.jd
@@ -1,4 +1,5 @@
 page.title=Google Play
+page.image=images/cards/program-edu_2x.jpg
 section.landing=true
 nonavpage=true
 
diff --git a/docs/html/distribute/images/advertising.jpg b/docs/html/distribute/images/advertising.jpg
index 9625671..7747097 100644
--- a/docs/html/distribute/images/advertising.jpg
+++ b/docs/html/distribute/images/advertising.jpg
Binary files differ
diff --git a/docs/html/distribute/index.jd b/docs/html/distribute/index.jd
index d0ea661..c49fe3e 100644
--- a/docs/html/distribute/index.jd
+++ b/docs/html/distribute/index.jd
@@ -1,3 +1,4 @@
+fullpage=true
 page.title=Distribute Your Apps
 page.viewport_width=970
 section.landing=true
@@ -6,21 +7,74 @@
 page.metaDescription=The most visited store in the world for Android apps. Cloud-connected and always synced, it's never been easier for users to find and download your apps.
 
 @jd:body
+<div class="dac-hero-carousel" data-carousel-query="collection:distribute/landing/carousel">
+</div>
 
-    <div class="resource-widget resource-carousel-layout col-16" 
-    style="height:420px;margin-top:20px;padding-top:0"
-    data-query="type:youtube+tag:googleplay+tag:developerstory+tag:featured"
-    data-sortOdrder="-timestamp"
-    data-maxResults="4"></div>
-
+<section class="dac-section dac-gray dac-small dac-invert"><div class="wrap">
+  <h2 class="norule">Latest</h2>
   <div class="resource-widget resource-flow-layout col-16"
-    data-query="type:blog+tag:googleplay+tag:distribute+tag:featured"
-    data-sortOrder=""
-    data-cardSizes="9x6"
-    data-maxResults="2"></div>
+      data-query="type:youtube+tag:googleplay+tag:developerstory+tag:featured, type:blog+tag:googleplay+tag:distribute+tag:featured"
+      data-sortOrder="-timestamp"
+      data-cardSizes="6x6"
+      data-maxResults="6"></div>
+</div></section>
 
+<section class="dac-section dac-invert dac-darken-bg" style="background-image: url(/images/distribute/google-play-bg.jpg)"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">Reach the world with Google Play</h1>
+    <div class="dac-section-subtitle">
+      Publish your apps and games on Google Play and reach over a billion active Android users in over 190 countries around the world.
+    </div>
+  </div></div>
   <div class="resource-widget resource-flow-layout col-16"
-    data-query="collection:launch/static"
-    data-sortOrder=""
-    data-cardSizes="6x2x3,6x6,6x6,6x6,6x6,6x2x3,6x2x3,6x6,6x6,6x6,6x6,6x6"
-    data-maxResults="24"></div>
+       data-query="collection:distribute/landing/googleplay"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+
+  <ul class="dac-section-links">
+    <li class="dac-section-link"><a href="/distribute/googleplay/start.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Get started
+    </a></li>
+    <li class="dac-section-link"><a href="/distribute/essentials/index.html#quality-guidelines">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Quality guidelines
+    </a></li>
+    <li class="dac-section-link"><a href="/distribute/essentials/index.html#tools-and-resources">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Resources &amp; tools
+    </a></li>
+    <li class="dac-section-link"><a href="/distribute/stories/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Developer stories
+    </a></li>
+    <li class="dac-section-link"><a href="/distribute/users/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Get users
+    </a></li>
+    <li class="dac-section-link"><a href="/distribute/engage/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Engage &amp; retain
+    </a></li>
+    <li class="dac-section-link"><a href="/distribute/monetize/index.html">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Monetize
+    </a></li>
+  </ul>
+</div></section>
+
+<section class="dac-section dac-light"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">More from Google</h1>
+    <div class="dac-section-subtitle">Reach and retain a valuable audience and grow your revenue.</div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:distribute/landing/more"
+       data-cardSizes="6x6"></div>
+  <ul class="dac-section-links">
+    <li class="dac-section-link"><a href="https://developers.google.com/">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      More on Google Developers
+    </a></li>
+  </ul>
+</div></section>
diff --git a/docs/html/distribute/monetize/ads.jd b/docs/html/distribute/monetize/ads.jd
index 9a847ff..b5c5f4a 100644
--- a/docs/html/distribute/monetize/ads.jd
+++ b/docs/html/distribute/monetize/ads.jd
@@ -1,7 +1,7 @@
 page.title=Monetize with Ads
 page.metaDescription=Ads are a quick and easy way to incorporate a monetization option into both your free and paid apps.
 page.tags="monetizing", "free", "freemium", "ads"
-page.image=/distribute/images/advertising.png
+page.image=/distribute/images/advertising.jpg
 
 @jd:body
 
diff --git a/docs/html/distribute/tools/promote/device-art-resources/nexus_6/port_back.png b/docs/html/distribute/tools/promote/device-art-resources/nexus_6/port_back.png
index 6e1aec6..cf3e15a 100644
--- a/docs/html/distribute/tools/promote/device-art-resources/nexus_6/port_back.png
+++ b/docs/html/distribute/tools/promote/device-art-resources/nexus_6/port_back.png
Binary files differ
diff --git a/docs/html/distribute/tools/promote/device-art.jd b/docs/html/distribute/tools/promote/device-art.jd
index 814177b..d321074 100644
--- a/docs/html/distribute/tools/promote/device-art.jd
+++ b/docs/html/distribute/tools/promote/device-art.jd
@@ -16,12 +16,12 @@
 
 <div class="supported-browser">
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
+<div class="cols">
+  <div class="col-3">
     <h4>Step 1</h4>
     <p>Drag a screenshot from your desktop onto a device to the right.</p>
   </div>
-  <div class="layout-content-col span-10">
+  <div class="col-10">
     <ul class="device-list primary"></ul>
     <a href="#" id="archive-expando">Older devices</a>
     <ul class="device-list archive"></ul>
@@ -30,8 +30,8 @@
 
 
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-3">
+<div class="cols">
+  <div class="col-3">
     <h4>Step 2</h4>
     <p>Customize the generated image and drag it to your desktop to save.</p>
     <p id="frame-customizations">
@@ -48,7 +48,7 @@
       <label for="output-round">Round</label><br><br>
     </p>
   </div>
-  <div class="layout-content-col span-10">
+  <div class="col-10">
     <!-- position:relative fixes an issue where dragging an image out of a inline-block container
          produced no drag feedback image in Chrome 28. -->
     <div id="output" style="position:relative">No input image.</div>
diff --git a/docs/html/distribute/users/promote-with-ads.jd b/docs/html/distribute/users/promote-with-ads.jd
index 1e28ae1..c1d79fc 100644
--- a/docs/html/distribute/users/promote-with-ads.jd
+++ b/docs/html/distribute/users/promote-with-ads.jd
@@ -1,6 +1,6 @@
 page.title=Promote Your App with Ads
 page.metaDescription=Promote your app through AdMob, AdWords, and YouTube to find new users at the right moment.
-page.image=/images/gp-ads-console.jpg
+page.image=images/cards/adwords_2x.jpg
 page.tags="users, ads, analytics"
 
 @jd:body
@@ -42,4 +42,4 @@
   data-query="collection:distribute/users/promotewithads"
   data-sortOrder="-timestamp"
   data-cardSizes="9x3"
-  data-maxResults="6"></div>
\ No newline at end of file
+  data-maxResults="6"></div>
diff --git a/docs/html/google/index.jd b/docs/html/google/index.jd
index 4778a85..cc209cd 100644
--- a/docs/html/google/index.jd
+++ b/docs/html/google/index.jd
@@ -16,7 +16,7 @@
 }
 </style>
 
-<div class="landing-banner">
+<div class="landing-banner cols">
         
 <div class="col-6" style="min-height:0">
   <img src="{@docRoot}images/google/google-services.png" alt="" width="340" height="193" />
diff --git a/docs/html/google/play-services/index.jd b/docs/html/google/play-services/index.jd
index 5ccdcb9..11060e8 100644
--- a/docs/html/google/play-services/index.jd
+++ b/docs/html/google/play-services/index.jd
@@ -24,8 +24,8 @@
 </div>
 </div>
 
-  <div class="layout-content-row">
-  <div class="layout-content-col span-4">
+  <div class="cols">
+  <div class="col-4">
 
 <h4>Google Technology</h4>
 <p>Google Play services provides you with easy access to Google services and is
@@ -34,7 +34,7 @@
 easier and faster.</p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
 <h4>Standard Authorization</h4>
 <p>All products in Google Play services share a common authorization API
@@ -43,7 +43,7 @@
   to Google services.</p>
 
   </div>
-  <div class="layout-content-col span-4">
+  <div class="col-4">
 
 <h4>Automatic Updates</h4>
 <p>Devices running Android 2.3 or higher that have the Google Play Store
@@ -666,8 +666,8 @@
 
 <div class="vspace size-2">&nbsp;</div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4 id="apk">The Google Play services APK</h4>
     <p>
         The Google Play services APK contains the individual Google services and runs
@@ -687,7 +687,7 @@
     </p>
   </div>
 
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <img src="/images/play-services-diagram.png" />
     <p class="img-caption"><em>The Google Play services APK on user devices receives regular updates
     for new APIs, features, and bug fixes.</em></p>
diff --git a/docs/html/google/play-services/location.jd b/docs/html/google/play-services/location.jd
index b28302c..98b0544 100644
--- a/docs/html/google/play-services/location.jd
+++ b/docs/html/google/play-services/location.jd
@@ -30,8 +30,8 @@
 </div>
 <div class="landing-docs">
   <h3 style="clear:left">Key Developer Features</h3>
-  <div class="layout-content-row normal-links">
-  <div class="layout-content-col span-6">
+  <div class="cols normal-links">
+  <div class="col-6">
 
 
 
@@ -74,7 +74,7 @@
 </ul>
 </div>
 
-<div class="layout-content-col span-6">
+<div class="col-6">
 
 <h4 style="font-weight:bold">Places API</h4>
 
diff --git a/docs/html/google/play/dist.jd b/docs/html/google/play/dist.jd
index f1ad834..02bb42b 100644
--- a/docs/html/google/play/dist.jd
+++ b/docs/html/google/play/dist.jd
@@ -9,8 +9,8 @@
 <div class="vspace size-1">
   &nbsp;
 </div>
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>
       Device Filtering
     </h4>
@@ -20,7 +20,7 @@
     </p><p><a href="{@docRoot}google/play/filters.html">Learn more &raquo;</a></p>
   </div>
 
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <h4>
       Multiple APK Support
     </h4>
@@ -30,8 +30,8 @@
     </p><p><a href="{@docRoot}google/play/publishing/multiple-apks.html">Learn more &raquo;</a></p>
   </div>
 
-<div class="layout-content-row">
-  <div class="layout-content-col span-6">
+<div class="cols">
+  <div class="col-6">
     <h4>
       APK Expansion files
     </h4>
@@ -42,14 +42,14 @@
     </p><a href="{@docRoot}google/play/expansion-files.html">Learn more &raquo;</a>
   </div>
 
-   <div class="layout-content-col span-6">
+   <div class="col-6">
     <h4>
       Application Licensing
     </h4>
     <p>Protect your revenue streams and integrate policies for usage into your app.
     </p><a href="{@docRoot}google/play/licensing/index.html">Learn more &raquo;</a>
   </div>
-  <div class="layout-content-col span-6">
+  <div class="col-6">
     <h4>
       Google Play Developer API
     </h4>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 8d010a1..f3f2e5e 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -357,8 +357,61 @@
               <li><a href="<?cs var:toroot ?>guide/topics/renderscript/advanced.html">
                     <span class="en">Advanced RenderScript</span></a>
                   </li>
-              <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference.html">
-                    <span class="en">Runtime API Reference</span></a>
+              <li class="nav-section">
+                <div class="nav-section-header">
+                  <a href="<?cs var:toroot ?>guide/topics/renderscript/reference/overview.html">
+                    <span class="en">Runtime API Reference</span>
+                  </a></div>
+                <ul>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_value_types.html">
+                    <span class="en">Numerical Types</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_object_types.html">
+                    <span class="en">Object Types</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_convert.html">
+                    <span class="en">Conversion Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_math.html">
+                    <span class="en">Mathematical Constants and Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_vector_math.html">
+                    <span class="en">Vector Math Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_matrix.html">
+                    <span class="en">Matrix Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_quaternion.html">
+                    <span class="en">Quaternion Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_atomic.html">
+                    <span class="en">Atomic Update Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_time.html">
+                    <span class="en">Time Functions and Types</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_allocation_data.html">
+                    <span class="en">Allocation Data Access Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_object_info.html">
+                    <span class="en">Object Characteristics Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_for_each.html">
+                    <span class="en">Kernel Invocation Functions and Types</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_io.html">
+                    <span class="en">Input/Output Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_debug.html">
+                    <span class="en">Debugging Functions</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_graphics.html">
+                    <span class="en">Graphics Functions and Types</span>
+                  </a></li>
+                  <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/index.html">
+                    <span class="en">Index</span>
+                  </a></li>
+                </ul>
               </li>
              </ul>
    </li>
@@ -588,4 +641,3 @@
     changeNavLang(getLangPref());
 //-->
 </script>
-
diff --git a/docs/html/guide/topics/renderscript/reference.jd b/docs/html/guide/topics/renderscript/reference.jd
deleted file mode 100644
index a9d780a..0000000
--- a/docs/html/guide/topics/renderscript/reference.jd
+++ /dev/null
@@ -1,21 +0,0 @@
-page.title=Runtime API Reference
-parent.title=Computation
-parent.link=index.html
-
-@jd:body
-
-<script language="JavaScript">
-
-function autoResize(element){
-    var newheight;
-    var newwidth;
-
-    newheight = element.contentWindow.document.body.scrollHeight + 20;
-    newwidth = element.contentWindow.document.body.scrollWidth;
-    element.height = (newheight) + "px";
-    element.width = (newwidth) + "px";
-}
-</script>
-
-
-<iframe SRC="{@docRoot}reference/renderscript/index.html" width="100%"  id="iframe" marginheight="0" frameborder="0" onLoad="autoResize(this);"></iframe>
diff --git a/docs/html/guide/topics/renderscript/reference/index.jd b/docs/html/guide/topics/renderscript/reference/index.jd
new file mode 100644
index 0000000..9221bfc
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/index.jd
@@ -0,0 +1,2837 @@
+page.title=RenderScript Index
+
+@jd:body
+
+<div class='renderscript'>
+<h2 style='margin-bottom: 0px;'>Constants</h2>
+<table class='jd-sumtable'><tbody>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_1_PI'>M_1_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      1 / pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_2_PI'>M_2_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 / pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_2_SQRTPI'>M_2_SQRTPI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 / sqrt(pi), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_E'>M_E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LN10'>M_LN10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_e(10), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LN2'>M_LN2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_e(2), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LOG10E'>M_LOG10E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_10(e), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LOG2E'>M_LOG2E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_2(e), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI'>M_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI_2'>M_PI_2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi / 2, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI_4'>M_PI_4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi / 4, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_SQRT1_2'>M_SQRT1_2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      1 / sqrt(2), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_SQRT2'>M_SQRT2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      sqrt(2), as a 32 bit float
+    </td>
+  </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Types</h2>
+<table class='jd-sumtable'><tbody>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char2'>char2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char3'>char3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char4'>char4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double2'>double2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double3'>double3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double4'>double4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float2'>float2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float3'>float3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float4'>float4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int2'>int2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int3'>int3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int4'>int4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long2'>long2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long3'>long3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long4'>long4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Enum for selecting cube map faces
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Bitfield to specify how an allocation is used
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Element data kind
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Element basic data type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to an element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rs_for_each_strategy_t'>rs_for_each_strategy_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Suggested cell processing order
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2x2 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      3x3 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      4x4 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap T value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Script
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cell iteration information
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Seconds since January 1, 1970
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Date and time structure
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short2'>short2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short3'>short3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short4'>short4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:size_t'>size_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Unsigned size type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ssize_t'>ssize_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Signed size type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar'>uchar</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint'>uint</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint2'>uint2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint3'>uint3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint4'>uint4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong'>ulong</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort'>ushort</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 16 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 16 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 16 bit unsigned integers
+    </td>
+  </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Functions</h2>
+<table class='jd-sumtable'><tbody>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:abs'>abs</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Absolute value of an integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acos'>acos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acosh'>acosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acospi'>acospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse cosine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asin'>asin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asinh'>asinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asinpi'>asinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse sine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan'>atan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan2'>atan2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent of a ratio
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent of a ratio, divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atanh'>atanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atanpi'>atanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cbrt'>cbrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cube root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ceil'>ceil</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Smallest integer not less than a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:clamp'>clamp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Restrain a value to a range
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:clz'>clz</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Number of leading 0 bits
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:convert'>convert</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert numerical vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:copysign'>copysign</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copies the sign of a number to another
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cos'>cos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cosh'>cosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hypebolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cospi'>cospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cosine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:cross'>cross</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cross product of two vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:degrees'>degrees</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Converts radians into degrees
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:distance'>distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:dot'>dot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Dot product of two vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:erf'>erf</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mathematical error function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:erfc'>erfc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mathematical complementary error function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp'>exp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp10'>exp10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      10 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp2'>exp2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:expm1'>expm1</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e raised to a number minus one
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fabs'>fabs</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Absolute value of a float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate normalized vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fdim'>fdim</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive difference between two values
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:floor'>floor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Smallest integer not greater than a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fma'>fma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply and add
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmax'>fmax</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Maximum of two floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmin'>fmin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Minimum of two floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmod'>fmod</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Modulo
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fract'>fract</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive fractional part
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:frexp'>frexp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Binary mantissa and exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_recip'>half_recip</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal of a square root computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Square root computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:hypot'>hypot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hypotenuse
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ilogb'>ilogb</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base two exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ldexp'>ldexp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Creates a floating point from mantissa and exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:length'>length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:lgamma'>lgamma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm of the gamma function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log'>log</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log10'>log10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base 10 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log1p'>log1p</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm of a value plus 1
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log2'>log2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base 2 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:logb'>logb</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base two exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:mad'>mad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply and add
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:max'>max</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Maximum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:min'>min</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Minimum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:mix'>mix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mixes two values
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:modf'>modf</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Integral and fractional components
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:nan'>nan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Not a Number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acos'>native_acos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse cosine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asin'>native_asin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse sine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan'>native_atan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent of a ratio
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent of a ratio, divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cube root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cos'>native_cos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hypebolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cosine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_divide'>native_divide</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp'>native_exp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate e raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate 10 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate 2 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate e raised to a number minus one
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hypotenuse
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log'>native_log</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate natural logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log10'>native_log10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate base 10 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate natural logarithm of a value plus 1
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log2'>native_log2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate base 2 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximately normalize a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_powr'>native_powr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate positive base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_recip'>native_recip</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate reciprocal
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate nth root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate reciprocal of a square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sin'>native_sin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine and cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tan'>native_tan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate tangent of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:nextafter'>nextafter</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Next floating point number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Normalize a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:pow'>pow</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:pown'>pown</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base raised to an integer exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:powr'>powr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:radians'>radians</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Converts degrees into radians
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:remainder'>remainder</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Remainder of a division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:remquo'>remquo</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Remainder and quotient of a division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rint'>rint</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Round to even
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rootn'>rootn</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Nth root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:round'>round</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Round away from zero
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationCopy1DRange'>rsAllocationCopy1DRange</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copy consecutive cells between allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationCopy2DRange'>rsAllocationCopy2DRange</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copy a rectangular region of cells between allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimFaces'>rsAllocationGetDimFaces</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Presence of more than one face
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimLOD'>rsAllocationGetDimLOD</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Presence of levels of detail
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimX'>rsAllocationGetDimX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the X dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimY'>rsAllocationGetDimY</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the Y dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimZ'>rsAllocationGetDimZ</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the Z dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetElement'>rsAllocationGetElement</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the object that describes the cell of an Allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsAllocationIoReceive'>rsAllocationIoReceive</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Receive new content from the queue
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsAllocationIoSend'>rsAllocationIoSend</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send new content to the queue
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get a vector from an allocation of scalars
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Store a vector into an allocation of scalars
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe addition
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicAnd'>rsAtomicAnd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise and
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicCas'>rsAtomicCas</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe compare and set
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicDec'>rsAtomicDec</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe decrement
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicInc'>rsAtomicInc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe increment
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicMax'>rsAtomicMax</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe maximum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicMin'>rsAtomicMin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe minimum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicOr'>rsAtomicOr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise or
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe subtraction
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicXor'>rsAtomicXor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise exclusive or
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Release an object
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_debug.html#android_rs:rsDebug'>rsDebug</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Log a message and values
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetBytesSize'>rsElementGetBytesSize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetDataKind'>rsElementGetDataKind</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Kind of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetDataType'>rsElementGetDataType</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Data type of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sub-element of a complex Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementArraySize'>rsElementGetSubElementArraySize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Array size of a sub-element of a complex Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementCount'>rsElementGetSubElementCount</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Number of sub-elements
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementName'>rsElementGetSubElementName</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Name of a sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementNameLength'>rsElementGetSubElementNameLength</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Length of the name of a sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementOffsetBytes'>rsElementGetSubElementOffsetBytes</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Offset of the instantiated sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Vector size of the Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsExtractFrustumPlanes'>rsExtractFrustumPlanes</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Compute frustum planes
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Invoke the root kernel of a script
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsGetDt'>rsGetDt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Elapsed time since last call
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Return a cell from an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the U component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the V component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the Y component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Check for an empty handle
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsIsSphereInFrustum'>rsIsSphereInFrustum</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Checks if a sphere is within the frustum planes
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsLocaltime'>rsLocaltime</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert to local time
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixGet'>rsMatrixGet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get one element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixInverse'>rsMatrixInverse</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverts a matrix in place
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixInverseTranspose'>rsMatrixInverseTranspose</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverts and transpose a matrix in place
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoad'>rsMatrixLoad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load or copy a matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadFrustum'>rsMatrixLoadFrustum</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a frustum projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadIdentity'>rsMatrixLoadIdentity</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load identity matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadMultiply'>rsMatrixLoadMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply two matrices
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadOrtho'>rsMatrixLoadOrtho</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load an orthographic projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadPerspective'>rsMatrixLoadPerspective</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a perspective projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadRotate'>rsMatrixLoadRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a rotation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadScale'>rsMatrixLoadScale</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a scaling matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadTranslate'>rsMatrixLoadTranslate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a translation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply a matrix by a vector or another matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixRotate'>rsMatrixRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a rotation to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixScale'>rsMatrixScale</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a scaling to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixSet'>rsMatrixSet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Set one element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a translation to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixTranspose'>rsMatrixTranspose</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Transpose a matrix place
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsPackColorTo8888'>rsPackColorTo8888</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a uchar4 RGBA from floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionAdd'>rsQuaternionAdd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Add two quaternions
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionConjugate'>rsQuaternionConjugate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Conjugate a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionDot'>rsQuaternionDot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Dot product of two quaternions
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionGetMatrixUnit'>rsQuaternionGetMatrixUnit</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get a rotation matrix from a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotate'>rsQuaternionLoadRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a rotation quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotateUnit'>rsQuaternionLoadRotateUnit</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Quaternion that represents a rotation about an arbitrary unit vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionMultiply'>rsQuaternionMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply a quaternion by a scalar or another quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionNormalize'>rsQuaternionNormalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Normalize a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionSet'>rsQuaternionSet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionSlerp'>rsQuaternionSlerp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Spherical linear interpolation between two quaternions
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsRand'>rsRand</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Pseudo-random number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sample a value from a texture allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetAnisotropy'>rsSamplerGetAnisotropy</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Anisotropy of the Sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetMagnification'>rsSamplerGetMagnification</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler magnification value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetMinification'>rsSamplerGetMinification</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler minification value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetWrapS'>rsSamplerGetWrapS</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap S value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetWrapT'>rsSamplerGetWrapT</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap T value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsSendToClient'>rsSendToClient</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send a message to the client, non-blocking
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsSendToClientBlocking'>rsSendToClientBlocking</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send a message to the client, blocking
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Set a cell of an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsTime'>rsTime</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Seconds since January 1, 1970
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsUnpackColor8888'>rsUnpackColor8888</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a float4 RGBA from uchar4
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsUptimeMillis'>rsUptimeMillis</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      System uptime in milliseconds
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsUptimeNanos'>rsUptimeNanos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      System uptime in nanoseconds
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsYuvToRGBA'>rsYuvToRGBA</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert a YUV value to RGBA
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal of a square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sign'>sign</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sign of a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sin'>sin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sincos'>sincos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine and cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sinh'>sinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sinpi'>sinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sqrt'>sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:step'>step</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      0 if less than a value, 0 otherwise
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tan'>tan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tanh'>tanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tanpi'>tanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Tangent of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tgamma'>tgamma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Gamma function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:trunc'>trunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Truncates a floating point
+    </td>
+  </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Deprecated Types</h2>
+<table class='jd-sumtable'><tbody>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_blend_dst_func'>rs_blend_dst_func</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Blend destination function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_blend_src_func'>rs_blend_src_func</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Blend source function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_cull_mode'>rs_cull_mode</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Culling mode
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_depth_func'>rs_depth_func</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Depth function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_font'>rs_font</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a Font
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a Mesh
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_primitive'>rs_primitive</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  How to intepret mesh vertex data
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramFragment
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramRaster
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramStore
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramVertex
+    </td>
+  </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Deprecated Functions</h2>
+<table class='jd-sumtable'><tbody>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsClamp'>rsClamp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Restrain a value to a range
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsFrac'>rsFrac</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Returns the fractional part of a float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsGetAllocation'>rsGetAllocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the Allocation for a given pointer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgAllocationSyncAll'>rsgAllocationSyncAll</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Sync the contents of an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindColorTarget'>rsgBindColorTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the color target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindConstant'>rsgBindConstant</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a constant allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindDepthTarget'>rsgBindDepthTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the depth target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindFont'>rsgBindFont</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a font object
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramFragment'>rsgBindProgramFragment</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramFragment
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramRaster'>rsgBindProgramRaster</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramRaster
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramStore'>rsgBindProgramStore</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramStore
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramVertex'>rsgBindProgramVertex</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramVertex
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindSampler'>rsgBindSampler</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindTexture'>rsgBindTexture</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a texture allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearAllRenderTargets'>rsgClearAllRenderTargets</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear all color and depth targets
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearColor'>rsgClearColor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the specified color from the surface
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearColorTarget'>rsgClearColorTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the color target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearDepth'>rsgClearDepth</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the depth surface
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearDepthTarget'>rsgClearDepthTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the depth target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawMesh'>rsgDrawMesh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a mesh
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawQuad'>rsgDrawQuad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a quad
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawQuadTexCoords'>rsgDrawQuadTexCoords</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a textured quad
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawRect'>rsgDrawRect</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a rectangle
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawSpriteScreenspace'>rsgDrawSpriteScreenspace</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw rectangles in screenspace
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawText'>rsgDrawText</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a text string
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgFinish'>rsgFinish</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  End rendering commands
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgFontColor'>rsgFontColor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the font color
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgGetHeight'>rsgGetHeight</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the surface height
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgGetWidth'>rsgGetWidth</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the surface width
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeasureText'>rsgMeasureText</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the bounding box for a text string
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshComputeBoundingBox'>rsgMeshComputeBoundingBox</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Compute a bounding box
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetIndexAllocation'>rsgMeshGetIndexAllocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return an allocation containing index data
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitive'>rsgMeshGetPrimitive</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the primitive
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitiveCount'>rsgMeshGetPrimitiveCount</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the number of index sets
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocation'>rsgMeshGetVertexAllocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return a vertex allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocationCount'>rsgMeshGetVertexAllocationCount</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the number of vertex allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramFragmentConstantColor'>rsgProgramFragmentConstantColor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the constant color for a fixed function emulation program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramRasterGetCullMode'>rsgProgramRasterGetCullMode</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program raster cull mode
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramRasterIsPointSpriteEnabled'>rsgProgramRasterIsPointSpriteEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program raster point sprite state
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendDstFunc'>rsgProgramStoreGetBlendDstFunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store blend destination function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendSrcFunc'>rsgProgramStoreGetBlendSrcFunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store blend source function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreGetDepthFunc'>rsgProgramStoreGetDepthFunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store depth function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskAlphaEnabled'>rsgProgramStoreIsColorMaskAlphaEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store alpha component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskBlueEnabled'>rsgProgramStoreIsColorMaskBlueEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store blur component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskGreenEnabled'>rsgProgramStoreIsColorMaskGreenEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store green component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskRedEnabled'>rsgProgramStoreIsColorMaskRedEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store red component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDepthMaskEnabled'>rsgProgramStoreIsDepthMaskEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store depth mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDitherEnabled'>rsgProgramStoreIsDitherEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store dither state
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexGetProjectionMatrix'>rsgProgramVertexGetProjectionMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the projection matrix for a fixed function vertex program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadModelMatrix'>rsgProgramVertexLoadModelMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Load the model matrix for a bound fixed function vertex program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadProjectionMatrix'>rsgProgramVertexLoadProjectionMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Load the projection matrix for a bound fixed function vertex program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadTextureMatrix'>rsgProgramVertexLoadTextureMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Load the texture matrix for a bound fixed function vertex program
+    </td>
+  </tr>
+</tbody></table>
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/overview.jd b/docs/html/guide/topics/renderscript/reference/overview.jd
new file mode 100644
index 0000000..f85b843
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/overview.jd
@@ -0,0 +1,2676 @@
+page.title=RenderScript Runtime API Reference
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> RenderScript is a high-performance runtime that provides compute operations at the native level.
+RenderScript code is compiled on devices at runtime to allow platform-independence as well.
+</p>
+
+<p> This reference documentation describes the RenderScript runtime APIs, which you can utilize
+to write RenderScript code in C99. The RenderScript compute header files are automatically
+included for you.
+</p>
+
+<p> To use RenderScript, you need to utilize the RenderScript runtime APIs documented here as well
+as the Android framework APIs for RenderScript.  For documentation on the Android framework
+APIs, see the <a target="_parent" href="http://developer.android.com/reference/android/renderscript/package-summary.html">android.renderscript</a> package reference.
+</p>
+
+<p> For more information on how to develop with RenderScript and how the runtime and Android
+framework APIs interact, see the <a target="_parent" href="http://developer.android.com/guide/topics/renderscript/index.html">RenderScript developer guide</a> and the <a target="_parent" href="http://developer.android.com/resources/samples/RenderScript/index.html">RenderScript samples</a>.
+</p>
+<h2>Numerical Types</h2>
+<p> <h5>Scalars:</h5>
+</p>
+
+<p> RenderScript supports the following scalar numerical types:
+<table>
+<tr><td>                 </td>  <td>8 bits        </td>   <td>16 bits         </td>   <td>32 bits       </td>   <td>64 bits</td></tr>
+<tr><td>Integer:         </td>  <td>char, <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>  </td>   <td>short, <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>  </td>   <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>       </td>   <td>long, long long, <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a></td></tr>
+<tr><td>Unsigned integer:</td>  <td>uchar, <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a></td>   <td>ushort, <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a></td>   <td>uint, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a></td>   <td>ulong, <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a></td></tr>
+<tr><td>Floating point:  </td>  <td>              </td>   <td>                </td>   <td>float         </td>   <td>double</td></tr>
+</table>
+</p>
+
+<p> <h5>Vectors:</h5>
+</p>
+
+<p> RenderScript supports fixed size vectors of length 2, 3, and 4.
+Vectors are declared using the common type name followed by a 2, 3, or 4.
+E.g. <a href='rs_value_types.html#android_rs:float4'>float4</a>, <a href='rs_value_types.html#android_rs:int3'>int3</a>, <a href='rs_value_types.html#android_rs:double2'>double2</a>, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>.
+</p>
+
+<p> To create vector literals, use the vector type followed by the values enclosed
+between parentheses, e.g. <code>(float3)(1.0f, 2.0f, 3.0f)</code>.
+</p>
+
+<p> Entries of a vector can be accessed using different naming styles.
+</p>
+
+<p> Single entries can be accessed by following the variable name with a dot and:<ul>
+<li>The letters x, y, z, and w,</li>
+<li>The letters r, g, b, and a,</li>
+<li>The letter s or S, followed by a zero based index.</li></ul>
+</p>
+
+<p> For example, with <code>int4 myVar;</code> the following are equivalent:<code><br/>
+  myVar.x == myVar.r == myVar.s0 == myVar.S0<br/>
+  myVar.y == myVar.g == myVar.s1 == myVar.S1<br/>
+  myVar.z == myVar.b == myVar.s2 == myVar.S2<br/>
+  myVar.w == myVar.a == myVar.s3 == myVar.S3</code>
+</p>
+
+<p> Multiple entries of a vector can be accessed at once by using an identifier that is
+the concatenation of multiple letters or indices.  The resulting vector has a size
+equal to the number of entries named.
+</p>
+
+<p> With the example above, the middle two entries can be accessed using
+<code>myVar.yz</code>, <code>myVar.gb</code>, <code>myVar.s12</code>, and <code>myVar.S12</code>.
+</p>
+
+<p> The entries don't have to be contiguous or in increasing order.  Entries can even be
+repeated, as long as we're not trying to assign to it.  You also can't mix the naming
+styles.
+</p>
+
+<p> Here are examples of what can or can't be done:<code><br/>
+float4 v4;<br/>
+float3 v3;<br/>
+float2 v2;<br/>
+v2 = v4.xx; // Valid<br/>
+v3 = v4.zxw; // Valid<br/>
+v3 = v4.bba; // Valid<br/>
+v3 = v4.s032; // Valid<br/>
+v3.s120 = v4.S233; // Valid<br/>
+v4.yz = v3.rg; // Valid<br/>
+v4.yzx = v3.rg; // Invalid: mismatched sizes<br/>
+v4.yzz = v3; // Invalid: z appears twice in an assignment<br/>
+v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...<br/>
+v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3<br/>
+</code>
+</p>
+
+<p> <h5>Matrices and Quaternions:</h5>
+</p>
+
+<p> RenderScript supports fixed size square matrices of floats of size 2x2, 3x3, and 4x4.
+The types are named <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>, <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>, and <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>.  See
+<a href='rs_matrix.html'>Matrix Functions</a> for the list of operations.
+</p>
+
+<p> Quaternions are also supported via <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>.  See <a href='rs_quaternion.html'>Quaterion Functions</a> for the list
+of operations.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char2'>char2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char3'>char3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char4'>char4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double2'>double2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double3'>double3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double4'>double4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float2'>float2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float3'>float3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float4'>float4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int2'>int2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int3'>int3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int4'>int4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long2'>long2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long3'>long3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long4'>long4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2x2 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      3x3 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      4x4 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short2'>short2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short3'>short3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short4'>short4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:size_t'>size_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Unsigned size type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ssize_t'>ssize_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Signed size type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar'>uchar</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint'>uint</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint2'>uint2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint3'>uint3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint4'>uint4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong'>ulong</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort'>ushort</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 16 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 16 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 16 bit unsigned integers
+    </td>
+  </tr>
+</tbody></table>
+<h2>Object Types</h2>
+<p> The types below are used to manipulate RenderScript objects like allocations, samplers,
+elements, and scripts.  Most of these object are created using the Java RenderScript APIs.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Enum for selecting cube map faces
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Bitfield to specify how an allocation is used
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Element data kind
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Element basic data type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to an element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap T value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Script
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Type
+    </td>
+  </tr>
+</tbody></table>
+<h2>Conversion Functions</h2>
+<p> The functions below convert from a numerical vector type to another, of from one color
+representation to another.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:convert'>convert</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert numerical vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsPackColorTo8888'>rsPackColorTo8888</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a uchar4 RGBA from floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsUnpackColor8888'>rsUnpackColor8888</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a float4 RGBA from uchar4
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsYuvToRGBA'>rsYuvToRGBA</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert a YUV value to RGBA
+    </td>
+  </tr>
+</tbody></table>
+<h2>Mathematical Constants and Functions</h2>
+<p> The mathematical functions below can be applied to scalars and vectors.   When applied
+to vectors, the returned value is a vector of the function applied to each entry of the input.
+</p>
+
+<p> For example:<code><br/>
+float3 a, b;<br/>
+// The following call sets<br/>
+//   a.x to sin(b.x),<br/>
+//   a.y to sin(b.y), and<br/>
+//   a.z to sin(b.z).<br/>
+a = sin(b);<br/>
+</code>
+</p>
+
+<p> See <a href='rs_vector_math.html'>Vector Math Functions</a> for functions like <a href='rs_vector_math.html#android_rs:distance'>distance</a>() and <a href='rs_vector_math.html#android_rs:length'>length</a>() that interpret
+instead the input as a single vector in n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full.  Under rs_fp_relaxed, subnormal values may be flushed to zero and
+rounding may be done towards zero.  In comparison, rs_fp_full requires correct handling of
+subnormal values, i.e. smaller than 1.17549435e-38f.  rs_fp_rull also requires round to nearest
+with ties to even.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions.  Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision.  Additionally,
+  subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+  infinity input may not be handled correctly.</li>
+<li>half_: May perform internal computations using 16 bit floats.  Additionally, subnormal
+  values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Constants</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_1_PI'>M_1_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      1 / pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_2_PI'>M_2_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 / pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_2_SQRTPI'>M_2_SQRTPI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 / sqrt(pi), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_E'>M_E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LN10'>M_LN10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_e(10), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LN2'>M_LN2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_e(2), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LOG10E'>M_LOG10E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_10(e), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LOG2E'>M_LOG2E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_2(e), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI'>M_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI_2'>M_PI_2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi / 2, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI_4'>M_PI_4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi / 4, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_SQRT1_2'>M_SQRT1_2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      1 / sqrt(2), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_SQRT2'>M_SQRT2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      sqrt(2), as a 32 bit float
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:abs'>abs</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Absolute value of an integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acos'>acos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acosh'>acosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acospi'>acospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse cosine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asin'>asin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asinh'>asinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asinpi'>asinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse sine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan'>atan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan2'>atan2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent of a ratio
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent of a ratio, divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atanh'>atanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atanpi'>atanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cbrt'>cbrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cube root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ceil'>ceil</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Smallest integer not less than a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:clamp'>clamp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Restrain a value to a range
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:clz'>clz</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Number of leading 0 bits
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:copysign'>copysign</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copies the sign of a number to another
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cos'>cos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cosh'>cosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hypebolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cospi'>cospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cosine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:degrees'>degrees</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Converts radians into degrees
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:erf'>erf</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mathematical error function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:erfc'>erfc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mathematical complementary error function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp'>exp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp10'>exp10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      10 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp2'>exp2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:expm1'>expm1</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e raised to a number minus one
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fabs'>fabs</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Absolute value of a float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fdim'>fdim</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive difference between two values
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:floor'>floor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Smallest integer not greater than a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fma'>fma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply and add
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmax'>fmax</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Maximum of two floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmin'>fmin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Minimum of two floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmod'>fmod</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Modulo
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fract'>fract</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive fractional part
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:frexp'>frexp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Binary mantissa and exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_recip'>half_recip</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal of a square root computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Square root computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:hypot'>hypot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hypotenuse
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ilogb'>ilogb</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base two exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ldexp'>ldexp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Creates a floating point from mantissa and exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:lgamma'>lgamma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm of the gamma function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log'>log</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log10'>log10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base 10 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log1p'>log1p</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm of a value plus 1
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log2'>log2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base 2 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:logb'>logb</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base two exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:mad'>mad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply and add
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:max'>max</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Maximum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:min'>min</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Minimum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:mix'>mix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mixes two values
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:modf'>modf</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Integral and fractional components
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:nan'>nan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Not a Number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acos'>native_acos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse cosine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asin'>native_asin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse sine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan'>native_atan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent of a ratio
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent of a ratio, divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cube root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cos'>native_cos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hypebolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cosine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_divide'>native_divide</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp'>native_exp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate e raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate 10 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate 2 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate e raised to a number minus one
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hypotenuse
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log'>native_log</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate natural logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log10'>native_log10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate base 10 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate natural logarithm of a value plus 1
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log2'>native_log2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate base 2 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_powr'>native_powr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate positive base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_recip'>native_recip</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate reciprocal
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate nth root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate reciprocal of a square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sin'>native_sin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine and cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tan'>native_tan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate tangent of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:nextafter'>nextafter</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Next floating point number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:pow'>pow</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:pown'>pown</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base raised to an integer exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:powr'>powr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:radians'>radians</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Converts degrees into radians
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:remainder'>remainder</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Remainder of a division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:remquo'>remquo</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Remainder and quotient of a division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rint'>rint</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Round to even
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rootn'>rootn</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Nth root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:round'>round</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Round away from zero
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsRand'>rsRand</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Pseudo-random number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal of a square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sign'>sign</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sign of a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sin'>sin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sincos'>sincos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine and cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sinh'>sinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sinpi'>sinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sqrt'>sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:step'>step</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      0 if less than a value, 0 otherwise
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tan'>tan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tanh'>tanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tanpi'>tanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Tangent of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tgamma'>tgamma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Gamma function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:trunc'>trunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Truncates a floating point
+    </td>
+  </tr>
+</tbody></table>
+<h2>Vector Math Functions</h2>
+<p> These functions interpret the input arguments as representation of vectors in
+n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full.  See <a href='rs_math.html'>Mathematical Constants and Functions</a> for details.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions.  Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision.  Additionally,
+  subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+  infinity input may not be handled correctly.</li>
+<li>fast_: May perform internal computations using 16 bit floats.  Additionally, subnormal
+  values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:cross'>cross</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cross product of two vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:distance'>distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:dot'>dot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Dot product of two vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate normalized vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:length'>length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximately normalize a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Normalize a vector
+    </td>
+  </tr>
+</tbody></table>
+<h2>Matrix Functions</h2>
+<p> These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4.
+They are particularly useful for graphical transformations and are compatible
+with OpenGL.
+</p>
+
+<p> We use a zero-based index for rows and columns.  E.g. the last element of a
+<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a> is found at (3, 3).
+</p>
+
+<p> RenderScript uses column-major matrices and column-based vectors.  Transforming
+a vector is done by postmultiplying the vector, e.g. <code>(matrix * vector)</code>,
+as provided by <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> To create a transformation matrix that performs two transformations at once,
+multiply the two source matrices, with the first transformation as the right
+argument.  E.g. to create a transformation matrix that applies the
+transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1)</code>.
+This derives from <code>s2 * (s1 * v)</code>, which is <code>(s2 * s1) * v</code>.
+</p>
+
+<p> We have two style of functions to create transformation matrices:
+rsMatrixLoad<i>Transformation</i> and rsMatrix<i>Transformation</i>.  The former
+style simply stores the transformation matrix in the first argument.  The latter
+modifies a pre-existing transformation matrix so that the new transformation
+happens first.  E.g. if you call <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>() on a matrix that already
+does a scaling, the resulting matrix when applied to a vector will first do the
+translation then the scaling.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsExtractFrustumPlanes'>rsExtractFrustumPlanes</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Compute frustum planes
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsIsSphereInFrustum'>rsIsSphereInFrustum</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Checks if a sphere is within the frustum planes
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixGet'>rsMatrixGet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get one element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixInverse'>rsMatrixInverse</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverts a matrix in place
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixInverseTranspose'>rsMatrixInverseTranspose</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverts and transpose a matrix in place
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoad'>rsMatrixLoad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load or copy a matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadFrustum'>rsMatrixLoadFrustum</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a frustum projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadIdentity'>rsMatrixLoadIdentity</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load identity matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadMultiply'>rsMatrixLoadMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply two matrices
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadOrtho'>rsMatrixLoadOrtho</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load an orthographic projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadPerspective'>rsMatrixLoadPerspective</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a perspective projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadRotate'>rsMatrixLoadRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a rotation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadScale'>rsMatrixLoadScale</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a scaling matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadTranslate'>rsMatrixLoadTranslate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a translation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply a matrix by a vector or another matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixRotate'>rsMatrixRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a rotation to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixScale'>rsMatrixScale</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a scaling to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixSet'>rsMatrixSet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Set one element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a translation to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixTranspose'>rsMatrixTranspose</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Transpose a matrix place
+    </td>
+  </tr>
+</tbody></table>
+<h2>Quaternion Functions</h2>
+<p> The following functions manipulate quaternions.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionAdd'>rsQuaternionAdd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Add two quaternions
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionConjugate'>rsQuaternionConjugate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Conjugate a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionDot'>rsQuaternionDot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Dot product of two quaternions
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionGetMatrixUnit'>rsQuaternionGetMatrixUnit</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get a rotation matrix from a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotate'>rsQuaternionLoadRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a rotation quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotateUnit'>rsQuaternionLoadRotateUnit</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Quaternion that represents a rotation about an arbitrary unit vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionMultiply'>rsQuaternionMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply a quaternion by a scalar or another quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionNormalize'>rsQuaternionNormalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Normalize a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionSet'>rsQuaternionSet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionSlerp'>rsQuaternionSlerp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Spherical linear interpolation between two quaternions
+    </td>
+  </tr>
+</tbody></table>
+<h2>Atomic Update Functions</h2>
+<p> To update values shared between multiple threads, use the functions below.
+They ensure that the values are atomically updated, i.e. that the memory
+reads, the updates, and the memory writes are done in the right order.
+</p>
+
+<p> These functions are slower than their non-atomic equivalents, so use
+them only when synchronization is needed.
+</p>
+
+<p> Note that in RenderScript, your code is likely to be running in separate
+threads even though you did not explicitely create them.  The RenderScript
+runtime will very often split the execution of one kernel across multiple
+threads.  Updating globals should be done with atomic functions.  If possible,
+modify your algorithm to avoid them altogether.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe addition
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicAnd'>rsAtomicAnd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise and
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicCas'>rsAtomicCas</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe compare and set
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicDec'>rsAtomicDec</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe decrement
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicInc'>rsAtomicInc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe increment
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicMax'>rsAtomicMax</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe maximum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicMin'>rsAtomicMin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe minimum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicOr'>rsAtomicOr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise or
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe subtraction
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicXor'>rsAtomicXor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise exclusive or
+    </td>
+  </tr>
+</tbody></table>
+<h2>Time Functions and Types</h2>
+<p> The functions below can be used to tell the current clock time and the current
+system up time.  It is not recommended to call these functions inside of a kernel.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Seconds since January 1, 1970
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Date and time structure
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsGetDt'>rsGetDt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Elapsed time since last call
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsLocaltime'>rsLocaltime</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert to local time
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsTime'>rsTime</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Seconds since January 1, 1970
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsUptimeMillis'>rsUptimeMillis</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      System uptime in milliseconds
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsUptimeNanos'>rsUptimeNanos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      System uptime in nanoseconds
+    </td>
+  </tr>
+</tbody></table>
+<h2>Allocation Data Access Functions</h2>
+<p> The functions below can be used to get and set the cells that comprise
+an allocation.
+<ul>
+<li>Individual cells are accessed using the rsGetElementAt* and
+  <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a> functions.</li>
+<li>Multiple cells can be copied using the rsAllocationCopy* and
+  rsAllocationV* functions.</li>
+<li>For getting values through a sampler, use <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>.</li>
+</ul>
+The <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a> and rsSetElement* functions are somewhat misnamed.
+They don't get or set elements, which are akin to data types; they get
+or set cells.  Think of them as rsGetCellAt and and rsSetCellAt.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationCopy1DRange'>rsAllocationCopy1DRange</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copy consecutive cells between allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationCopy2DRange'>rsAllocationCopy2DRange</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copy a rectangular region of cells between allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get a vector from an allocation of scalars
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Store a vector into an allocation of scalars
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Return a cell from an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the U component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the V component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the Y component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sample a value from a texture allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Set a cell of an allocation
+    </td>
+  </tr>
+</tbody></table>
+<h2>Object Characteristics Functions</h2>
+<p> The functions below can be used to query the characteristics of an Allocation, Element,
+or Sampler object.  These objects are created from Java.  You can't create them from a
+script.
+</p>
+
+<p> <h5>Allocations:</h5>
+</p>
+
+<p> Allocations are the primary method used to pass data to and from RenderScript kernels.
+</p>
+
+<p> They are a structured collection of cells that can be used to store bitmaps, textures,
+arbitrary data points, etc.
+</p>
+
+<p> This collection of cells may have many dimensions (X, Y, Z, Array0, Array1, Array2, Array3),
+faces (for cubemaps), and level of details (for mipmapping).
+</p>
+
+<p> See the <a href='http://developer.android.com/reference/android/renderscript/Allocation.html'>android.renderscript.Allocation</a> for details on to create Allocations.
+</p>
+
+<p> <h5>Elements:</h5>
+</p>
+
+<p> The term "element" is used a bit ambiguously in RenderScript, as both type information
+for the cells of an Allocation and the instantiation of that type.  For example:<ul>
+<li><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> is a handle to a type specification, and</li>
+<li>In functions like <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>(), "element" means the instantiation of the type,
+    i.e. a cell of an Allocation.</li></ul>
+</p>
+
+<p> The functions below let you query the characteristics of the type specificiation.
+</p>
+
+<p> An Element can specify a simple data types as found in C, e.g. an integer, float, or
+boolean.  It can also specify a handle to a RenderScript object.  See <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a> for
+a list of basic types.
+</p>
+
+<p> Elements can specify fixed size vector (of size 2, 3, or 4) versions of the basic types.
+Elements can be grouped together into complex Elements, creating the equivalent of
+C structure definitions.
+</p>
+
+<p> Elements can also have a kind, which is semantic information used to interpret pixel
+data.  See <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>.
+</p>
+
+<p> When creating Allocations of common elements, you can simply use one of the many predefined
+Elements like <a href='http://developer.android.com/reference/android/renderscript/Element.html#F32_2(android.renderscript.RenderScript)'>F32_2</a>.
+</p>
+
+<p> To create complex Elements, use the <a href='http://developer.android.com/reference/android/renderscript/Element.Builder.html'>Element.Builder</a> Java class.
+</p>
+
+<p> <h5>Samplers:</h5>
+</p>
+
+<p> Samplers objects define how Allocations can be read as structure within a kernel.
+See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimFaces'>rsAllocationGetDimFaces</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Presence of more than one face
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimLOD'>rsAllocationGetDimLOD</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Presence of levels of detail
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimX'>rsAllocationGetDimX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the X dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimY'>rsAllocationGetDimY</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the Y dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimZ'>rsAllocationGetDimZ</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the Z dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetElement'>rsAllocationGetElement</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the object that describes the cell of an Allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Release an object
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetBytesSize'>rsElementGetBytesSize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetDataKind'>rsElementGetDataKind</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Kind of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetDataType'>rsElementGetDataType</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Data type of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sub-element of a complex Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementArraySize'>rsElementGetSubElementArraySize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Array size of a sub-element of a complex Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementCount'>rsElementGetSubElementCount</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Number of sub-elements
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementName'>rsElementGetSubElementName</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Name of a sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementNameLength'>rsElementGetSubElementNameLength</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Length of the name of a sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementOffsetBytes'>rsElementGetSubElementOffsetBytes</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Offset of the instantiated sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Vector size of the Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Check for an empty handle
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetAnisotropy'>rsSamplerGetAnisotropy</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Anisotropy of the Sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetMagnification'>rsSamplerGetMagnification</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler magnification value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetMinification'>rsSamplerGetMinification</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler minification value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetWrapS'>rsSamplerGetWrapS</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap S value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetWrapT'>rsSamplerGetWrapT</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap T value
+    </td>
+  </tr>
+</tbody></table>
+<h2>Kernel Invocation Functions and Types</h2>
+<p> The <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>() function can be used to invoke the root kernel of a script.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rs_for_each_strategy_t'>rs_for_each_strategy_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Suggested cell processing order
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cell iteration information
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Invoke the root kernel of a script
+    </td>
+  </tr>
+</tbody></table>
+<h2>Input/Output Functions</h2>
+<p> These functions are used to:<ul>
+<li>Send information to the Java client, and</li>
+<li>Send the processed allocation or receive the next allocation to process.</li></ul>
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsAllocationIoReceive'>rsAllocationIoReceive</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Receive new content from the queue
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsAllocationIoSend'>rsAllocationIoSend</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send new content to the queue
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsSendToClient'>rsSendToClient</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send a message to the client, non-blocking
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsSendToClientBlocking'>rsSendToClientBlocking</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send a message to the client, blocking
+    </td>
+  </tr>
+</tbody></table>
+<h2>Debugging Functions</h2>
+<p> The functions below are intended to be used during application developement.
+They should not be used in shipping applications.
+</p>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_debug.html#android_rs:rsDebug'>rsDebug</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Log a message and values
+    </td>
+  </tr>
+</tbody></table>
+<h2>Graphics Functions and Types</h2>
+<p> The graphics subsystem of RenderScript has been deprecated.
+</p>
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_allocation_data.jd b/docs/html/guide/topics/renderscript/reference/rs_allocation_data.jd
new file mode 100644
index 0000000..3735cce
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_allocation_data.jd
@@ -0,0 +1,2925 @@
+page.title=RenderScript Allocation Data Access Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below can be used to get and set the cells that comprise
+an allocation.
+<ul>
+<li>Individual cells are accessed using the rsGetElementAt* and
+  <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a> functions.</li>
+<li>Multiple cells can be copied using the rsAllocationCopy* and
+  rsAllocationV* functions.</li>
+<li>For getting values through a sampler, use <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>.</li>
+</ul>
+The <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a> and rsSetElement* functions are somewhat misnamed.
+They don't get or set elements, which are akin to data types; they get
+or set cells.  Think of them as rsGetCellAt and and rsSetCellAt.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationCopy1DRange'>rsAllocationCopy1DRange</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copy consecutive cells between allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationCopy2DRange'>rsAllocationCopy2DRange</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copy a rectangular region of cells between allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get a vector from an allocation of scalars
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Store a vector into an allocation of scalars
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Return a cell from an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the U component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the V component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the Y component of an allocation of YUVs
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sample a value from a texture allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Set a cell of an allocation
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAllocationCopy1DRange'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationCopy1DRange</span>
+    <span class='normal'>: Copy consecutive cells between allocations</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsAllocationCopy1DRange(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> dstAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstOff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstMip, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> count, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> srcAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcOff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcMip);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>dstAlloc</th><td>Allocation to copy cells into.</td></tr>
+    <tr><th>dstOff</th><td>Offset in the destination of the first cell to be copied into.</td></tr>
+    <tr><th>dstMip</th><td>Mip level in the destination allocation.  0 if mip mapping is not used.</td></tr>
+    <tr><th>count</th><td>Number of cells to be copied.</td></tr>
+    <tr><th>srcAlloc</th><td>Source allocation.</td></tr>
+    <tr><th>srcOff</th><td>Offset in the source of the first cell to be copied.</td></tr>
+    <tr><th>srcMip</th><td>Mip level in the source allocation.  0 if mip mapping is not used.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Copies the specified number of cells from one allocation to another.
+</p>
+
+<p> The two allocations must be different.  Using this function to copy whithin
+the same allocation yields undefined results.
+</p>
+
+<p> The function does not validate whether the offset plus count exceeds the size
+of either allocation.  Be careful!
+</p>
+
+<p> This function should only be called between 1D allocations.  Calling it
+on other allocations is undefined.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationCopy2DRange'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationCopy2DRange</span>
+    <span class='normal'>: Copy a rectangular region of cells between allocations</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsAllocationCopy2DRange(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> dstAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstXoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstYoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstMip, <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a> dstFace, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> width, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> height, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> srcAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcXoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcYoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcMip, <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a> srcFace);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>dstAlloc</th><td>Allocation to copy cells into.</td></tr>
+    <tr><th>dstXoff</th><td>X offset in the destination of the region to be set.</td></tr>
+    <tr><th>dstYoff</th><td>Y offset in the destination of the region to be set.</td></tr>
+    <tr><th>dstMip</th><td>Mip level in the destination allocation.  0 if mip mapping is not used.</td></tr>
+    <tr><th>dstFace</th><td>Cubemap face of the destination allocation.  Ignored for allocations that aren't cubemaps.</td></tr>
+    <tr><th>width</th><td>Width of the incoming region to update.</td></tr>
+    <tr><th>height</th><td>Height of the incoming region to update.</td></tr>
+    <tr><th>srcAlloc</th><td>Source allocation.</td></tr>
+    <tr><th>srcXoff</th><td>X offset in the source.</td></tr>
+    <tr><th>srcYoff</th><td>Y offset in the source.</td></tr>
+    <tr><th>srcMip</th><td>Mip level in the source allocation.  0 if mip mapping is not used.</td></tr>
+    <tr><th>srcFace</th><td>Cubemap face of the source allocation.  Ignored for allocations that aren't cubemaps.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Copies a rectangular region of cells from one allocation to another.
+(width * heigth) cells are copied.
+</p>
+
+<p> The two allocations must be different.  Using this function to copy whithin
+the same allocation yields undefined results.
+</p>
+
+<p> The function does not validate whether the the source or destination region
+exceeds the size of its respective allocation.  Be careful!
+</p>
+
+<p> This function should only be called between 2D allocations.  Calling it
+on other allocations is undefined.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationVLoadX'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationVLoadX</span>
+    <span class='normal'>: Get a vector from an allocation of scalars</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsAllocationVLoadX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsAllocationVLoadX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsAllocationVLoadX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsAllocationVLoadX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsAllocationVLoadX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsAllocationVLoadX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsAllocationVLoadX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsAllocationVLoadX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsAllocationVLoadX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsAllocationVLoadX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsAllocationVLoadX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsAllocationVLoadX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsAllocationVLoadX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsAllocationVLoadX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsAllocationVLoadX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsAllocationVLoadX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsAllocationVLoadX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsAllocationVLoadX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsAllocationVLoadX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsAllocationVLoadX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsAllocationVLoadX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsAllocationVLoadX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsAllocationVLoadX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsAllocationVLoadX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsAllocationVLoadX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsAllocationVLoadX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsAllocationVLoadX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsAllocationVLoadX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsAllocationVLoadX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsAllocationVLoadX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsAllocationVLoadX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsAllocationVLoadX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsAllocationVLoadX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsAllocationVLoadX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsAllocationVLoadX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsAllocationVLoadX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsAllocationVLoadX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsAllocationVLoadX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsAllocationVLoadX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsAllocationVLoadX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsAllocationVLoadX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsAllocationVLoadX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsAllocationVLoadX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsAllocationVLoadX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsAllocationVLoadX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsAllocationVLoadX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsAllocationVLoadX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsAllocationVLoadX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsAllocationVLoadX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsAllocationVLoadX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsAllocationVLoadX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsAllocationVLoadX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsAllocationVLoadX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsAllocationVLoadX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsAllocationVLoadX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsAllocationVLoadX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsAllocationVLoadX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsAllocationVLoadX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsAllocationVLoadX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsAllocationVLoadX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsAllocationVLoadX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsAllocationVLoadX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsAllocationVLoadX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsAllocationVLoadX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsAllocationVLoadX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsAllocationVLoadX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsAllocationVLoadX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsAllocationVLoadX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsAllocationVLoadX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsAllocationVLoadX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsAllocationVLoadX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsAllocationVLoadX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsAllocationVLoadX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsAllocationVLoadX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsAllocationVLoadX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsAllocationVLoadX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsAllocationVLoadX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsAllocationVLoadX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsAllocationVLoadX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsAllocationVLoadX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsAllocationVLoadX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsAllocationVLoadX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsAllocationVLoadX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsAllocationVLoadX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsAllocationVLoadX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsAllocationVLoadX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsAllocationVLoadX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsAllocationVLoadX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsAllocationVLoadX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsAllocationVLoadX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>a</th><td>Allocation to get the data from.</td></tr>
+    <tr><th>x</th><td>X offset in the allocation of the first cell to be copied from.</td></tr>
+    <tr><th>y</th><td>Y offset in the allocation of the first cell to be copied from.</td></tr>
+    <tr><th>z</th><td>Z offset in the allocation of the first cell to be copied from.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function returns a vector composed of successive cells of the allocation.
+It assumes that the allocation contains scalars.
+</p>
+
+<p> The "X" in the name indicates that successive values are extracted by
+increasing the X index.  There are currently no functions to get successive
+values incrementing other dimensions.  Use multiple calls to rsGetElementAt()
+instead.
+</p>
+
+<p> For example, when calling rsAllocationVLoadX_int4(a, 20, 30), an int4 composed
+of a[20, 30], a[21, 30], a[22, 30], and a[23, 30] is returned.
+</p>
+
+<p> When retrieving from a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for the
+mono dimensional allocations.
+</p>
+
+<p> For efficiency, this function does not validate the inputs.  Trying to wrap
+the X index, exceeding the size of the allocation, or using indices incompatible
+with the dimensionality of the allocation yields undefined results.
+</p>
+
+<p> See also <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationVStoreX'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationVStoreX</span>
+    <span class='normal'>: Store a vector into an allocation of scalars</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsAllocationVStoreX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsAllocationVStoreX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>a</th><td>Allocation to store the data into.</td></tr>
+    <tr><th>val</th><td>Value to be stored.</td></tr>
+    <tr><th>x</th><td>X offset in the allocation of the first cell to be copied into.</td></tr>
+    <tr><th>y</th><td>Y offset in the allocation of the first cell to be copied into.</td></tr>
+    <tr><th>z</th><td>Z offset in the allocation of the first cell to be copied into.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function stores the entries of a vector into successive cells of an allocation.
+It assumes that the allocation contains scalars.
+</p>
+
+<p> The "X" in the name indicates that successive values are stored by increasing
+the X index.  There are currently no functions to store successive values
+incrementing other dimensions.  Use multiple calls to rsSetElementAt() instead.
+</p>
+
+<p> For example, when calling rsAllocationVStoreX_int3(a, v, 20, 30), v.x is stored
+at a[20, 30], v.y at a[21, 30], and v.z at a[22, 30].
+</p>
+
+<p> When storing into a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for the
+mono dimensional allocations.
+</p>
+
+<p> For efficiency, this function does not validate the inputs.  Trying to wrap the
+X index, exceeding the size of the allocation, or using indexes incompatible
+with the dimensionality of the allocation yiels undefined results.
+</p>
+
+<p> See also <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsGetElementAt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsGetElementAt</span>
+    <span class='normal'>: Return a cell from an allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>char rsGetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>char rsGetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>char rsGetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsGetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsGetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsGetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsGetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsGetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsGetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsGetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsGetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsGetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>const void* rsGetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>const void* rsGetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>const void* rsGetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>double rsGetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>double rsGetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>double rsGetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsGetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsGetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsGetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsGetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsGetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsGetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsGetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsGetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsGetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float rsGetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float rsGetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float rsGetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsGetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsGetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsGetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsGetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsGetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsGetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsGetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsGetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsGetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int rsGetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int rsGetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int rsGetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsGetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsGetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsGetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsGetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsGetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsGetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsGetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsGetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsGetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>long rsGetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>long rsGetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>long rsGetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsGetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsGetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsGetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsGetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsGetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsGetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsGetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsGetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsGetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>short rsGetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>short rsGetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>short rsGetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsGetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsGetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsGetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsGetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsGetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsGetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsGetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsGetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsGetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsGetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsGetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsGetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsGetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsGetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsGetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsGetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsGetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsGetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsGetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsGetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsGetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsGetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsGetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsGetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsGetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsGetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsGetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsGetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsGetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsGetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> rsGetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> rsGetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> rsGetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsGetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsGetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsGetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsGetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsGetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsGetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsGetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsGetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsGetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsGetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsGetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsGetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsGetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsGetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsGetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsGetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsGetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsGetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsGetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsGetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsGetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function extracts a single cell from an allocation.
+</p>
+
+<p> When retrieving from a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for the
+mono dimensional allocations.
+</p>
+
+<p> This function has two styles.  One returns the address of the value using a void*,
+the other returns the actual value, e.g. rsGetElementAt() vs. rsGetElementAt_int4().
+For primitive types, always use the latter as it is more efficient.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsGetElementAtYuv_uchar_U'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsGetElementAtYuv_uchar_U</span>
+    <span class='normal'>: Get the U component of an allocation of YUVs</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAtYuv_uchar_U(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Extracts the U component of a single YUV value from a 2D allocation of YUVs.
+</p>
+
+<p> Inside an allocation, Y, U, and V components may be stored if different planes
+and at different resolutions.  The x, y coordinates provided here are in the
+dimensions of the Y plane.
+</p>
+
+<p> See <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsGetElementAtYuv_uchar_V'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsGetElementAtYuv_uchar_V</span>
+    <span class='normal'>: Get the V component of an allocation of YUVs</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAtYuv_uchar_V(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Extracts the V component of a single YUV value from a 2D allocation of YUVs.
+</p>
+
+<p> Inside an allocation, Y, U, and V components may be stored if different planes
+and at different resolutions.  The x, y coordinates provided here are in the
+dimensions of the Y plane.
+</p>
+
+<p> See <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsGetElementAtYuv_uchar_Y'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsGetElementAtYuv_uchar_Y</span>
+    <span class='normal'>: Get the Y component of an allocation of YUVs</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAtYuv_uchar_Y(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Extracts the Y component of a single YUV value from a 2D allocation of YUVs.
+</p>
+
+<p> Inside an allocation, Y, U, and V components may be stored if different planes
+and at different resolutions.  The x, y coordinates provided here are in the
+dimensions of the Y plane.
+</p>
+
+<p> See <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>() and <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSample'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSample</span>
+    <span class='normal'>: Sample a value from a texture allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, float location);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, float location, float lod);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, <a href='rs_value_types.html#android_rs:float2'>float2</a> location);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, <a href='rs_value_types.html#android_rs:float2'>float2</a> location, float lod);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>a</th><td>Allocation to sample from.</td></tr>
+    <tr><th>s</th><td>Sampler state.</td></tr>
+    <tr><th>location</th><td>Location to sample from.</td></tr>
+    <tr><th>lod</th><td>Mip level to sample from, for fractional values mip levels will be interpolated if RS_SAMPLER_LINEAR_MIP_LINEAR is used.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fetches a value from a texture allocation in a way described by the sampler.
+</p>
+
+<p> If your allocation is 1D, use the variant with float for location.  For 2D,
+use the float2 variant.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.Sampler</a> for more details.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSetElementAt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSetElementAt</span>
+    <span class='normal'>: Set a cell of an allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsSetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, void* ptr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, void* ptr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, char val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, char val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, char val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, double val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, double val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, double val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, float val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, float val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, float val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, int val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, int val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, int val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, long val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, long val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, long val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, short val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, short val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, short val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsSetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function stores a value into a single cell of an allocation.
+</p>
+
+<p> When storing into a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for
+the mono dimensional allocations.
+</p>
+
+<p> This function has two styles.  One passes the value to be stored using a void*,
+the other has the actual value as an argument, e.g. rsSetElementAt() vs.
+rsSetElementAt_int4().  For primitive types, always use the latter as it is
+more efficient.
+</p>
+
+<p> See also <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>().
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_atomic.jd b/docs/html/guide/topics/renderscript/reference/rs_atomic.jd
new file mode 100644
index 0000000..e7dde80
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_atomic.jd
@@ -0,0 +1,506 @@
+page.title=RenderScript Atomic Update Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> To update values shared between multiple threads, use the functions below.
+They ensure that the values are atomically updated, i.e. that the memory
+reads, the updates, and the memory writes are done in the right order.
+</p>
+
+<p> These functions are slower than their non-atomic equivalents, so use
+them only when synchronization is needed.
+</p>
+
+<p> Note that in RenderScript, your code is likely to be running in separate
+threads even though you did not explicitely create them.  The RenderScript
+runtime will very often split the execution of one kernel across multiple
+threads.  Updating globals should be done with atomic functions.  If possible,
+modify your algorithm to avoid them altogether.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe addition
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicAnd'>rsAtomicAnd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise and
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicCas'>rsAtomicCas</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe compare and set
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicDec'>rsAtomicDec</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe decrement
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicInc'>rsAtomicInc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe increment
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicMax'>rsAtomicMax</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe maximum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicMin'>rsAtomicMin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe minimum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicOr'>rsAtomicOr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise or
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe subtraction
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_atomic.html#android_rs:rsAtomicXor'>rsAtomicXor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Thread-safe bitwise exclusive or
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAtomicAdd'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicAdd</span>
+    <span class='normal'>: Thread-safe addition</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAdd(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAdd(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+    <tr><th>value</th><td>Amount to add.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly adds a value to the value at addr, i.e. <code>*addr += value</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicAnd'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicAnd</span>
+    <span class='normal'>: Thread-safe bitwise and</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAnd(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAnd(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+    <tr><th>value</th><td>Value to and with.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly performs a bitwise and of two values, storing the result back at addr,
+i.e. <code>*addr &amp;= value</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicCas'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicCas</span>
+    <span class='normal'>: Thread-safe compare and set</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicCas(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> compareValue, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> newValue);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAtomicCas(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> compareValue, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> newValue);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to compare and replace if the test passes.</td></tr>
+    <tr><th>compareValue</th><td>Value to test *addr against.</td></tr>
+    <tr><th>newValue</th><td>Value to write if the test passes.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> If the value at addr matches compareValue then the newValue is written at addr,
+i.e. <code>if (*addr == compareValue) { *addr = newValue; }</code>.
+</p>
+
+<p> You can check that the value was written by checking that the value returned
+by rsAtomicCas() is compareValue.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicDec'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicDec</span>
+    <span class='normal'>: Thread-safe decrement</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicDec(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicDec(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to decrement.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly subtracts one from the value at addr.  This is equivalent to <code><a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>(addr, 1)</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicInc'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicInc</span>
+    <span class='normal'>: Thread-safe increment</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicInc(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicInc(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to increment.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly adds one to the value at addr.  This is equivalent to <code><a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>(addr, 1)</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicMax'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicMax</span>
+    <span class='normal'>: Thread-safe maximum</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicMax(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAtomicMax(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+    <tr><th>value</th><td>Comparison value.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly sets the value at addr to the maximum of *addr and value, i.e.
+<code>*addr = max(*addr, value)</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicMin'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicMin</span>
+    <span class='normal'>: Thread-safe minimum</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicMin(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAtomicMin(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+    <tr><th>value</th><td>Comparison value.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly sets the value at addr to the minimum of *addr and value, i.e.
+<code>*addr = min(*addr, value)</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicOr'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicOr</span>
+    <span class='normal'>: Thread-safe bitwise or</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicOr(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicOr(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+    <tr><th>value</th><td>Value to or with.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly perform a bitwise or two values, storing the result at addr,
+i.e. <code>*addr |= value</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicSub'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicSub</span>
+    <span class='normal'>: Thread-safe subtraction</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicSub(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicSub(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+    <tr><th>value</th><td>Amount to subtract.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly subtracts a value from the value at addr, i.e. <code>*addr -= value</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAtomicXor'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAtomicXor</span>
+    <span class='normal'>: Thread-safe bitwise exclusive or</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicXor(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicXor(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+    <tr><th>value</th><td>Value to xor with.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Value of *addr prior to the operation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly performs a bitwise xor of two values, storing the result at addr,
+i.e. <code>*addr ^= value</code>.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_convert.jd b/docs/html/guide/topics/renderscript/reference/rs_convert.jd
new file mode 100644
index 0000000..bf1f611
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_convert.jd
@@ -0,0 +1,1836 @@
+page.title=RenderScript Conversion Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below convert from a numerical vector type to another, of from one color
+representation to another.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:convert'>convert</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert numerical vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsPackColorTo8888'>rsPackColorTo8888</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a uchar4 RGBA from floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsUnpackColor8888'>rsUnpackColor8888</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a float4 RGBA from uchar4
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_convert.html#android_rs:rsYuvToRGBA'>rsYuvToRGBA</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert a YUV value to RGBA
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:convert'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>convert</span>
+    <span class='normal'>: Convert numerical vectors</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Converts a vector from one numerical type to another.  The conversion are done entry per entry.
+</p>
+
+<p> E.g calling <code>a = convert_short3(b);</code> is equivalent to doing
+<code>a.x = (short)b.x; a.y = (short)b.y; a.z = (short)b.z;</code>.
+</p>
+
+<p> Converting floating point values to integer types truncates.
+</p>
+
+<p> Converting numbers too large to fit the destination type yields undefined results.
+For example, converting a float that contains 1.0e18 to a short is undefined.
+Use <a href='rs_math.html#android_rs:clamp'>clamp</a>() to avoid this.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsPackColorTo8888'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsPackColorTo8888</span>
+    <span class='normal'>: Create a uchar4 RGBA from floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(float r, float g, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(float r, float g, float b, float a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(<a href='rs_value_types.html#android_rs:float3'>float3</a> color);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(<a href='rs_value_types.html#android_rs:float4'>float4</a> color);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>r</th><td>Red component.</td></tr>
+    <tr><th>g</th><td>Green component.</td></tr>
+    <tr><th>b</th><td>Blue component.</td></tr>
+    <tr><th>a</th><td>Alpha component.</td></tr>
+    <tr><th>color</th><td>Vector of 3 or 4 floats containing the R, G, B, and A values.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Packs three or four floating point RGBA values into a uchar4.  The RGBA values should be
+between 0.0 and 1.0 inclusive.  Values outside of this range are clamped to this range.
+However numbers greater than INT_MAX or less than INT_MIN can result in undefined behavior.
+</p>
+
+<p> If the alpha component is not specified, it is assumed to be 1.0, i.e. the result will
+have an alpha set to 255.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsUnpackColor8888'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsUnpackColor8888</span>
+    <span class='normal'>: Create a float4 RGBA from uchar4</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsUnpackColor8888(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> c);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Unpacks a uchar4 color to float4.  The resulting floats will be between 0.0 and 1.0 inclusive.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsYuvToRGBA'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsYuvToRGBA</span>
+    <span class='normal'>: Convert a YUV value to RGBA</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsYuvToRGBA_float4(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> y, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> u, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsYuvToRGBA_uchar4(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> y, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> u, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>y</th><td>Luminance component.</td></tr>
+    <tr><th>u</th><td>U chrominance component.</td></tr>
+    <tr><th>v</th><td>V chrominance component.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Converts a color from a YUV representation to RGBA.
+</p>
+
+<p> We currently don't provide a function to do the reverse conversion.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_debug.jd b/docs/html/guide/topics/renderscript/reference/rs_debug.jd
new file mode 100644
index 0000000..d041309
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_debug.jd
@@ -0,0 +1,301 @@
+page.title=RenderScript Debugging Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below are intended to be used during application developement.
+They should not be used in shipping applications.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_debug.html#android_rs:rsDebug'>rsDebug</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Log a message and values
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsDebug'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsDebug</span>
+    <span class='normal'>: Log a message and values</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsDebug(const char* message, char a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:char2'>char2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:char3'>char3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:char4'>char4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, const void* a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, double a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, float a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, float a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, float a, float b, float c);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, float a, float b, float c, float d);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:float2'>float2</a> a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:float3'>float3</a> a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:float4'>float4</a> a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, int a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:int2'>int2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:int3'>int3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:int4'>int4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, long a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, long long a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:long2'>long2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:long3'>long3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:long4'>long4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, short a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:short2'>short2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:short3'>short3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:short4'>short4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint'>uint</a> a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, unsigned long long a);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function prints a message to the standard log, followed by the provided values.
+</p>
+
+<p> This function is intended for debugging only and should not be used in shipping
+applications.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_for_each.jd b/docs/html/guide/topics/renderscript/reference/rs_for_each.jd
new file mode 100644
index 0000000..cad5a21
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_for_each.jd
@@ -0,0 +1,183 @@
+page.title=RenderScript Kernel Invocation Functions and Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>() function can be used to invoke the root kernel of a script.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rs_for_each_strategy_t'>rs_for_each_strategy_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Suggested cell processing order
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cell iteration information
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Invoke the root kernel of a script
+    </td>
+  </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_for_each_strategy_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_for_each_strategy_t</span>
+    <span class='normal'>: Suggested cell processing order</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_FOR_EACH_STRATEGY_SERIAL = 0</th><td>Prefer contiguous memory regions.</td></tr>
+    <tr><th>RS_FOR_EACH_STRATEGY_DONT_CARE = 1</th><td>No prefrences.</td></tr>
+    <tr><th>RS_FOR_EACH_STRATEGY_DST_LINEAR = 2</th><td>Prefer DST.</td></tr>
+    <tr><th>RS_FOR_EACH_STRATEGY_TILE_SMALL = 3</th><td>Prefer processing small rectangular regions.</td></tr>
+    <tr><th>RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4</th><td>Prefer processing medium rectangular regions.</td></tr>
+    <tr><th>RS_FOR_EACH_STRATEGY_TILE_LARGE = 5</th><td>Prefer processing large rectangular regions.</td></tr>
+  </tbody></table><br/>
+<p> This type is used to suggest how the invoked kernel should iterate over the cells of the
+allocations.  This is a hint only.  Implementations may not follow the suggestion.
+</p>
+
+<p> This specification can help the caching behavior of the running kernel, e.g. the cache
+locality when the processing is distributed over multiple cores.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_script_call_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_script_call_t</span>
+    <span class='normal'>: Cell iteration information</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A structure with the following fields:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>rs_for_each_strategy_t strategy</th><td>Currently ignored.  In the future, will be suggested cell iteration strategy.</td></tr>
+    <tr><th>uint32_t xStart</th><td>Starting index in the X dimension.</td></tr>
+    <tr><th>uint32_t xEnd</th><td>Ending index (exclusive) in the X dimension.</td></tr>
+    <tr><th>uint32_t yStart</th><td>Starting index in the Y dimension.</td></tr>
+    <tr><th>uint32_t yEnd</th><td>Ending index (exclusive) in the Y dimension.</td></tr>
+    <tr><th>uint32_t zStart</th><td>Starting index in the Z dimension.</td></tr>
+    <tr><th>uint32_t zEnd</th><td>Ending index (exclusive) in the Z dimension.</td></tr>
+    <tr><th>uint32_t arrayStart</th><td>Starting index in the Array0 dimension.</td></tr>
+    <tr><th>uint32_t arrayEnd</th><td>Ending index (exclusive) in the Array0 dimension.</td></tr>
+    <tr><th>uint32_t array1Start</th><td>Starting index in the Array1 dimension.</td></tr>
+    <tr><th>uint32_t array1End</th><td>Ending index (exclusive) in the Array1 dimension.</td></tr>
+    <tr><th>uint32_t array2Start</th><td>Starting index in the Array2 dimension.</td></tr>
+    <tr><th>uint32_t array2End</th><td>Ending index (exclusive) in the Array2 dimension.</td></tr>
+    <tr><th>uint32_t array3Start</th><td>Starting index in the Array3 dimension.</td></tr>
+    <tr><th>uint32_t array3End</th><td>Ending index (exclusive) in the Array3 dimension.</td></tr>
+  </tbody></table><br/>
+<p> This structure is used to provide iteration information to a rsForEach call.
+It is currently used to restrict processing to a subset of cells.  In future
+versions, it will also be used to provide hint on how to best iterate over
+the cells.
+</p>
+
+<p> The Start fields are inclusive and the End fields are exclusive.  E.g. to iterate
+over cells 4, 5, 6, and 7 in the X dimension, set xStart to 4 and xEnd to 8.
+</p>
+  </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:rsForEach'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsForEach</span>
+    <span class='normal'>: Invoke the root kernel of a script</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData, const <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>* sc);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData, <a href='rs_value_types.html#android_rs:size_t'>size_t</a> usrDataLen);
+</td>
+        <td>    <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14 - 20</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData, <a href='rs_value_types.html#android_rs:size_t'>size_t</a> usrDataLen, const <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>* sc);
+</td>
+        <td>    <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14 - 20</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>script</th><td>Script to call.</td></tr>
+    <tr><th>input</th><td>Allocation to source data from.</td></tr>
+    <tr><th>output</th><td>Allocation to write date into.</td></tr>
+    <tr><th>usrData</th><td>User defined data to pass to the script.  May be NULL.</td></tr>
+    <tr><th>sc</th><td>Extra control information used to select a sub-region of the allocation to be processed or suggest a walking strategy.  May be NULL.</td></tr>
+    <tr><th>usrDataLen</th><td>Size of the userData structure.  This will be used to perform a shallow copy of the data if necessary.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Invoke the kernel named "root" of the specified script.  Like other kernels, this root()
+function will be invoked repeatedly over the cells of the specificed allocation, filling
+the output allocation with the results.
+</p>
+
+<p> When rsForEach is called, the root script is launched immediately.  rsForEach returns
+only when the script has completed and the output allocation is ready to use.
+</p>
+
+<p> The rs_script argument is typically initialized using a global variable set from Java.
+</p>
+
+<p> The kernel can be invoked with just an input allocation or just an output allocation.
+This can be done by defining an rs_allocation variable and not initializing it.  E.g.<code><br/>
+rs_script gCustomScript;<br/>
+void specializedProcessing(rs_allocation in) {<br/>
+&nbsp;&nbsp;rs_allocation ignoredOut;<br/>
+&nbsp;&nbsp;rsForEach(gCustomScript, in, ignoredOut);<br/>
+}<br/></code>
+</p>
+
+<p> If both input and output allocations are specified, they must have the same dimensions.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_graphics.jd b/docs/html/guide/topics/renderscript/reference/rs_graphics.jd
new file mode 100644
index 0000000..ee50184
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_graphics.jd
@@ -0,0 +1,2085 @@
+page.title=RenderScript Graphics Functions and Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The graphics subsystem of RenderScript has been deprecated.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Deprecated Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_blend_dst_func'>rs_blend_dst_func</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Blend destination function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_blend_src_func'>rs_blend_src_func</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Blend source function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_cull_mode'>rs_cull_mode</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Culling mode
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_depth_func'>rs_depth_func</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Depth function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_font'>rs_font</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a Font
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a Mesh
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_primitive'>rs_primitive</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  How to intepret mesh vertex data
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramFragment
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramRaster
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramStore
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Handle to a ProgramVertex
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Deprecated Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgAllocationSyncAll'>rsgAllocationSyncAll</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Sync the contents of an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindColorTarget'>rsgBindColorTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the color target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindConstant'>rsgBindConstant</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a constant allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindDepthTarget'>rsgBindDepthTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the depth target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindFont'>rsgBindFont</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a font object
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramFragment'>rsgBindProgramFragment</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramFragment
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramRaster'>rsgBindProgramRaster</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramRaster
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramStore'>rsgBindProgramStore</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramStore
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindProgramVertex'>rsgBindProgramVertex</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a ProgramVertex
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindSampler'>rsgBindSampler</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgBindTexture'>rsgBindTexture</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Bind a texture allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearAllRenderTargets'>rsgClearAllRenderTargets</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear all color and depth targets
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearColor'>rsgClearColor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the specified color from the surface
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearColorTarget'>rsgClearColorTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the color target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearDepth'>rsgClearDepth</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the depth surface
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgClearDepthTarget'>rsgClearDepthTarget</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Clear the depth target
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawMesh'>rsgDrawMesh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a mesh
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawQuad'>rsgDrawQuad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a quad
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawQuadTexCoords'>rsgDrawQuadTexCoords</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a textured quad
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawRect'>rsgDrawRect</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a rectangle
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawSpriteScreenspace'>rsgDrawSpriteScreenspace</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw rectangles in screenspace
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgDrawText'>rsgDrawText</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Draw a text string
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgFinish'>rsgFinish</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  End rendering commands
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgFontColor'>rsgFontColor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the font color
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgGetHeight'>rsgGetHeight</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the surface height
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgGetWidth'>rsgGetWidth</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the surface width
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeasureText'>rsgMeasureText</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the bounding box for a text string
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshComputeBoundingBox'>rsgMeshComputeBoundingBox</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Compute a bounding box
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetIndexAllocation'>rsgMeshGetIndexAllocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return an allocation containing index data
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitive'>rsgMeshGetPrimitive</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the primitive
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitiveCount'>rsgMeshGetPrimitiveCount</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the number of index sets
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocation'>rsgMeshGetVertexAllocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return a vertex allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocationCount'>rsgMeshGetVertexAllocationCount</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the number of vertex allocations
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramFragmentConstantColor'>rsgProgramFragmentConstantColor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Set the constant color for a fixed function emulation program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramRasterGetCullMode'>rsgProgramRasterGetCullMode</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program raster cull mode
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramRasterIsPointSpriteEnabled'>rsgProgramRasterIsPointSpriteEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program raster point sprite state
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendDstFunc'>rsgProgramStoreGetBlendDstFunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store blend destination function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendSrcFunc'>rsgProgramStoreGetBlendSrcFunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store blend source function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreGetDepthFunc'>rsgProgramStoreGetDepthFunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store depth function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskAlphaEnabled'>rsgProgramStoreIsColorMaskAlphaEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store alpha component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskBlueEnabled'>rsgProgramStoreIsColorMaskBlueEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store blur component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskGreenEnabled'>rsgProgramStoreIsColorMaskGreenEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store green component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskRedEnabled'>rsgProgramStoreIsColorMaskRedEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store red component color mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDepthMaskEnabled'>rsgProgramStoreIsDepthMaskEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store depth mask
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDitherEnabled'>rsgProgramStoreIsDitherEnabled</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get program store dither state
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexGetProjectionMatrix'>rsgProgramVertexGetProjectionMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Get the projection matrix for a fixed function vertex program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadModelMatrix'>rsgProgramVertexLoadModelMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Load the model matrix for a bound fixed function vertex program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadProjectionMatrix'>rsgProgramVertexLoadProjectionMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Load the projection matrix for a bound fixed function vertex program
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadTextureMatrix'>rsgProgramVertexLoadTextureMatrix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Load the texture matrix for a bound fixed function vertex program
+    </td>
+  </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_blend_dst_func'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_blend_dst_func</span>
+    <span class='normal'>: Blend destination function</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_BLEND_DST_ZERO = 0</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_ONE = 1</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_SRC_COLOR = 2</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_ONE_MINUS_SRC_COLOR = 3</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_SRC_ALPHA = 4</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_ONE_MINUS_SRC_ALPHA = 5</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_DST_ALPHA = 6</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_ONE_MINUS_DST_ALPHA = 7</th><td></td></tr>
+    <tr><th>RS_BLEND_DST_INVALID = 100</th><td></td></tr>
+  </tbody></table><br/>
+    <p><b>Deprecated.</b>  Do not use.</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_blend_src_func'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_blend_src_func</span>
+    <span class='normal'>: Blend source function</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_BLEND_SRC_ZERO = 0</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_ONE = 1</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_DST_COLOR = 2</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_ONE_MINUS_DST_COLOR = 3</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_SRC_ALPHA = 4</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA = 5</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_DST_ALPHA = 6</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_ONE_MINUS_DST_ALPHA = 7</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_SRC_ALPHA_SATURATE = 8</th><td></td></tr>
+    <tr><th>RS_BLEND_SRC_INVALID = 100</th><td></td></tr>
+  </tbody></table><br/>
+    <p><b>Deprecated.</b>  Do not use.</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_cull_mode'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_cull_mode</span>
+    <span class='normal'>: Culling mode</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_CULL_BACK = 0</th><td></td></tr>
+    <tr><th>RS_CULL_FRONT = 1</th><td></td></tr>
+    <tr><th>RS_CULL_NONE = 2</th><td></td></tr>
+    <tr><th>RS_CULL_INVALID = 100</th><td></td></tr>
+  </tbody></table><br/>
+    <p><b>Deprecated.</b>  Do not use.</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_depth_func'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_depth_func</span>
+    <span class='normal'>: Depth function</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_DEPTH_FUNC_ALWAYS = 0</th><td>Always drawn</td></tr>
+    <tr><th>RS_DEPTH_FUNC_LESS = 1</th><td>Drawn if the incoming depth value is less than that in the depth buffer</td></tr>
+    <tr><th>RS_DEPTH_FUNC_LEQUAL = 2</th><td>Drawn if the incoming depth value is less or equal to that in the depth buffer</td></tr>
+    <tr><th>RS_DEPTH_FUNC_GREATER = 3</th><td>Drawn if the incoming depth value is greater than that in the depth buffer</td></tr>
+    <tr><th>RS_DEPTH_FUNC_GEQUAL = 4</th><td>Drawn if the incoming depth value is greater or equal to that in the depth buffer</td></tr>
+    <tr><th>RS_DEPTH_FUNC_EQUAL = 5</th><td>Drawn if the incoming depth value is equal to that in the depth buffer</td></tr>
+    <tr><th>RS_DEPTH_FUNC_NOTEQUAL = 6</th><td>Drawn if the incoming depth value is not equal to that in the depth buffer</td></tr>
+    <tr><th>RS_DEPTH_FUNC_INVALID = 100</th><td>Invalid depth function</td></tr>
+  </tbody></table><br/>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Specifies conditional drawing depending on the comparison of the incoming
+depth to that found in the depth buffer.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_font'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_font</span>
+    <span class='normal'>: Handle to a Font</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Opaque handle to a RenderScript font object.
+See: android.renderscript.Font
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_mesh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_mesh</span>
+    <span class='normal'>: Handle to a Mesh</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Opaque handle to a RenderScript mesh object.
+See: android.renderscript.Mesh
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_primitive'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_primitive</span>
+    <span class='normal'>: How to intepret mesh vertex data</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_PRIMITIVE_POINT = 0</th><td>Vertex data will be rendered as a series of points</td></tr>
+    <tr><th>RS_PRIMITIVE_LINE = 1</th><td>Vertex pairs will be rendered as lines</td></tr>
+    <tr><th>RS_PRIMITIVE_LINE_STRIP = 2</th><td>Vertex data will be rendered as a connected line strip</td></tr>
+    <tr><th>RS_PRIMITIVE_TRIANGLE = 3</th><td>Vertices will be rendered as individual triangles</td></tr>
+    <tr><th>RS_PRIMITIVE_TRIANGLE_STRIP = 4</th><td>Vertices will be rendered as a connected triangle strip defined by the first three vertices with each additional triangle defined by a new vertex</td></tr>
+    <tr><th>RS_PRIMITIVE_TRIANGLE_FAN = 5</th><td>Vertices will be rendered as a sequence of triangles that all share first vertex as the origin</td></tr>
+    <tr><th>RS_PRIMITIVE_INVALID = 100</th><td>Invalid primitive</td></tr>
+  </tbody></table><br/>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Describes the way mesh vertex data is interpreted when rendering
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_program_fragment'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_program_fragment</span>
+    <span class='normal'>: Handle to a ProgramFragment</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramFragment object.
+See: android.renderscript.ProgramFragment
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_program_raster'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_program_raster</span>
+    <span class='normal'>: Handle to a ProgramRaster</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramRaster object.
+See: android.renderscript.ProgramRaster
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_program_store'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_program_store</span>
+    <span class='normal'>: Handle to a ProgramStore</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramStore object.
+See: android.renderscript.ProgramStore
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_program_vertex'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_program_vertex</span>
+    <span class='normal'>: Handle to a ProgramVertex</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramVertex object.
+See: android.renderscript.ProgramVertex
+</p>
+  </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:rsgAllocationSyncAll'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgAllocationSyncAll</span>
+    <span class='normal'>: Sync the contents of an allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgAllocationSyncAll(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsgAllocationSyncAll(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc, <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a> source);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Sync the contents of an allocation.
+</p>
+
+<p> If the source is specified, sync from memory space specified by source.
+</p>
+
+<p> If the source is not specified, sync from its SCRIPT memory space to its HW
+memory spaces.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindColorTarget'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindColorTarget</span>
+    <span class='normal'>: Set the color target</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindColorTarget(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> colorTarget, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Set the color target used for all subsequent rendering calls
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindConstant'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindConstant</span>
+    <span class='normal'>: Bind a constant allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindConstant(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> ps, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> c);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsgBindConstant(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a> pv, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> c);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program fragment object</td></tr>
+    <tr><th>slot</th><td>index of the constant buffer on the program</td></tr>
+    <tr><th>c</th><td>constants to bind</td></tr>
+    <tr><th>pv</th><td>program vertex object</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Bind a new Allocation object to a ProgramFragment or ProgramVertex.
+The Allocation must be a valid constant input for the Program.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindDepthTarget'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindDepthTarget</span>
+    <span class='normal'>: Set the depth target</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindDepthTarget(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> depthTarget);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Set the depth target used for all subsequent rendering calls
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindFont'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindFont</span>
+    <span class='normal'>: Bind a font object</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindFont(<a href='rs_graphics.html#android_rs:rs_font'>rs_font</a> font);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>font</th><td>object to bind</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Binds the font object to be used for all subsequent font rendering calls
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindProgramFragment'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindProgramFragment</span>
+    <span class='normal'>: Bind a ProgramFragment</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindProgramFragment(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> pf);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Bind a new ProgramFragment to the rendering context.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindProgramRaster'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindProgramRaster</span>
+    <span class='normal'>: Bind a ProgramRaster</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindProgramRaster(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> pr);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Bind a new ProgramRaster to the rendering context.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindProgramStore'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindProgramStore</span>
+    <span class='normal'>: Bind a ProgramStore</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindProgramStore(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Bind a new ProgramStore to the rendering context.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindProgramVertex'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindProgramVertex</span>
+    <span class='normal'>: Bind a ProgramVertex</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindProgramVertex(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a> pv);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Bind a new ProgramVertex to the rendering context.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindSampler'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindSampler</span>
+    <span class='normal'>: Bind a sampler</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindSampler(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> fragment, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> sampler);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Bind a new Sampler object to a ProgramFragment.  The sampler will
+operate on the texture bound at the matching slot.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgBindTexture'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgBindTexture</span>
+    <span class='normal'>: Bind a texture allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgBindTexture(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> v, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Bind a new Allocation object to a ProgramFragment.  The
+Allocation must be a valid texture for the Program.  The sampling
+of the texture will be controled by the Sampler bound at the
+matching slot.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgClearAllRenderTargets'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgClearAllRenderTargets</span>
+    <span class='normal'>: Clear all color and depth targets</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgClearAllRenderTargets();
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Clear all color and depth targets and resume rendering into
+the framebuffer
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgClearColor'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgClearColor</span>
+    <span class='normal'>: Clear the specified color from the surface</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgClearColor(float r, float g, float b, float a);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Clears the rendering surface to the specified color.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgClearColorTarget'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgClearColorTarget</span>
+    <span class='normal'>: Clear the color target</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgClearColorTarget(<a href='rs_value_types.html#android_rs:uint'>uint</a> slot);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Clear the previously set color target
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgClearDepth'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgClearDepth</span>
+    <span class='normal'>: Clear the depth surface</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgClearDepth(float value);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Clears the depth suface to the specified value.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgClearDepthTarget'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgClearDepthTarget</span>
+    <span class='normal'>: Clear the depth target</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgClearDepthTarget();
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Clear the previously set depth target
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgDrawMesh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgDrawMesh</span>
+    <span class='normal'>: Draw a mesh</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgDrawMesh(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> ism);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsgDrawMesh(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> ism, <a href='rs_value_types.html#android_rs:uint'>uint</a> primitiveIndex);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsgDrawMesh(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> ism, <a href='rs_value_types.html#android_rs:uint'>uint</a> primitiveIndex, <a href='rs_value_types.html#android_rs:uint'>uint</a> start, <a href='rs_value_types.html#android_rs:uint'>uint</a> len);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ism</th><td>mesh object to render</td></tr>
+    <tr><th>primitiveIndex</th><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw.</td></tr>
+    <tr><th>start</th><td>starting index in the range</td></tr>
+    <tr><th>len</th><td>number of indices to draw</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Draw a mesh using the current context state.
+</p>
+
+<p> If primitiveIndex is specified, draw part of a mesh using the current context state.
+</p>
+
+<p> If start and len are also specified, draw specified index range of part of a mesh using the current context state.
+</p>
+
+<p> Otherwise the whole mesh is rendered.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgDrawQuad'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgDrawQuad</span>
+    <span class='normal'>: Draw a quad</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgDrawQuad(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Low performance utility function for drawing a simple quad.  Not intended for
+drawing large quantities of geometry.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgDrawQuadTexCoords'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgDrawQuadTexCoords</span>
+    <span class='normal'>: Draw a textured quad</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Low performance utility function for drawing a textured quad.  Not intended
+for drawing large quantities of geometry.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgDrawRect'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgDrawRect</span>
+    <span class='normal'>: Draw a rectangle</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgDrawRect(float x1, float y1, float x2, float y2, float z);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Low performance utility function for drawing a simple rectangle.  Not
+intended for drawing large quantities of geometry.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgDrawSpriteScreenspace'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgDrawSpriteScreenspace</span>
+    <span class='normal'>: Draw rectangles in screenspace</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Low performance function for drawing rectangles in screenspace.  This
+function uses the default passthough ProgramVertex.  Any bound ProgramVertex
+is ignored.  This function has considerable overhead and should not be used
+for drawing in shipping applications.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgDrawText'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgDrawText</span>
+    <span class='normal'>: Draw a text string</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgDrawText(const char* text, int x, int y);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsgDrawText(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc, int x, int y);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Draws text given a string and location
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgFinish'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgFinish</span>
+    <span class='normal'>: End rendering commands</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsgFinish();
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Force RenderScript to finish all rendering commands
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgFontColor'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgFontColor</span>
+    <span class='normal'>: Set the font color</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgFontColor(float r, float g, float b, float a);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>r</th><td>red component</td></tr>
+    <tr><th>g</th><td>green component</td></tr>
+    <tr><th>b</th><td>blue component</td></tr>
+    <tr><th>a</th><td>alpha component</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Sets the font color for all subsequent rendering calls
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgGetHeight'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgGetHeight</span>
+    <span class='normal'>: Get the surface height</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsgGetHeight();
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get the height of the current rendering surface.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgGetWidth'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgGetWidth</span>
+    <span class='normal'>: Get the surface width</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsgGetWidth();
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get the width of the current rendering surface.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgMeasureText'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgMeasureText</span>
+    <span class='normal'>: Get the bounding box for a text string</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgMeasureText(const char* text, int* left, int* right, int* top, int* bottom);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsgMeasureText(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc, int* left, int* right, int* top, int* bottom);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Returns the bounding box of the text relative to (0, 0)
+Any of left, right, top, bottom could be NULL
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgMeshComputeBoundingBox'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgMeshComputeBoundingBox</span>
+    <span class='normal'>: Compute a bounding box</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgMeshComputeBoundingBox(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> mesh, float* minX, float* minY, float* min, float* maxX, float* maxY, float* maxZ);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsgMeshComputeBoundingBox(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> mesh, <a href='rs_value_types.html#android_rs:float3'>float3</a>* bBoxMin, <a href='rs_value_types.html#android_rs:float3'>float3</a>* bBoxMax);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Computes an axis aligned bounding box of a mesh object
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgMeshGetIndexAllocation'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgMeshGetIndexAllocation</span>
+    <span class='normal'>: Return an allocation containing index data</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> rsgMeshGetIndexAllocation(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>mesh to get data from</td></tr>
+    <tr><th>index</th><td>index of the index allocation</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>allocation containing index data</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Returns an allocation containing index data or a null
+allocation if only the primitive is specified
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgMeshGetPrimitive'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgMeshGetPrimitive</span>
+    <span class='normal'>: Return the primitive</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_graphics.html#android_rs:rs_primitive'>rs_primitive</a> rsgMeshGetPrimitive(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>mesh to get data from</td></tr>
+    <tr><th>index</th><td>index of the primitive</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>primitive describing how the mesh is rendered</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Returns the primitive describing how a part of the mesh is
+rendered
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgMeshGetPrimitiveCount'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgMeshGetPrimitiveCount</span>
+    <span class='normal'>: Return the number of index sets</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsgMeshGetPrimitiveCount(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>mesh to get data from</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>number of primitive groups in the mesh. This would include simple primitives as well as allocations containing index data</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Meshes could have multiple index sets, this function returns
+the number.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgMeshGetVertexAllocation'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgMeshGetVertexAllocation</span>
+    <span class='normal'>: Return a vertex allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> rsgMeshGetVertexAllocation(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>mesh to get data from</td></tr>
+    <tr><th>index</th><td>index of the vertex allocation</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>allocation containing vertex data</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Returns an allocation that is part of the mesh and contains
+vertex data, e.g. positions, normals, texcoords
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgMeshGetVertexAllocationCount'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgMeshGetVertexAllocationCount</span>
+    <span class='normal'>: Return the number of vertex allocations</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsgMeshGetVertexAllocationCount(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>mesh to get data from</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>number of allocations in the mesh that contain vertex data</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Returns the number of allocations in the mesh that contain
+vertex data
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramFragmentConstantColor'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramFragmentConstantColor</span>
+    <span class='normal'>: Set the constant color for a fixed function emulation program</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgProgramFragmentConstantColor(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> pf, float r, float g, float b, float a);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Set the constant color for a fixed function emulation program.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramRasterGetCullMode'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramRasterGetCullMode</span>
+    <span class='normal'>: Get program raster cull mode</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_graphics.html#android_rs:rs_cull_mode'>rs_cull_mode</a> rsgProgramRasterGetCullMode(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> pr);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>pr</th><td>program raster to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program raster cull mode
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramRasterIsPointSpriteEnabled'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramRasterIsPointSpriteEnabled</span>
+    <span class='normal'>: Get program raster point sprite state</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsgProgramRasterIsPointSpriteEnabled(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> pr);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>pr</th><td>program raster to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program raster point sprite state
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreGetBlendDstFunc'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreGetBlendDstFunc</span>
+    <span class='normal'>: Get program store blend destination function</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_graphics.html#android_rs:rs_blend_dst_func'>rs_blend_dst_func</a> rsgProgramStoreGetBlendDstFunc(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store blend destination function
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreGetBlendSrcFunc'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreGetBlendSrcFunc</span>
+    <span class='normal'>: Get program store blend source function</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_graphics.html#android_rs:rs_blend_src_func'>rs_blend_src_func</a> rsgProgramStoreGetBlendSrcFunc(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store blend source function
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreGetDepthFunc'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreGetDepthFunc</span>
+    <span class='normal'>: Get program store depth function</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_graphics.html#android_rs:rs_depth_func'>rs_depth_func</a> rsgProgramStoreGetDepthFunc(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store depth function
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskAlphaEnabled'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreIsColorMaskAlphaEnabled</span>
+    <span class='normal'>: Get program store alpha component color mask</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsgProgramStoreIsColorMaskAlphaEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store alpha component color mask
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskBlueEnabled'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreIsColorMaskBlueEnabled</span>
+    <span class='normal'>: Get program store blur component color mask</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsgProgramStoreIsColorMaskBlueEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store blur component color mask
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskGreenEnabled'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreIsColorMaskGreenEnabled</span>
+    <span class='normal'>: Get program store green component color mask</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsgProgramStoreIsColorMaskGreenEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store green component color mask
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskRedEnabled'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreIsColorMaskRedEnabled</span>
+    <span class='normal'>: Get program store red component color mask</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsgProgramStoreIsColorMaskRedEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store red component color mask
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsDepthMaskEnabled'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreIsDepthMaskEnabled</span>
+    <span class='normal'>: Get program store depth mask</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsgProgramStoreIsDepthMaskEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store depth mask
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsDitherEnabled'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramStoreIsDitherEnabled</span>
+    <span class='normal'>: Get program store dither state</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsgProgramStoreIsDitherEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+        <td>    When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>ps</th><td>program store to query</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get program store dither state
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexGetProjectionMatrix'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramVertexGetProjectionMatrix</span>
+    <span class='normal'>: Get the projection matrix for a fixed function vertex program</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgProgramVertexGetProjectionMatrix(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* proj);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>proj</th><td>matrix to store the current projection matrix into</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Get the projection matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexLoadModelMatrix'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramVertexLoadModelMatrix</span>
+    <span class='normal'>: Load the model matrix for a bound fixed function vertex program</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgProgramVertexLoadModelMatrix(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* model);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>model</th><td>model matrix</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Load the model matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexLoadProjectionMatrix'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramVertexLoadProjectionMatrix</span>
+    <span class='normal'>: Load the projection matrix for a bound fixed function vertex program</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgProgramVertexLoadProjectionMatrix(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* proj);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>proj</th><td>projection matrix</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Load the projection matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexLoadTextureMatrix'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsgProgramVertexLoadTextureMatrix</span>
+    <span class='normal'>: Load the texture matrix for a bound fixed function vertex program</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsgProgramVertexLoadTextureMatrix(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* tex);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>tex</th><td>texture matrix</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Do not use.</p>
+<p> Load the texture matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_io.jd b/docs/html/guide/topics/renderscript/reference/rs_io.jd
new file mode 100644
index 0000000..d02c804
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_io.jd
@@ -0,0 +1,185 @@
+page.title=RenderScript Input/Output Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> These functions are used to:<ul>
+<li>Send information to the Java client, and</li>
+<li>Send the processed allocation or receive the next allocation to process.</li></ul>
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsAllocationIoReceive'>rsAllocationIoReceive</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Receive new content from the queue
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsAllocationIoSend'>rsAllocationIoSend</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send new content to the queue
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsSendToClient'>rsSendToClient</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send a message to the client, non-blocking
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_io.html#android_rs:rsSendToClientBlocking'>rsSendToClientBlocking</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Send a message to the client, blocking
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAllocationIoReceive'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationIoReceive</span>
+    <span class='normal'>: Receive new content from the queue</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsAllocationIoReceive(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>a</th><td>Allocation to work on.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Receive a new set of contents from the queue.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationIoSend'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationIoSend</span>
+    <span class='normal'>: Send new content to the queue</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsAllocationIoSend(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>a</th><td>Allocation to work on.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Send the contents of the Allocation to the queue.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSendToClient'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSendToClient</span>
+    <span class='normal'>: Send a message to the client, non-blocking</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsSendToClient(int cmdID);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>bool rsSendToClient(int cmdID, const void* data, <a href='rs_value_types.html#android_rs:uint'>uint</a> len);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>cmdID</th><td></td></tr>
+    <tr><th>data</th><td>Application specific data.</td></tr>
+    <tr><th>len</th><td>Length of the data, in bytes.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Sends a message back to the client.  This call does not block.
+It returns true if the message was sent and false if the
+message queue is full.
+</p>
+
+<p> A message ID is required.  The data payload is optional.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/RenderScript.RSMessageHandler.html'>RenderScript.RSMessageHandler</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSendToClientBlocking'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSendToClientBlocking</span>
+    <span class='normal'>: Send a message to the client, blocking</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsSendToClientBlocking(int cmdID);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsSendToClientBlocking(int cmdID, const void* data, <a href='rs_value_types.html#android_rs:uint'>uint</a> len);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>cmdID</th><td></td></tr>
+    <tr><th>data</th><td>Application specific data.</td></tr>
+    <tr><th>len</th><td>Length of the data, in bytes.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Sends a message back to the client.  This function will block
+until there is room on the message queue for this message.
+This function may return before the message was delivered and
+processed by the client.
+</p>
+
+<p> A message ID is required.  The data payload is optional.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/RenderScript.RSMessageHandler.html'>RenderScript.RSMessageHandler</a>.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_math.jd b/docs/html/guide/topics/renderscript/reference/rs_math.jd
new file mode 100644
index 0000000..13513e9
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_math.jd
@@ -0,0 +1,7251 @@
+page.title=RenderScript Mathematical Constants and Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The mathematical functions below can be applied to scalars and vectors.   When applied
+to vectors, the returned value is a vector of the function applied to each entry of the input.
+</p>
+
+<p> For example:<code><br/>
+float3 a, b;<br/>
+// The following call sets<br/>
+//   a.x to sin(b.x),<br/>
+//   a.y to sin(b.y), and<br/>
+//   a.z to sin(b.z).<br/>
+a = sin(b);<br/>
+</code>
+</p>
+
+<p> See <a href='rs_vector_math.html'>Vector Math Functions</a> for functions like <a href='rs_vector_math.html#android_rs:distance'>distance</a>() and <a href='rs_vector_math.html#android_rs:length'>length</a>() that interpret
+instead the input as a single vector in n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full.  Under rs_fp_relaxed, subnormal values may be flushed to zero and
+rounding may be done towards zero.  In comparison, rs_fp_full requires correct handling of
+subnormal values, i.e. smaller than 1.17549435e-38f.  rs_fp_rull also requires round to nearest
+with ties to even.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions.  Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision.  Additionally,
+  subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+  infinity input may not be handled correctly.</li>
+<li>half_: May perform internal computations using 16 bit floats.  Additionally, subnormal
+  values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Constants</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_1_PI'>M_1_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      1 / pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_2_PI'>M_2_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 / pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_2_SQRTPI'>M_2_SQRTPI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 / sqrt(pi), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_E'>M_E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LN10'>M_LN10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_e(10), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LN2'>M_LN2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_e(2), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LOG10E'>M_LOG10E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_10(e), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_LOG2E'>M_LOG2E</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      log_2(e), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI'>M_PI</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI_2'>M_PI_2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi / 2, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_PI_4'>M_PI_4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      pi / 4, as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_SQRT1_2'>M_SQRT1_2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      1 / sqrt(2), as a 32 bit float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:M_SQRT2'>M_SQRT2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      sqrt(2), as a 32 bit float
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:abs'>abs</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Absolute value of an integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acos'>acos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acosh'>acosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:acospi'>acospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse cosine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asin'>asin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asinh'>asinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:asinpi'>asinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse sine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan'>atan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan2'>atan2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent of a ratio
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent of a ratio, divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atanh'>atanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:atanpi'>atanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverse tangent divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cbrt'>cbrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cube root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ceil'>ceil</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Smallest integer not less than a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:clamp'>clamp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Restrain a value to a range
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:clz'>clz</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Number of leading 0 bits
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:copysign'>copysign</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Copies the sign of a number to another
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cos'>cos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cosh'>cosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hypebolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:cospi'>cospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cosine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:degrees'>degrees</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Converts radians into degrees
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:erf'>erf</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mathematical error function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:erfc'>erfc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mathematical complementary error function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp'>exp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp10'>exp10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      10 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:exp2'>exp2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:expm1'>expm1</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      e raised to a number minus one
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fabs'>fabs</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Absolute value of a float
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fdim'>fdim</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive difference between two values
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:floor'>floor</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Smallest integer not greater than a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fma'>fma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply and add
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmax'>fmax</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Maximum of two floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmin'>fmin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Minimum of two floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fmod'>fmod</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Modulo
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:fract'>fract</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive fractional part
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:frexp'>frexp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Binary mantissa and exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_recip'>half_recip</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal of a square root computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Square root computed to 16 bit precision
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:hypot'>hypot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hypotenuse
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ilogb'>ilogb</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base two exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:ldexp'>ldexp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Creates a floating point from mantissa and exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:lgamma'>lgamma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm of the gamma function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log'>log</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log10'>log10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base 10 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log1p'>log1p</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Natural logarithm of a value plus 1
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:log2'>log2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base 2 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:logb'>logb</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base two exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:mad'>mad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply and add
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:max'>max</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Maximum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:min'>min</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Minimum
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:mix'>mix</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Mixes two values
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:modf'>modf</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Integral and fractional components
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:nan'>nan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Not a Number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acos'>native_acos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse cosine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asin'>native_asin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse sine divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan'>native_atan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent of a ratio
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent of a ratio, divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate inverse tangent divided by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cube root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cos'>native_cos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hypebolic cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate cosine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_divide'>native_divide</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp'>native_exp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate e raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate 10 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate 2 raised to a number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate e raised to a number minus one
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hypotenuse
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log'>native_log</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate natural logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log10'>native_log10</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate base 10 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate natural logarithm of a value plus 1
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_log2'>native_log2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate base 2 logarithm
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_powr'>native_powr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate positive base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_recip'>native_recip</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate reciprocal
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate nth root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate reciprocal of a square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sin'>native_sin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine and cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate sine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tan'>native_tan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate tangent of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:nextafter'>nextafter</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Next floating point number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:pow'>pow</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:pown'>pown</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Base raised to an integer exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:powr'>powr</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Positive base raised to an exponent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:radians'>radians</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Converts degrees into radians
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:remainder'>remainder</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Remainder of a division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:remquo'>remquo</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Remainder and quotient of a division
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rint'>rint</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Round to even
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rootn'>rootn</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Nth root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:round'>round</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Round away from zero
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsRand'>rsRand</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Pseudo-random number
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Reciprocal of a square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sign'>sign</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sign of a value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sin'>sin</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sincos'>sincos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine and cosine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sinh'>sinh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hyperbolic sine
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sinpi'>sinpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sine of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:sqrt'>sqrt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Square root
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:step'>step</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      0 if less than a value, 0 otherwise
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tan'>tan</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tanh'>tanh</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Hyperbolic tangent
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tanpi'>tanpi</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Tangent of a number multiplied by pi
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:tgamma'>tgamma</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Gamma function
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:trunc'>trunc</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Truncates a floating point
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Deprecated Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsClamp'>rsClamp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Restrain a value to a range
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_math.html#android_rs:rsFrac'>rsFrac</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Returns the fractional part of a float
+    </td>
+  </tr>
+</tbody></table>
+<h2>Constants</h2>
+<a name='android_rs:M_1_PI'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_1_PI</span>
+    <span class='normal'>: 1 / pi, as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 0.318309886183790671537767526745028724f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The inverse of pi, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_2_PI'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_2_PI</span>
+    <span class='normal'>: 2 / pi, as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 0.636619772367581343075535053490057448f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> 2 divided by pi, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_2_SQRTPI'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_2_SQRTPI</span>
+    <span class='normal'>: 2 / sqrt(pi), as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 1.128379167095512573896158903121545172f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> 2 divided by the square root of pi, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_E'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_E</span>
+    <span class='normal'>: e, as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 2.718281828459045235360287471352662498f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The number e, the base of the natural logarithm, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_LN10'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_LN10</span>
+    <span class='normal'>: log_e(10), as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 2.302585092994045684017991454684364208f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The natural logarithm of 10, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_LN2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_LN2</span>
+    <span class='normal'>: log_e(2), as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 0.693147180559945309417232121458176568f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The natural logarithm of 2, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_LOG10E'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_LOG10E</span>
+    <span class='normal'>: log_10(e), as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 0.434294481903251827651128918916605082f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The logarithm base 10 of e, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_LOG2E'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_LOG2E</span>
+    <span class='normal'>: log_2(e), as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 1.442695040888963407359924681001892137f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The logarithm base 2 of e, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_PI'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_PI</span>
+    <span class='normal'>: pi, as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 3.141592653589793238462643383279502884f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The constant pi, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_PI_2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_PI_2</span>
+    <span class='normal'>: pi / 2, as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 1.570796326794896619231321691639751442f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> Pi divided by 2, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_PI_4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_PI_4</span>
+    <span class='normal'>: pi / 4, as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 0.785398163397448309615660845819875721f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> Pi divided by 4, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_SQRT1_2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_SQRT1_2</span>
+    <span class='normal'>: 1 / sqrt(2), as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 0.707106781186547524400844362104849039f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The inverse of the square root of 2, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<a name='android_rs:M_SQRT2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>M_SQRT2</span>
+    <span class='normal'>: sqrt(2), as a 32 bit float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr><td>Value: 1.414213562373095048801688724209698079f
+      </td></tr>
+<br/>
+    </tbody></table>
+  </div>
+    <div class='jd-tagdata jd-tagdescr'>
+<p> The square root of 2, as a 32 bit float.
+</p>
+    </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:abs'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>abs</span>
+    <span class='normal'>: Absolute value of an integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> abs(char v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> abs(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> abs(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> abs(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> abs(int v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> abs(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> abs(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> abs(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> abs(short v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> abs(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> abs(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> abs(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the absolute value of an integer.
+</p>
+
+<p> For floats, use <a href='rs_math.html#android_rs:fabs'>fabs</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:acos'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>acos</span>
+    <span class='normal'>: Inverse cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float acos(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> acos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> acos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> acos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse cosine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_acos'>native_acos</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:acosh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>acosh</span>
+    <span class='normal'>: Inverse hyperbolic cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float acosh(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> acosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> acosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> acosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse hyperbolic cosine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:acospi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>acospi</span>
+    <span class='normal'>: Inverse cosine divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float acospi(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> acospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> acospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> acospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse cosine in radians, divided by pi.
+</p>
+
+<p> To get an inverse cosine measured in degrees, use <code>acospi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:asin'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>asin</span>
+    <span class='normal'>: Inverse sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float asin(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> asin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> asin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> asin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse sine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_asin'>native_asin</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:asinh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>asinh</span>
+    <span class='normal'>: Inverse hyperbolic sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float asinh(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> asinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> asinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> asinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse hyperbolic sine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:asinpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>asinpi</span>
+    <span class='normal'>: Inverse sine divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float asinpi(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> asinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> asinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> asinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse sine in radians, divided by pi.
+</p>
+
+<p> To get an inverse sine measured in degrees, use <code>asinpi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:atan'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>atan</span>
+    <span class='normal'>: Inverse tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float atan(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atan'>native_atan</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:atan2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>atan2</span>
+    <span class='normal'>: Inverse tangent of a ratio</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float atan2(float numerator, float denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atan2(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atan2(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atan2(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>numerator</th><td>Numerator.</td></tr>
+    <tr><th>denominator</th><td>Denominator.  Can be 0.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent of <code>(numerator / denominator)</code>, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:atan2pi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>atan2pi</span>
+    <span class='normal'>: Inverse tangent of a ratio, divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float atan2pi(float numerator, float denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atan2pi(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atan2pi(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atan2pi(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>numerator</th><td>Numerator.</td></tr>
+    <tr><th>denominator</th><td>Denominator.  Can be 0.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent of <code>(numerator / denominator)</code>, in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atan2pi(n, d) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:atanh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>atanh</span>
+    <span class='normal'>: Inverse hyperbolic tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float atanh(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse hyperbolic tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:atanpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>atanpi</span>
+    <span class='normal'>: Inverse tangent divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float atanpi(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atanpi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:cbrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>cbrt</span>
+    <span class='normal'>: Cube root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float cbrt(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cbrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cbrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cbrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the cube root.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ceil'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ceil</span>
+    <span class='normal'>: Smallest integer not less than a value</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float ceil(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> ceil(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> ceil(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> ceil(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the smallest integer not less than a value.
+</p>
+
+<p> For example, <code>ceil(1.2f)</code> returns 2.f, and <code>ceil(-1.2f)</code> returns -1.f.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:floor'>floor</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:clamp'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>clamp</span>
+    <span class='normal'>: Restrain a value to a range</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>char clamp(char value, char min_value, char max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> clamp(<a href='rs_value_types.html#android_rs:char2'>char2</a> value, char min_value, char max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> clamp(<a href='rs_value_types.html#android_rs:char2'>char2</a> value, <a href='rs_value_types.html#android_rs:char2'>char2</a> min_value, <a href='rs_value_types.html#android_rs:char2'>char2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> clamp(<a href='rs_value_types.html#android_rs:char3'>char3</a> value, char min_value, char max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> clamp(<a href='rs_value_types.html#android_rs:char3'>char3</a> value, <a href='rs_value_types.html#android_rs:char3'>char3</a> min_value, <a href='rs_value_types.html#android_rs:char3'>char3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> clamp(<a href='rs_value_types.html#android_rs:char4'>char4</a> value, char min_value, char max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> clamp(<a href='rs_value_types.html#android_rs:char4'>char4</a> value, <a href='rs_value_types.html#android_rs:char4'>char4</a> min_value, <a href='rs_value_types.html#android_rs:char4'>char4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float clamp(float value, float min_value, float max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> clamp(<a href='rs_value_types.html#android_rs:float2'>float2</a> value, float min_value, float max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> clamp(<a href='rs_value_types.html#android_rs:float2'>float2</a> value, <a href='rs_value_types.html#android_rs:float2'>float2</a> min_value, <a href='rs_value_types.html#android_rs:float2'>float2</a> max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> clamp(<a href='rs_value_types.html#android_rs:float3'>float3</a> value, float min_value, float max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> clamp(<a href='rs_value_types.html#android_rs:float3'>float3</a> value, <a href='rs_value_types.html#android_rs:float3'>float3</a> min_value, <a href='rs_value_types.html#android_rs:float3'>float3</a> max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> clamp(<a href='rs_value_types.html#android_rs:float4'>float4</a> value, float min_value, float max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> clamp(<a href='rs_value_types.html#android_rs:float4'>float4</a> value, <a href='rs_value_types.html#android_rs:float4'>float4</a> min_value, <a href='rs_value_types.html#android_rs:float4'>float4</a> max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int clamp(int value, int min_value, int max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> clamp(<a href='rs_value_types.html#android_rs:int2'>int2</a> value, int min_value, int max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> clamp(<a href='rs_value_types.html#android_rs:int2'>int2</a> value, <a href='rs_value_types.html#android_rs:int2'>int2</a> min_value, <a href='rs_value_types.html#android_rs:int2'>int2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> clamp(<a href='rs_value_types.html#android_rs:int3'>int3</a> value, int min_value, int max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> clamp(<a href='rs_value_types.html#android_rs:int3'>int3</a> value, <a href='rs_value_types.html#android_rs:int3'>int3</a> min_value, <a href='rs_value_types.html#android_rs:int3'>int3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> clamp(<a href='rs_value_types.html#android_rs:int4'>int4</a> value, int min_value, int max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> clamp(<a href='rs_value_types.html#android_rs:int4'>int4</a> value, <a href='rs_value_types.html#android_rs:int4'>int4</a> min_value, <a href='rs_value_types.html#android_rs:int4'>int4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td>long clamp(long value, long min_value, long max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> clamp(<a href='rs_value_types.html#android_rs:long2'>long2</a> value, long min_value, long max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> clamp(<a href='rs_value_types.html#android_rs:long2'>long2</a> value, <a href='rs_value_types.html#android_rs:long2'>long2</a> min_value, <a href='rs_value_types.html#android_rs:long2'>long2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> clamp(<a href='rs_value_types.html#android_rs:long3'>long3</a> value, long min_value, long max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> clamp(<a href='rs_value_types.html#android_rs:long3'>long3</a> value, <a href='rs_value_types.html#android_rs:long3'>long3</a> min_value, <a href='rs_value_types.html#android_rs:long3'>long3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> clamp(<a href='rs_value_types.html#android_rs:long4'>long4</a> value, long min_value, long max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> clamp(<a href='rs_value_types.html#android_rs:long4'>long4</a> value, <a href='rs_value_types.html#android_rs:long4'>long4</a> min_value, <a href='rs_value_types.html#android_rs:long4'>long4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td>short clamp(short value, short min_value, short max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> clamp(<a href='rs_value_types.html#android_rs:short2'>short2</a> value, short min_value, short max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> clamp(<a href='rs_value_types.html#android_rs:short2'>short2</a> value, <a href='rs_value_types.html#android_rs:short2'>short2</a> min_value, <a href='rs_value_types.html#android_rs:short2'>short2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> clamp(<a href='rs_value_types.html#android_rs:short3'>short3</a> value, short min_value, short max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> clamp(<a href='rs_value_types.html#android_rs:short3'>short3</a> value, <a href='rs_value_types.html#android_rs:short3'>short3</a> min_value, <a href='rs_value_types.html#android_rs:short3'>short3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> clamp(<a href='rs_value_types.html#android_rs:short4'>short4</a> value, short min_value, short max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> clamp(<a href='rs_value_types.html#android_rs:short4'>short4</a> value, <a href='rs_value_types.html#android_rs:short4'>short4</a> min_value, <a href='rs_value_types.html#android_rs:short4'>short4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> clamp(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> clamp(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> clamp(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> value, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> min_value, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> clamp(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> clamp(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> value, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> min_value, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> clamp(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> clamp(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> value, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> min_value, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> clamp(<a href='rs_value_types.html#android_rs:uint'>uint</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> clamp(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> clamp(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> value, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> min_value, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> clamp(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> clamp(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> value, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> min_value, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> clamp(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> clamp(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> value, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> min_value, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> clamp(<a href='rs_value_types.html#android_rs:ulong'>ulong</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> clamp(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> clamp(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> value, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> min_value, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> clamp(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> clamp(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> value, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> min_value, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> clamp(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> clamp(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> value, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> min_value, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> clamp(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> clamp(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> clamp(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> value, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> min_value, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> clamp(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> clamp(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> value, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> min_value, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> clamp(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> clamp(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> value, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> min_value, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> max_value);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>value</th><td>Value to be clamped.</td></tr>
+    <tr><th>min_value</th><td>Lower bound, a scalar or matching vector.</td></tr>
+    <tr><th>max_value</th><td>High bound, must match the type of low.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Clamps a value to a specified high and low bound.  clamp() returns min_value
+if value &lt; min_value, max_value if value &gt; max_value, otherwise value.
+</p>
+
+<p> There are two variants of clamp: one where the min and max are scalars applied
+to all entries of the value, the other where the min and max are also vectors.
+</p>
+
+<p> If min_value is greater than max_value, the results are undefined.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:clz'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>clz</span>
+    <span class='normal'>: Number of leading 0 bits</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>char clz(char value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> clz(<a href='rs_value_types.html#android_rs:char2'>char2</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> clz(<a href='rs_value_types.html#android_rs:char3'>char3</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> clz(<a href='rs_value_types.html#android_rs:char4'>char4</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int clz(int value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> clz(<a href='rs_value_types.html#android_rs:int2'>int2</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> clz(<a href='rs_value_types.html#android_rs:int3'>int3</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> clz(<a href='rs_value_types.html#android_rs:int4'>int4</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>short clz(short value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> clz(<a href='rs_value_types.html#android_rs:short2'>short2</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> clz(<a href='rs_value_types.html#android_rs:short3'>short3</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> clz(<a href='rs_value_types.html#android_rs:short4'>short4</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> clz(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> clz(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> clz(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> clz(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> clz(<a href='rs_value_types.html#android_rs:uint'>uint</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> clz(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> clz(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> clz(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> clz(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> clz(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> clz(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> clz(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> value);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the number of leading 0-bits in a value.
+</p>
+
+<p> For example, <code>clz((char)0x03)</code> returns 6.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:copysign'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>copysign</span>
+    <span class='normal'>: Copies the sign of a number to another</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float copysign(float magnitude_value, float sign_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> copysign(<a href='rs_value_types.html#android_rs:float2'>float2</a> magnitude_value, <a href='rs_value_types.html#android_rs:float2'>float2</a> sign_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> copysign(<a href='rs_value_types.html#android_rs:float3'>float3</a> magnitude_value, <a href='rs_value_types.html#android_rs:float3'>float3</a> sign_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> copysign(<a href='rs_value_types.html#android_rs:float4'>float4</a> magnitude_value, <a href='rs_value_types.html#android_rs:float4'>float4</a> sign_value);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Copies the sign from sign_value to magnitude_value.
+</p>
+
+<p> The value returned is either magnitude_value or -magnitude_value.
+</p>
+
+<p> For example, <code>copysign(4.0f, -2.7f)</code> returns -4.0f and <code>copysign(-4.0f, 2.7f)</code> returns 4.0f.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:cos'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>cos</span>
+    <span class='normal'>: Cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float cos(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the cosine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cos'>native_cos</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:cosh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>cosh</span>
+    <span class='normal'>: Hypebolic cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float cosh(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hypebolic cosine of v, where v is measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:cospi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>cospi</span>
+    <span class='normal'>: Cosine of a number multiplied by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float cospi(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the cosine of <code>(v * pi)</code>, where <code>(v * pi)</code> is measured in radians.
+</p>
+
+<p> To get the cosine of a value measured in degrees, call <code>cospi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:degrees'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>degrees</span>
+    <span class='normal'>: Converts radians into degrees</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float degrees(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> degrees(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> degrees(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> degrees(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Converts from radians to degrees.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:erf'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>erf</span>
+    <span class='normal'>: Mathematical error function</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float erf(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> erf(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> erf(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> erf(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the error function.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:erfc'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>erfc</span>
+    <span class='normal'>: Mathematical complementary error function</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float erfc(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> erfc(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> erfc(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> erfc(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the complementary error function.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:exp'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>exp</span>
+    <span class='normal'>: e raised to a number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float exp(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> exp(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> exp(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> exp(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns e raised to v, i.e. e ^ v.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_exp'>native_exp</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:exp10'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>exp10</span>
+    <span class='normal'>: 10 raised to a number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float exp10(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> exp10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> exp10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> exp10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns 10 raised to v, i.e. 10.f ^ v.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:exp2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>exp2</span>
+    <span class='normal'>: 2 raised to a number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float exp2(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> exp2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> exp2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> exp2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns 2 raised to v, i.e. 2.f ^ v.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:expm1'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>expm1</span>
+    <span class='normal'>: e raised to a number minus one</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float expm1(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> expm1(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> expm1(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> expm1(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns e raised to v minus 1, i.e. (e ^ v) - 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fabs'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fabs</span>
+    <span class='normal'>: Absolute value of a float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fabs(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fabs(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fabs(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fabs(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the absolute value of the float v.
+</p>
+
+<p> For integers, use <a href='rs_math.html#android_rs:abs'>abs</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fdim'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fdim</span>
+    <span class='normal'>: Positive difference between two values</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fdim(float a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fdim(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fdim(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fdim(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the positive difference between two values.
+</p>
+
+<p> If a &gt; b, returns (a - b) otherwise returns 0f.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:floor'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>floor</span>
+    <span class='normal'>: Smallest integer not greater than a value</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float floor(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> floor(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> floor(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> floor(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the smallest integer not greater than a value.
+</p>
+
+<p> For example, <code>floor(1.2f)</code> returns 1.f, and <code>floor(-1.2f)</code> returns -2.f.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:ceil'>ceil</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fma'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fma</span>
+    <span class='normal'>: Multiply and add</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fma(float multiplicand1, float multiplicand2, float offset);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fma(<a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand1, <a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand2, <a href='rs_value_types.html#android_rs:float2'>float2</a> offset);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fma(<a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand1, <a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand2, <a href='rs_value_types.html#android_rs:float3'>float3</a> offset);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fma(<a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand1, <a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand2, <a href='rs_value_types.html#android_rs:float4'>float4</a> offset);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply and add.  Returns <code>(multiplicand1 * multiplicand2) + offset</code>.
+</p>
+
+<p> This function is similar to <a href='rs_math.html#android_rs:mad'>mad</a>().  fma() retains full precision of the multiplied result
+and rounds only after the addition.  <a href='rs_math.html#android_rs:mad'>mad</a>() rounds after the multiplication and the addition.
+This extra precision is not guaranteed in rs_fp_relaxed mode.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fmax'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fmax</span>
+    <span class='normal'>: Maximum of two floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fmax(float a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmax(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmax(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmax(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmax(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmax(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmax(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the maximum of a and b, i.e. <code>(a &lt; b ? b : a)</code>.
+</p>
+
+<p> The <a href='rs_math.html#android_rs:max'>max</a>() function returns identical results but can be applied to more data types.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fmin'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fmin</span>
+    <span class='normal'>: Minimum of two floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fmin(float a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmin(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmin(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmin(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmin(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmin(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmin(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the minimum of a and b, i.e. <code>(a &gt; b ? b : a)</code>.
+</p>
+
+<p> The <a href='rs_math.html#android_rs:min'>min</a>() function returns identical results but can be applied to more data types.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fmod'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fmod</span>
+    <span class='normal'>: Modulo</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fmod(float numerator, float denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmod(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmod(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmod(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
+</p>
+
+<p> The function <a href='rs_math.html#android_rs:remainder'>remainder</a>() is similar but rounds toward the closest interger.
+For example, <code>fmod(-3.8f, 2.f)</code> returns -1.8f (-3.8f - -1.f * 2.f)
+while <code><a href='rs_math.html#android_rs:remainder'>remainder</a>(-3.8f, 2.f)</code> returns 0.2f (-3.8f - -2.f * 2.f).
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fract'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fract</span>
+    <span class='normal'>: Positive fractional part</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fract(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float fract(float v, float* floor);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fract(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fract(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* floor);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fract(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fract(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* floor);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fract(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fract(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* floor);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>v</th><td>Input value.</td></tr>
+    <tr><th>floor</th><td>If floor is not null, *floor will be set to the floor of v.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the positive fractional part of v, i.e. <code>v - floor(v)</code>.
+</p>
+
+<p> For example, <code>fract(1.3f, &amp;val)</code> returns 0.3f and sets val to 1.f.
+<code>fract(-1.3f, &amp;val)</code> returns 0.7f and sets val to -2.f.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:frexp'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>frexp</span>
+    <span class='normal'>: Binary mantissa and exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float frexp(float v, int* exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> frexp(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a>* exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> frexp(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a>* exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> frexp(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a>* exponent);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>v</th><td>Input value.</td></tr>
+    <tr><th>exponent</th><td>If exponent is not null, *exponent will be set to the exponent of v.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the binary mantissa and exponent of v, i.e. <code>v == mantissa * 2 ^ exponent</code>.
+</p>
+
+<p> The mantissa is always between 0.5 (inclusive) and 1.0 (exclusive).
+</p>
+
+<p> See <a href='rs_math.html#android_rs:ldexp'>ldexp</a>() for the reverse operation.  See also <a href='rs_math.html#android_rs:logb'>logb</a>() and <a href='rs_math.html#android_rs:ilogb'>ilogb</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:half_recip'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>half_recip</span>
+    <span class='normal'>: Reciprocal computed to 16 bit precision</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float half_recip(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> half_recip(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> half_recip(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> half_recip(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate reciprocal of a value.
+</p>
+
+<p> The precision is that of a 16 bit floating point value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_recip'>native_recip</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:half_rsqrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>half_rsqrt</span>
+    <span class='normal'>: Reciprocal of a square root computed to 16 bit precision</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float half_rsqrt(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> half_rsqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> half_rsqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> half_rsqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate value of <code>(1.f / sqrt(value))</code>.
+</p>
+
+<p> The precision is that of a 16 bit floating point value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>(), <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:half_sqrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>half_sqrt</span>
+    <span class='normal'>: Square root computed to 16 bit precision</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float half_sqrt(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> half_sqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> half_sqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> half_sqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate square root of a value.
+</p>
+
+<p> The precision is that of a 16 bit floating point value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sqrt'>sqrt</a>(), <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:hypot'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>hypot</span>
+    <span class='normal'>: Hypotenuse</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float hypot(float a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> hypot(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> hypot(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> hypot(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hypotenuse, i.e. <code>sqrt(a * a + b * b)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ilogb'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ilogb</span>
+    <span class='normal'>: Base two exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>int ilogb(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> ilogb(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> ilogb(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> ilogb(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base two exponent of a value, where the mantissa is between
+1.f (inclusive) and 2.f (exclusive).
+</p>
+
+<p> For example, <code>ilogb(8.5f)</code> returns 3.
+</p>
+
+<p> Because of the difference in mantissa, this number is one less than is returned by <a href='rs_math.html#android_rs:frexp'>frexp</a>().
+</p>
+
+<p> <a href='rs_math.html#android_rs:logb'>logb</a>() is similar but returns a float.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ldexp'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ldexp</span>
+    <span class='normal'>: Creates a floating point from mantissa and exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float ldexp(float mantissa, int exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> ldexp(<a href='rs_value_types.html#android_rs:float2'>float2</a> mantissa, int exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> ldexp(<a href='rs_value_types.html#android_rs:float2'>float2</a> mantissa, <a href='rs_value_types.html#android_rs:int2'>int2</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> ldexp(<a href='rs_value_types.html#android_rs:float3'>float3</a> mantissa, int exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> ldexp(<a href='rs_value_types.html#android_rs:float3'>float3</a> mantissa, <a href='rs_value_types.html#android_rs:int3'>int3</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> ldexp(<a href='rs_value_types.html#android_rs:float4'>float4</a> mantissa, int exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> ldexp(<a href='rs_value_types.html#android_rs:float4'>float4</a> mantissa, <a href='rs_value_types.html#android_rs:int4'>int4</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>mantissa</th><td>Mantissa.</td></tr>
+    <tr><th>exponent</th><td>Exponent, a single component or matching vector.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the floating point created from the mantissa and exponent,
+i.e. (mantissa * 2 ^ exponent).
+</p>
+
+<p> See <a href='rs_math.html#android_rs:frexp'>frexp</a>() for the reverse operation.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:lgamma'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>lgamma</span>
+    <span class='normal'>: Natural logarithm of the gamma function</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float lgamma(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float lgamma(float v, int* sign_of_gamma);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> lgamma(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> lgamma(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a>* sign_of_gamma);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> lgamma(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> lgamma(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a>* sign_of_gamma);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> lgamma(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> lgamma(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a>* sign_of_gamma);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>v</th><td></td></tr>
+    <tr><th>sign_of_gamma</th><td>If sign_of_gamma is not null, *sign_of_gamma will be set to -1.f if the gamma of v is negative, otherwise to 1.f.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the natural logarithm of the absolute value of the gamma function,
+i.e. <code><a href='rs_math.html#android_rs:log'>log</a>(<a href='rs_math.html#android_rs:fabs'>fabs</a>(<a href='rs_math.html#android_rs:tgamma'>tgamma</a>(v)))</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:tgamma'>tgamma</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:log'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>log</span>
+    <span class='normal'>: Natural logarithm</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float log(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the natural logarithm.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log'>native_log</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:log10'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>log10</span>
+    <span class='normal'>: Base 10 logarithm</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float log10(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base 10 logarithm.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log10'>native_log10</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:log1p'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>log1p</span>
+    <span class='normal'>: Natural logarithm of a value plus 1</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float log1p(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log1p(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log1p(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log1p(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the natural logarithm of <code>(v + 1.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:log2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>log2</span>
+    <span class='normal'>: Base 2 logarithm</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float log2(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base 2 logarithm.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log2'>native_log2</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:logb'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>logb</span>
+    <span class='normal'>: Base two exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float logb(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> logb(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> logb(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> logb(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base two exponent of a value, where the mantissa is between
+1.f (inclusive) and 2.f (exclusive).
+</p>
+
+<p> For example, <code>logb(8.5f)</code> returns 3.f.
+</p>
+
+<p> Because of the difference in mantissa, this number is one less than is returned by frexp().
+</p>
+
+<p> <a href='rs_math.html#android_rs:ilogb'>ilogb</a>() is similar but returns an integer.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:mad'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>mad</span>
+    <span class='normal'>: Multiply and add</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float mad(float multiplicand1, float multiplicand2, float offset);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> mad(<a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand1, <a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand2, <a href='rs_value_types.html#android_rs:float2'>float2</a> offset);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> mad(<a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand1, <a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand2, <a href='rs_value_types.html#android_rs:float3'>float3</a> offset);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> mad(<a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand1, <a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand2, <a href='rs_value_types.html#android_rs:float4'>float4</a> offset);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply and add.  Returns <code>(multiplicand1 * multiplicand2) + offset</code>.
+</p>
+
+<p> This function is similar to <a href='rs_math.html#android_rs:fma'>fma</a>().  <a href='rs_math.html#android_rs:fma'>fma</a>() retains full precision of the multiplied result
+and rounds only after the addition.  mad() rounds after the multiplication and the addition.
+In rs_fp_relaxed mode, mad() may not do the rounding after multiplicaiton.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:max'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>max</span>
+    <span class='normal'>: Maximum</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>char max(char a, char b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> max(<a href='rs_value_types.html#android_rs:char2'>char2</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> max(<a href='rs_value_types.html#android_rs:char3'>char3</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> max(<a href='rs_value_types.html#android_rs:char4'>char4</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float max(float a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> max(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> max(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> max(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int max(int a, int b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> max(<a href='rs_value_types.html#android_rs:int2'>int2</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> max(<a href='rs_value_types.html#android_rs:int3'>int3</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> max(<a href='rs_value_types.html#android_rs:int4'>int4</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>long max(long a, long b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> max(<a href='rs_value_types.html#android_rs:long2'>long2</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> max(<a href='rs_value_types.html#android_rs:long3'>long3</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> max(<a href='rs_value_types.html#android_rs:long4'>long4</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>short max(short a, short b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> max(<a href='rs_value_types.html#android_rs:short2'>short2</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> max(<a href='rs_value_types.html#android_rs:short3'>short3</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> max(<a href='rs_value_types.html#android_rs:short4'>short4</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> max(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> max(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> max(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> max(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> max(<a href='rs_value_types.html#android_rs:uint'>uint</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> max(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> max(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> max(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> max(<a href='rs_value_types.html#android_rs:ulong'>ulong</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> max(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> max(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> max(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> max(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> max(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> max(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> max(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the maximum value of two arguments.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:min'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>min</span>
+    <span class='normal'>: Minimum</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>char min(char a, char b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char2'>char2</a> min(<a href='rs_value_types.html#android_rs:char2'>char2</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char3'>char3</a> min(<a href='rs_value_types.html#android_rs:char3'>char3</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:char4'>char4</a> min(<a href='rs_value_types.html#android_rs:char4'>char4</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float min(float a, float b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> min(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> min(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> min(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int min(int a, int b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int2'>int2</a> min(<a href='rs_value_types.html#android_rs:int2'>int2</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int3'>int3</a> min(<a href='rs_value_types.html#android_rs:int3'>int3</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int4'>int4</a> min(<a href='rs_value_types.html#android_rs:int4'>int4</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>long min(long a, long b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long2'>long2</a> min(<a href='rs_value_types.html#android_rs:long2'>long2</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long3'>long3</a> min(<a href='rs_value_types.html#android_rs:long3'>long3</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:long4'>long4</a> min(<a href='rs_value_types.html#android_rs:long4'>long4</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>short min(short a, short b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short2'>short2</a> min(<a href='rs_value_types.html#android_rs:short2'>short2</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short3'>short3</a> min(<a href='rs_value_types.html#android_rs:short3'>short3</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:short4'>short4</a> min(<a href='rs_value_types.html#android_rs:short4'>short4</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> min(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> min(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> min(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> min(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> min(<a href='rs_value_types.html#android_rs:uint'>uint</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> min(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> min(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> min(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> min(<a href='rs_value_types.html#android_rs:ulong'>ulong</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> min(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> min(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> min(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> min(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> min(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> min(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> b);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> min(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> b);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the minimum value of two arguments.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:mix'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>mix</span>
+    <span class='normal'>: Mixes two values</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float mix(float start, float stop, float fraction);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> mix(<a href='rs_value_types.html#android_rs:float2'>float2</a> start, <a href='rs_value_types.html#android_rs:float2'>float2</a> stop, float fraction);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> mix(<a href='rs_value_types.html#android_rs:float2'>float2</a> start, <a href='rs_value_types.html#android_rs:float2'>float2</a> stop, <a href='rs_value_types.html#android_rs:float2'>float2</a> fraction);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> mix(<a href='rs_value_types.html#android_rs:float3'>float3</a> start, <a href='rs_value_types.html#android_rs:float3'>float3</a> stop, float fraction);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> mix(<a href='rs_value_types.html#android_rs:float3'>float3</a> start, <a href='rs_value_types.html#android_rs:float3'>float3</a> stop, <a href='rs_value_types.html#android_rs:float3'>float3</a> fraction);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> mix(<a href='rs_value_types.html#android_rs:float4'>float4</a> start, <a href='rs_value_types.html#android_rs:float4'>float4</a> stop, float fraction);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> mix(<a href='rs_value_types.html#android_rs:float4'>float4</a> start, <a href='rs_value_types.html#android_rs:float4'>float4</a> stop, <a href='rs_value_types.html#android_rs:float4'>float4</a> fraction);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns start + ((stop - start) * fraction).
+</p>
+
+<p> This can be useful for mixing two values.  For example, to create a new color that is
+40% color1 and 60% color2, use <code>mix(color1, color2, 0.6f)</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:modf'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>modf</span>
+    <span class='normal'>: Integral and fractional components</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float modf(float v, float* integral_part);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> modf(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* integral_part);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> modf(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* integral_part);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> modf(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* integral_part);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>v</th><td>Source value.</td></tr>
+    <tr><th>integral_part</th><td>*integral_part will be set to the integral portion of the number.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Floating point portion of the value.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the integral and fractional components of a number.
+</p>
+
+<p> Both components will have the same sign as x.  For example, for an input of -3.72f,
+iret will be set to -3.f and .72f will be returned.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:nan'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>nan</span>
+    <span class='normal'>: Not a Number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float nan(<a href='rs_value_types.html#android_rs:uint'>uint</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>v</th><td>Not used.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns a NaN value (Not a Number).
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_acos'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_acos</span>
+    <span class='normal'>: Approximate inverse cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_acos(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_acos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_acos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_acos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse cosine, in radians.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:acos'>acos</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_acosh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_acosh</span>
+    <span class='normal'>: Approximate inverse hyperbolic cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_acosh(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_acosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_acosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_acosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse hyperbolic cosine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:acosh'>acosh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_acospi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_acospi</span>
+    <span class='normal'>: Approximate inverse cosine divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_acospi(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_acospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_acospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_acospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse cosine in radians, divided by pi.
+</p>
+
+<p> To get an inverse cosine measured in degrees, use <code>acospi(a) * 180.f</code>.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:acospi'>acospi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_asin'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_asin</span>
+    <span class='normal'>: Approximate inverse sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_asin(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_asin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_asin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_asin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse sine, in radians.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:asin'>asin</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_asinh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_asinh</span>
+    <span class='normal'>: Approximate inverse hyperbolic sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_asinh(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_asinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_asinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_asinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse hyperbolic sine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:asinh'>asinh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_asinpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_asinpi</span>
+    <span class='normal'>: Approximate inverse sine divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_asinpi(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_asinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_asinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_asinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse sine in radians, divided by pi.
+</p>
+
+<p> To get an inverse sine measured in degrees, use <code>asinpi(a) * 180.f</code>.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:asinpi'>asinpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_atan'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_atan</span>
+    <span class='normal'>: Approximate inverse tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_atan(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atan'>atan</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_atan2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_atan2</span>
+    <span class='normal'>: Approximate inverse tangent of a ratio</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_atan2(float numerator, float denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atan2(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atan2(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atan2(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>numerator</th><td>Numerator.</td></tr>
+    <tr><th>denominator</th><td>Denominator.  Can be 0.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent of <code>(numerator / denominator)</code>, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atan2'>atan2</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_atan2pi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_atan2pi</span>
+    <span class='normal'>: Approximate inverse tangent of a ratio, divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_atan2pi(float numerator, float denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atan2pi(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atan2pi(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atan2pi(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>numerator</th><td>Numerator.</td></tr>
+    <tr><th>denominator</th><td>Denominator.  Can be 0.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent of <code>(numerator / denominator)</code>,
+in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atan2pi(n, d) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_atanh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_atanh</span>
+    <span class='normal'>: Approximate inverse hyperbolic tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_atanh(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse hyperbolic tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atanh'>atanh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_atanpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_atanpi</span>
+    <span class='normal'>: Approximate inverse tangent divided by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_atanpi(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atanpi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atanpi'>atanpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_cbrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_cbrt</span>
+    <span class='normal'>: Approximate cube root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_cbrt(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cbrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cbrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cbrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate cubic root.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cbrt'>cbrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_cos'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_cos</span>
+    <span class='normal'>: Approximate cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_cos(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate cosine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cos'>cos</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_cosh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_cosh</span>
+    <span class='normal'>: Approximate hypebolic cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_cosh(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate hypebolic cosine.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cosh'>cosh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_cospi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_cospi</span>
+    <span class='normal'>: Approximate cosine of a number multiplied by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_cospi(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the cosine of a value measured in degrees, call <code>cospi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cospi'>cospi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_divide'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_divide</span>
+    <span class='normal'>: Approximate division</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_divide(float left_vector, float right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_divide(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_divide(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_divide(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate division of two values.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_exp'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_exp</span>
+    <span class='normal'>: Approximate e raised to a number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_exp(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_exp(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_exp(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_exp(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate exp.
+</p>
+
+<p> It is valid for inputs from -86.f to 86.f.  The precision is no worse than what would be
+expected from using 16 bit floating point values.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:exp'>exp</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_exp10'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_exp10</span>
+    <span class='normal'>: Approximate 10 raised to a number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_exp10(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_exp10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_exp10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_exp10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate exp10.
+</p>
+
+<p> It is valid for inputs from -37.f to 37.f.  The precision is no worse than what would be
+expected from using 16 bit floating point values.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:exp10'>exp10</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_exp2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_exp2</span>
+    <span class='normal'>: Approximate 2 raised to a number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_exp2(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_exp2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_exp2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_exp2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate exp2.
+</p>
+
+<p> It is valid for inputs from -125.f to 125.f.  The precision is no worse than what would be
+expected from using 16 bit floating point values.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:exp2'>exp2</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_expm1'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_expm1</span>
+    <span class='normal'>: Approximate e raised to a number minus one</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_expm1(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_expm1(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_expm1(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_expm1(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate (e ^ v) - 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:expm1'>expm1</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_hypot'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_hypot</span>
+    <span class='normal'>: Approximate hypotenuse</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_hypot(float a, float b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_hypot(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_hypot(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_hypot(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate native_sqrt(a * a + b * b)
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:hypot'>hypot</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_log'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_log</span>
+    <span class='normal'>: Approximate natural logarithm</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_log(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate log.
+</p>
+
+<p> It is not accurate for values very close to zero.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log'>log</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_log10'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_log10</span>
+    <span class='normal'>: Approximate base 10 logarithm</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_log10(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate log10.
+</p>
+
+<p> It is not accurate for values very close to zero.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log10'>log10</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_log1p'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_log1p</span>
+    <span class='normal'>: Approximate natural logarithm of a value plus 1</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_log1p(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log1p(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log1p(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log1p(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate natural logarithm of (v + 1.0f)
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log1p'>log1p</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_log2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_log2</span>
+    <span class='normal'>: Approximate base 2 logarithm</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_log2(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate log2.
+</p>
+
+<p> It is not accurate for values very close to zero.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log2'>log2</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_powr'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_powr</span>
+    <span class='normal'>: Approximate positive base raised to an exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_powr(float base, float exponent);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_powr(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:float2'>float2</a> exponent);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_powr(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:float3'>float3</a> exponent);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_powr(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:float4'>float4</a> exponent);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>base</th><td>Must be between 0.f and 256.f.  The function is not accurate for values very close to zero.</td></tr>
+    <tr><th>exponent</th><td>Must be between -15.f and 15.f.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate (base ^ exponent).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:powr'>powr</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_recip'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_recip</span>
+    <span class='normal'>: Approximate reciprocal</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_recip(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_recip(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_recip(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_recip(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate approximate reciprocal of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:half_recip'>half_recip</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_rootn'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_rootn</span>
+    <span class='normal'>: Approximate nth root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_rootn(float v, int n);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_rootn(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a> n);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_rootn(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a> n);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_rootn(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a> n);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the approximate Nth root of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:rootn'>rootn</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_rsqrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_rsqrt</span>
+    <span class='normal'>: Approximate reciprocal of a square root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_rsqrt(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_rsqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_rsqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_rsqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns approximate (1 / sqrt(v)).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>(), <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_sin'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_sin</span>
+    <span class='normal'>: Approximate sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_sin(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sin'>sin</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_sincos'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_sincos</span>
+    <span class='normal'>: Approximate sine and cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_sincos(float v, float* cos);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sincos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* cos);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sincos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* cos);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sincos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* cos);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>v</th><td>Incoming value in radians.</td></tr>
+    <tr><th>cos</th><td>*cos will be set to the cosine value.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Sine.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sine and cosine of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sincos'>sincos</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_sinh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_sinh</span>
+    <span class='normal'>: Approximate hyperbolic sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_sinh(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate hyperbolic sine of a value specified in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sinh'>sinh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_sinpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_sinpi</span>
+    <span class='normal'>: Approximate sine of a number multiplied by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_sinpi(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the sine of a value measured in degrees, call <code>sinpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sinpi'>sinpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_sqrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_sqrt</span>
+    <span class='normal'>: Approximate square root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_sqrt(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sqrt(v).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sqrt'>sqrt</a>(), <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_tan'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_tan</span>
+    <span class='normal'>: Approximate tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_tan(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_tan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_tan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_tan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate tangent of an angle measured in radians.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_tanh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_tanh</span>
+    <span class='normal'>: Approximate hyperbolic tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_tanh(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_tanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_tanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_tanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate hyperbolic tangent of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:tanh'>tanh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_tanpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_tanpi</span>
+    <span class='normal'>: Approximate tangent of a number multiplied by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_tanpi(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_tanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_tanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_tanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the tangent of a value measured in degrees, call <code>tanpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:tanpi'>tanpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:nextafter'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>nextafter</span>
+    <span class='normal'>: Next floating point number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float nextafter(float v, float target);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> nextafter(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a> target);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> nextafter(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a> target);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> nextafter(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a> target);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the next representable floating point number from v towards target.
+</p>
+
+<p> In rs_fp_relaxed mode, a denormalized input value may not yield the next denormalized
+value, as support of denormalized values is optional in relaxed mode.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:pow'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>pow</span>
+    <span class='normal'>: Base raised to an exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float pow(float base, float exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> pow(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:float2'>float2</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> pow(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:float3'>float3</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> pow(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:float4'>float4</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns base raised to the power exponent, i.e. base ^ exponent.
+</p>
+
+<p> <a href='rs_math.html#android_rs:pown'>pown</a>() and <a href='rs_math.html#android_rs:powr'>powr</a>() are similar.  <a href='rs_math.html#android_rs:pown'>pown</a>() takes an integer exponent. <a href='rs_math.html#android_rs:powr'>powr</a>() assumes the
+base to be non-negative.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:pown'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>pown</span>
+    <span class='normal'>: Base raised to an integer exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float pown(float base, int exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> pown(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:int2'>int2</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> pown(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:int3'>int3</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> pown(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:int4'>int4</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns base raised to the power exponent, i.e. base ^ exponent.
+</p>
+
+<p> <a href='rs_math.html#android_rs:pow'>pow</a>() and <a href='rs_math.html#android_rs:powr'>powr</a>() are similar.  The both take a float exponent. <a href='rs_math.html#android_rs:powr'>powr</a>() also assumes the
+base to be non-negative.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:powr'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>powr</span>
+    <span class='normal'>: Positive base raised to an exponent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float powr(float base, float exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> powr(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:float2'>float2</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> powr(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:float3'>float3</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> powr(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:float4'>float4</a> exponent);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns base raised to the power exponent, i.e. base ^ exponent.  base must be &gt;= 0.
+</p>
+
+<p> <a href='rs_math.html#android_rs:pow'>pow</a>() and <a href='rs_math.html#android_rs:pown'>pown</a>() are similar.  They both make no assumptions about the base.
+<a href='rs_math.html#android_rs:pow'>pow</a>() takes a float exponent while <a href='rs_math.html#android_rs:pown'>pown</a>() take an integer.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_powr'>native_powr</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:radians'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>radians</span>
+    <span class='normal'>: Converts degrees into radians</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float radians(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> radians(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> radians(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> radians(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Converts from degrees to radians.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:remainder'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>remainder</span>
+    <span class='normal'>: Remainder of a division</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float remainder(float numerator, float denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> remainder(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> remainder(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> remainder(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the remainder of (numerator / denominator), where the quotient is rounded towards
+the nearest integer.
+</p>
+
+<p> The function <a href='rs_math.html#android_rs:fmod'>fmod</a>() is similar but rounds toward the closest interger.
+For example, <code><a href='rs_math.html#android_rs:fmod'>fmod</a>(-3.8f, 2.f)</code> returns -1.8f (-3.8f - -1.f * 2.f)
+while <code>remainder(-3.8f, 2.f)</code> returns 0.2f (-3.8f - -2.f * 2.f).
+</p>
+  </div>
+</div>
+
+<a name='android_rs:remquo'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>remquo</span>
+    <span class='normal'>: Remainder and quotient of a division</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float remquo(float numerator, float denominator, int* quotient);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> remquo(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator, <a href='rs_value_types.html#android_rs:int2'>int2</a>* quotient);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> remquo(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator, <a href='rs_value_types.html#android_rs:int3'>int3</a>* quotient);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> remquo(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator, <a href='rs_value_types.html#android_rs:int4'>int4</a>* quotient);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>numerator</th><td>Numerator.</td></tr>
+    <tr><th>denominator</th><td>Denominator.</td></tr>
+    <tr><th>quotient</th><td>*quotient will be set to the integer quotient.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Remainder, precise only for the low three bits.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the quotient and the remainder of (numerator / denominator).
+</p>
+
+<p> Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
+</p>
+
+<p> This function is useful for implementing periodic functions.  The low three bits of the
+quotient gives the quadrant and the remainder the distance within the quadrant.
+For example, an implementation of <a href='rs_math.html#android_rs:sin'>sin</a>(x) could call <code>remquo(x, PI / 2.f, &amp;quadrant)</code>
+to reduce very large value of x to something within a limited range.
+</p>
+
+<p> Example: <code>remquo(-23.5f, 8.f, &amp;quot)</code> sets the lowest three bits of quot to 3
+and the sign negative.  It returns 0.5f.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rint'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rint</span>
+    <span class='normal'>: Round to even</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rint(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rint(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rint(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rint(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Rounds to the nearest integral value.
+</p>
+
+<p> rint() rounds half values to even.  For example, <code>rint(0.5f)</code> returns 0.f and
+<code>rint(1.5f)</code> returns 2.f.  Similarly, <code>rint(-0.5f)</code> returns -0.f and
+<code>rint(-1.5f)</code> returns -2.f.
+</p>
+
+<p> <a href='rs_math.html#android_rs:round'>round</a>() is similar but rounds away from zero.  <a href='rs_math.html#android_rs:trunc'>trunc</a>() truncates the decimal fraction.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rootn'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rootn</span>
+    <span class='normal'>: Nth root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rootn(float v, int n);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rootn(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a> n);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rootn(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a> n);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rootn(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a> n);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the Nth root of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:round'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>round</span>
+    <span class='normal'>: Round away from zero</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float round(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> round(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> round(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> round(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Round to the nearest integral value.
+</p>
+
+<p> round() rounds half values away from zero.  For example, <code>round(0.5f)</code> returns 1.f
+and <code>round(1.5f)</code> returns 2.f.  Similarly, <code>round(-0.5f)</code> returns -1.f
+and <code>round(-1.5f)</code> returns -2.f.
+</p>
+
+<p> <a href='rs_math.html#android_rs:rint'>rint</a>() is similar but rounds half values toward even.  <a href='rs_math.html#android_rs:trunc'>trunc</a>() truncates the decimal fraction.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsClamp'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsClamp</span>
+    <span class='normal'>: Restrain a value to a range</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>char rsClamp(char amount, char low, char high);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int rsClamp(int amount, int low, int high);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>short rsClamp(short amount, short low, short high);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsClamp(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> amount, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> low, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> high);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsClamp(<a href='rs_value_types.html#android_rs:uint'>uint</a> amount, <a href='rs_value_types.html#android_rs:uint'>uint</a> low, <a href='rs_value_types.html#android_rs:uint'>uint</a> high);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsClamp(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> amount, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> low, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> high);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>amount</th><td>Value to clamp.</td></tr>
+    <tr><th>low</th><td>Lower bound.</td></tr>
+    <tr><th>high</th><td>Upper bound.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Use <a href='rs_math.html#android_rs:clamp'>clamp</a>() instead.</p>
+<p> Clamp a value between low and high.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsFrac'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsFrac</span>
+    <span class='normal'>: Returns the fractional part of a float</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rsFrac(float v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  Use <a href='rs_math.html#android_rs:fract'>fract</a>() instead.</p>
+<p> Returns the fractional part of a float
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsRand'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsRand</span>
+    <span class='normal'>: Pseudo-random number</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rsRand(float max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float rsRand(float min_value, float max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int rsRand(int max_value);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>int rsRand(int min_value, int max_value);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Return a random value between 0 (or min_value) and max_malue.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsqrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsqrt</span>
+    <span class='normal'>: Reciprocal of a square root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rsqrt(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns (1 / sqrt(v)).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>(), <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:sign'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>sign</span>
+    <span class='normal'>: Sign of a value</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float sign(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sign(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sign(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sign(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sign of a value.
+</p>
+
+<p> if (v &lt; 0) return -1.f;
+else if (v &gt; 0) return 1.f;
+else return 0.f;
+</p>
+  </div>
+</div>
+
+<a name='android_rs:sin'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>sin</span>
+    <span class='normal'>: Sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float sin(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sin'>native_sin</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:sincos'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>sincos</span>
+    <span class='normal'>: Sine and cosine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float sincos(float v, float* cos);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sincos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* cos);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sincos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* cos);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sincos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* cos);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>v</th><td>Incoming value in radians.</td></tr>
+    <tr><th>cos</th><td>*cos will be set to the cosine value.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Sine of v.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sine and cosine of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:sinh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>sinh</span>
+    <span class='normal'>: Hyperbolic sine</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float sinh(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hyperbolic sine of v, where v is measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:sinpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>sinpi</span>
+    <span class='normal'>: Sine of a number multiplied by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float sinpi(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sine of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the sine of a value measured in degrees, call <code>sinpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:sqrt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>sqrt</span>
+    <span class='normal'>: Square root</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float sqrt(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the square root of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>(), <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:step'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>step</span>
+    <span class='normal'>: 0 if less than a value, 0 otherwise</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float step(float edge, float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> step(float edge, <a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> step(<a href='rs_value_types.html#android_rs:float2'>float2</a> edge, float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> step(<a href='rs_value_types.html#android_rs:float2'>float2</a> edge, <a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> step(float edge, <a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> step(<a href='rs_value_types.html#android_rs:float3'>float3</a> edge, float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> step(<a href='rs_value_types.html#android_rs:float3'>float3</a> edge, <a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> step(float edge, <a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> step(<a href='rs_value_types.html#android_rs:float4'>float4</a> edge, float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> step(<a href='rs_value_types.html#android_rs:float4'>float4</a> edge, <a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns 0.f if v &lt; edge, 1.f otherwise.
+</p>
+
+<p> This can be useful to create conditional computations without using loops and branching
+instructions.  For example, instead of computing <code>(a[i] &lt; b[i]) ? 0.f : <a href='rs_math.html#android_rs:atan2'>atan2</a>(a[i], b[i])</code>
+for the corresponding elements of a vector, you could instead use <code>step(a, b) * <a href='rs_math.html#android_rs:atan2'>atan2</a>(a, b)</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:tan'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>tan</span>
+    <span class='normal'>: Tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float tan(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the tangent of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_tan'>native_tan</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:tanh'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>tanh</span>
+    <span class='normal'>: Hyperbolic tangent</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float tanh(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hyperbolic tangent of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:tanpi'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>tanpi</span>
+    <span class='normal'>: Tangent of a number multiplied by pi</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float tanpi(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the tangent of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the tangent of a value measured in degrees, call <code>tanpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:tgamma'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>tgamma</span>
+    <span class='normal'>: Gamma function</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float tgamma(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tgamma(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tgamma(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tgamma(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the gamma function of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:lgamma'>lgamma</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:trunc'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>trunc</span>
+    <span class='normal'>: Truncates a floating point</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float trunc(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> trunc(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> trunc(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> trunc(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Rounds to integral using truncation.
+</p>
+
+<p> For example, <code>trunc(1.7f)</code> returns 1.f and <code>trunc(-1.7f)</code> returns -1.f.
+</p>
+
+<p> See <a href='rs_math.html#android_rs:rint'>rint</a>() and <a href='rs_math.html#android_rs:round'>round</a>() for other rounding options.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_matrix.jd b/docs/html/guide/topics/renderscript/reference/rs_matrix.jd
new file mode 100644
index 0000000..5d0df18
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_matrix.jd
@@ -0,0 +1,1059 @@
+page.title=RenderScript Matrix Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4.
+They are particularly useful for graphical transformations and are compatible
+with OpenGL.
+</p>
+
+<p> We use a zero-based index for rows and columns.  E.g. the last element of a
+<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a> is found at (3, 3).
+</p>
+
+<p> RenderScript uses column-major matrices and column-based vectors.  Transforming
+a vector is done by postmultiplying the vector, e.g. <code>(matrix * vector)</code>,
+as provided by <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> To create a transformation matrix that performs two transformations at once,
+multiply the two source matrices, with the first transformation as the right
+argument.  E.g. to create a transformation matrix that applies the
+transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1)</code>.
+This derives from <code>s2 * (s1 * v)</code>, which is <code>(s2 * s1) * v</code>.
+</p>
+
+<p> We have two style of functions to create transformation matrices:
+rsMatrixLoad<i>Transformation</i> and rsMatrix<i>Transformation</i>.  The former
+style simply stores the transformation matrix in the first argument.  The latter
+modifies a pre-existing transformation matrix so that the new transformation
+happens first.  E.g. if you call <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>() on a matrix that already
+does a scaling, the resulting matrix when applied to a vector will first do the
+translation then the scaling.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsExtractFrustumPlanes'>rsExtractFrustumPlanes</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Compute frustum planes
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsIsSphereInFrustum'>rsIsSphereInFrustum</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Checks if a sphere is within the frustum planes
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixGet'>rsMatrixGet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get one element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixInverse'>rsMatrixInverse</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverts a matrix in place
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixInverseTranspose'>rsMatrixInverseTranspose</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Inverts and transpose a matrix in place
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoad'>rsMatrixLoad</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load or copy a matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadFrustum'>rsMatrixLoadFrustum</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a frustum projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadIdentity'>rsMatrixLoadIdentity</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load identity matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadMultiply'>rsMatrixLoadMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply two matrices
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadOrtho'>rsMatrixLoadOrtho</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load an orthographic projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadPerspective'>rsMatrixLoadPerspective</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a perspective projection matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadRotate'>rsMatrixLoadRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a rotation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadScale'>rsMatrixLoadScale</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a scaling matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixLoadTranslate'>rsMatrixLoadTranslate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Load a translation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply a matrix by a vector or another matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixRotate'>rsMatrixRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a rotation to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixScale'>rsMatrixScale</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a scaling to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixSet'>rsMatrixSet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Set one element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Apply a translation to a transformation matrix
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_matrix.html#android_rs:rsMatrixTranspose'>rsMatrixTranspose</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Transpose a matrix place
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsExtractFrustumPlanes'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsExtractFrustumPlanes</span>
+    <span class='normal'>: Compute frustum planes</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsExtractFrustumPlanes(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* viewProj, <a href='rs_value_types.html#android_rs:float4'>float4</a>* left, <a href='rs_value_types.html#android_rs:float4'>float4</a>* right, <a href='rs_value_types.html#android_rs:float4'>float4</a>* top, <a href='rs_value_types.html#android_rs:float4'>float4</a>* bottom, <a href='rs_value_types.html#android_rs:float4'>float4</a>* near, <a href='rs_value_types.html#android_rs:float4'>float4</a>* far);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>viewProj</th><td>Matrix to extract planes from.</td></tr>
+    <tr><th>left</th><td>Left plane.</td></tr>
+    <tr><th>right</th><td>Right plane.</td></tr>
+    <tr><th>top</th><td>Top plane.</td></tr>
+    <tr><th>bottom</th><td>Bottom plane.</td></tr>
+    <tr><th>near</th><td>Near plane.</td></tr>
+    <tr><th>far</th><td>Far plane.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes 6 frustum planes from the view projection matrix
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsIsSphereInFrustum'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsIsSphereInFrustum</span>
+    <span class='normal'>: Checks if a sphere is within the frustum planes</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsIsSphereInFrustum(<a href='rs_value_types.html#android_rs:float4'>float4</a>* sphere, <a href='rs_value_types.html#android_rs:float4'>float4</a>* left, <a href='rs_value_types.html#android_rs:float4'>float4</a>* right, <a href='rs_value_types.html#android_rs:float4'>float4</a>* top, <a href='rs_value_types.html#android_rs:float4'>float4</a>* bottom, <a href='rs_value_types.html#android_rs:float4'>float4</a>* near, <a href='rs_value_types.html#android_rs:float4'>float4</a>* far);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>sphere</th><td>float4 representing the sphere.</td></tr>
+    <tr><th>left</th><td>Left plane.</td></tr>
+    <tr><th>right</th><td>Right plane.</td></tr>
+    <tr><th>top</th><td>Top plane.</td></tr>
+    <tr><th>bottom</th><td>Bottom plane.</td></tr>
+    <tr><th>near</th><td>Near plane.</td></tr>
+    <tr><th>far</th><td>Far plane.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns true if the sphere is within the 6 frustum planes.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixGet'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixGet</span>
+    <span class='normal'>: Get one element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rsMatrixGet(const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float rsMatrixGet(const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float rsMatrixGet(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to extract the element from.</td></tr>
+    <tr><th>col</th><td>Zero-based column of the element to be extracted.</td></tr>
+    <tr><th>row</th><td>Zero-based row of the element to extracted.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns one element of a matrix.
+</p>
+
+<p> <b>Warning:</b> The order of the column and row parameters may be unexpected.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixInverse'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixInverse</span>
+    <span class='normal'>: Inverts a matrix in place</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsMatrixInverse(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to invert.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns true if the matrix was successfully inverted.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixInverseTranspose'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixInverseTranspose</span>
+    <span class='normal'>: Inverts and transpose a matrix in place</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsMatrixInverseTranspose(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to modify.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> The matrix is first inverted then transposed. Returns true if the matrix was
+successfully inverted.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoad'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoad</span>
+    <span class='normal'>: Load or copy a matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* destination, const float* array);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* source);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* destination, const float* array);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* source);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const float* array);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* source);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* source);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* source);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>destination</th><td>Matrix to set.</td></tr>
+    <tr><th>array</th><td>Array of values to set the matrix to. These arrays should be 4, 9, or 16 floats long, depending on the matrix size.</td></tr>
+    <tr><th>source</th><td>Source matrix.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Set the elements of a matrix from an array of floats or from another matrix.
+</p>
+
+<p> If loading from an array, the floats should be in row-major order, i.e. the element a
+<code>row 0, column 0</code> should be first, followed by the element at
+<code>row 0, column 1</code>, etc.
+</p>
+
+<p> If loading from a matrix and the source is smaller than the destination, the rest
+of the destination is filled with elements of the identity matrix.  E.g.
+loading a rs_matrix2x2 into a rs_matrix4x4 will give:
+<table style="max-width:300px">
+<tr><td>m00</td> <td>m01</td> <td>0.0</td> <td>0.0</td></tr>
+<tr><td>m10</td> <td>m11</td> <td>0.0</td> <td>0.0</td></tr>
+<tr><td>0.0</td> <td>0.0</td> <td>1.0</td> <td>0.0</td></tr>
+<tr><td>0.0</td> <td>0.0</td> <td>0.0</td> <td>1.0</td></tr>
+</table>
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadFrustum'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadFrustum</span>
+    <span class='normal'>: Load a frustum projection matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadFrustum(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float left, float right, float bottom, float top, float near, float far);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    <tr><th>left</th><td></td></tr>
+    <tr><th>right</th><td></td></tr>
+    <tr><th>bottom</th><td></td></tr>
+    <tr><th>top</th><td></td></tr>
+    <tr><th>near</th><td></td></tr>
+    <tr><th>far</th><td></td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Constructs a frustum projection matrix, transforming the box identified by
+the six clipping planes <code>left, right, bottom, top, near, far</code>.
+</p>
+
+<p> To apply this projection to a vector, multiply the vector by the created
+matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadIdentity'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadIdentity</span>
+    <span class='normal'>: Load identity matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadIdentity(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoadIdentity(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoadIdentity(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Set the elements of a matrix to the identity matrix.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadMultiply'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadMultiply</span>
+    <span class='normal'>: Multiply two matrices</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadMultiply(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* lhs, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoadMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* lhs, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixLoadMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* lhs, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    <tr><th>lhs</th><td>Left matrix of the product.</td></tr>
+    <tr><th>rhs</th><td>Right matrix of the product.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Sets m to the matrix product of <code>lhs * rhs</code>.
+</p>
+
+<p> To combine two 4x4 transformaton matrices, multiply the second transformation matrix
+by the first transformation matrix.  E.g. to create a transformation matrix that applies
+the transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1)</code>.
+</p>
+
+<p> <b>Warning:</b> Prior to version 21, storing the result back into right matrix is not supported and
+will result in undefined behavior.  Use rsMatrixMulitply instead.   E.g. instead of doing
+rsMatrixLoadMultiply (&amp;m2r, &amp;m2r, &amp;m2l), use rsMatrixMultiply (&amp;m2r, &amp;m2l).
+rsMatrixLoadMultiply (&amp;m2l, &amp;m2r, &amp;m2l) works as expected.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadOrtho'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadOrtho</span>
+    <span class='normal'>: Load an orthographic projection matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadOrtho(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float left, float right, float bottom, float top, float near, float far);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    <tr><th>left</th><td></td></tr>
+    <tr><th>right</th><td></td></tr>
+    <tr><th>bottom</th><td></td></tr>
+    <tr><th>top</th><td></td></tr>
+    <tr><th>near</th><td></td></tr>
+    <tr><th>far</th><td></td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Constructs an orthographic projection matrix, transforming the box identified by the
+six clipping planes <code>left, right, bottom, top, near, far</code> into a unit cube
+with a corner at <code>(-1, -1, -1)</code> and the opposite at <code>(1, 1, 1)</code>.
+</p>
+
+<p> To apply this projection to a vector, multiply the vector by the created matrix
+using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> See https://en.wikipedia.org/wiki/Orthographic_projection .
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadPerspective'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadPerspective</span>
+    <span class='normal'>: Load a perspective projection matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadPerspective(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float fovy, float aspect, float near, float far);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    <tr><th>fovy</th><td>Field of view, in degrees along the Y axis.</td></tr>
+    <tr><th>aspect</th><td>Ratio of x / y.</td></tr>
+    <tr><th>near</th><td>Near clipping plane.</td></tr>
+    <tr><th>far</th><td>Far clipping plane.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Constructs a perspective projection matrix, assuming a symmetrical field of view.
+</p>
+
+<p> To apply this projection to a vector, multiply the vector by the created matrix
+using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadRotate'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadRotate</span>
+    <span class='normal'>: Load a rotation matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadRotate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float rot, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    <tr><th>rot</th><td>How much rotation to do, in degrees.</td></tr>
+    <tr><th>x</th><td>X component of the vector that is the axis of rotation.</td></tr>
+    <tr><th>y</th><td>Y component of the vector that is the axis of rotation.</td></tr>
+    <tr><th>z</th><td>Z component of the vector that is the axis of rotation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function creates a rotation matrix.  The axis of rotation is the <code>(x, y, z)</code> vector.
+</p>
+
+<p> To rotate a vector, multiply the vector by the created matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> See http://en.wikipedia.org/wiki/Rotation_matrix .
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadScale'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadScale</span>
+    <span class='normal'>: Load a scaling matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadScale(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    <tr><th>x</th><td>Multiple to scale the x components by.</td></tr>
+    <tr><th>y</th><td>Multiple to scale the y components by.</td></tr>
+    <tr><th>z</th><td>Multiple to scale the z components by.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function creates a scaling matrix, where each component of a vector is multiplied
+by a number.  This number can be negative.
+</p>
+
+<p> To scale a vector, multiply the vector by the created matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadTranslate'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixLoadTranslate</span>
+    <span class='normal'>: Load a translation matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixLoadTranslate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to set.</td></tr>
+    <tr><th>x</th><td>Number to add to each x component.</td></tr>
+    <tr><th>y</th><td>Number to add to each y component.</td></tr>
+    <tr><th>z</th><td>Number to add to each z component.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function creates a translation matrix, where a number is added to each element of
+a vector.
+</p>
+
+<p> To translate a vector, multiply the vector by the created matrix using
+<a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixMultiply'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixMultiply</span>
+    <span class='normal'>: Multiply a matrix by a vector or another matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float4'>float4</a> in);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float4'>float4</a> in);
+</td>
+        <td>    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Left matrix of the product and the matrix to be set.</td></tr>
+    <tr><th>rhs</th><td>Right matrix of the product.</td></tr>
+    <tr><th>in</th><td></td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> For the matrix by matrix variant, sets m to the matrix product <code>m * rhs</code>.
+</p>
+
+<p> When combining two 4x4 transformation matrices using this function, the resulting
+matrix will correspond to performing the rhs transformation first followed by
+the original m transformation.
+</p>
+
+<p> For the matrix by vector variant, returns the post-multiplication of the vector
+by the matrix, ie. <code>m * in</code>.
+</p>
+
+<p> When multiplying a float3 to a <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>, the vector is expanded with (1).
+</p>
+
+<p> When multiplying a float2 to a <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>, the vector is expanded with (0, 1).
+</p>
+
+<p> When multiplying a float2 to a <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>, the vector is expanded with (0).
+</p>
+
+<p> Starting with API 14, this function takes a const matrix as the first argument.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixRotate'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixRotate</span>
+    <span class='normal'>: Apply a rotation to a transformation matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixRotate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float rot, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to modify.</td></tr>
+    <tr><th>rot</th><td>How much rotation to do, in degrees.</td></tr>
+    <tr><th>x</th><td>X component of the vector that is the axis of rotation.</td></tr>
+    <tr><th>y</th><td>Y component of the vector that is the axis of rotation.</td></tr>
+    <tr><th>z</th><td>Z component of the vector that is the axis of rotation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply the matrix m with a rotation matrix.
+</p>
+
+<p> This function modifies a transformation matrix to first do a rotation.  The axis of
+rotation is the <code>(x, y, z)</code> vector.
+</p>
+
+<p> To apply this combined transformation to a vector, multiply the vector by the created
+matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixScale'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixScale</span>
+    <span class='normal'>: Apply a scaling to a transformation matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixScale(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to modify.</td></tr>
+    <tr><th>x</th><td>Multiple to scale the x components by.</td></tr>
+    <tr><th>y</th><td>Multiple to scale the y components by.</td></tr>
+    <tr><th>z</th><td>Multiple to scale the z components by.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply the matrix m with a scaling matrix.
+</p>
+
+<p> This function modifies a transformation matrix to first do a scaling.   When scaling,
+each component of a vector is multiplied by a number.  This number can be negative.
+</p>
+
+<p> To apply this combined transformation to a vector, multiply the vector by the created
+matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixSet'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixSet</span>
+    <span class='normal'>: Set one element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixSet(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row, float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixSet(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row, float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixSet(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row, float v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix that will be modified.</td></tr>
+    <tr><th>col</th><td>Zero-based column of the element to be set.</td></tr>
+    <tr><th>row</th><td>Zero-based row of the element to be set.</td></tr>
+    <tr><th>v</th><td>Value to set.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Set an element of a matrix.
+</p>
+
+<p> <b>Warning:</b> The order of the column and row parameters may be unexpected.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixTranslate'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixTranslate</span>
+    <span class='normal'>: Apply a translation to a transformation matrix</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixTranslate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to modify.</td></tr>
+    <tr><th>x</th><td>Number to add to each x component.</td></tr>
+    <tr><th>y</th><td>Number to add to each y component.</td></tr>
+    <tr><th>z</th><td>Number to add to each z component.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply the matrix m with a translation matrix.
+</p>
+
+<p> This function modifies a transformation matrix to first do a translation.  When
+translating, a number is added to each component of a vector.
+</p>
+
+<p> To apply this combined transformation to a vector, multiply the vector by the
+created matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsMatrixTranspose'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsMatrixTranspose</span>
+    <span class='normal'>: Transpose a matrix place</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsMatrixTranspose(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixTranspose(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsMatrixTranspose(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Matrix to transpose.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Transpose the matrix m in place.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_object_info.jd b/docs/html/guide/topics/renderscript/reference/rs_object_info.jd
new file mode 100644
index 0000000..192df54
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_object_info.jd
@@ -0,0 +1,1077 @@
+page.title=RenderScript Object Characteristics Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below can be used to query the characteristics of an Allocation, Element,
+or Sampler object.  These objects are created from Java.  You can't create them from a
+script.
+</p>
+
+<p> <h5>Allocations:</h5>
+</p>
+
+<p> Allocations are the primary method used to pass data to and from RenderScript kernels.
+</p>
+
+<p> They are a structured collection of cells that can be used to store bitmaps, textures,
+arbitrary data points, etc.
+</p>
+
+<p> This collection of cells may have many dimensions (X, Y, Z, Array0, Array1, Array2, Array3),
+faces (for cubemaps), and level of details (for mipmapping).
+</p>
+
+<p> See the <a href='http://developer.android.com/reference/android/renderscript/Allocation.html'>android.renderscript.Allocation</a> for details on to create Allocations.
+</p>
+
+<p> <h5>Elements:</h5>
+</p>
+
+<p> The term "element" is used a bit ambiguously in RenderScript, as both type information
+for the cells of an Allocation and the instantiation of that type.  For example:<ul>
+<li><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> is a handle to a type specification, and</li>
+<li>In functions like <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>(), "element" means the instantiation of the type,
+    i.e. a cell of an Allocation.</li></ul>
+</p>
+
+<p> The functions below let you query the characteristics of the type specificiation.
+</p>
+
+<p> An Element can specify a simple data types as found in C, e.g. an integer, float, or
+boolean.  It can also specify a handle to a RenderScript object.  See <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a> for
+a list of basic types.
+</p>
+
+<p> Elements can specify fixed size vector (of size 2, 3, or 4) versions of the basic types.
+Elements can be grouped together into complex Elements, creating the equivalent of
+C structure definitions.
+</p>
+
+<p> Elements can also have a kind, which is semantic information used to interpret pixel
+data.  See <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>.
+</p>
+
+<p> When creating Allocations of common elements, you can simply use one of the many predefined
+Elements like <a href='http://developer.android.com/reference/android/renderscript/Element.html#F32_2(android.renderscript.RenderScript)'>F32_2</a>.
+</p>
+
+<p> To create complex Elements, use the <a href='http://developer.android.com/reference/android/renderscript/Element.Builder.html'>Element.Builder</a> Java class.
+</p>
+
+<p> <h5>Samplers:</h5>
+</p>
+
+<p> Samplers objects define how Allocations can be read as structure within a kernel.
+See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimFaces'>rsAllocationGetDimFaces</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Presence of more than one face
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimLOD'>rsAllocationGetDimLOD</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Presence of levels of detail
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimX'>rsAllocationGetDimX</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the X dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimY'>rsAllocationGetDimY</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the Y dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetDimZ'>rsAllocationGetDimZ</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of the Z dimension
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsAllocationGetElement'>rsAllocationGetElement</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get the object that describes the cell of an Allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Release an object
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetBytesSize'>rsElementGetBytesSize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Size of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetDataKind'>rsElementGetDataKind</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Kind of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetDataType'>rsElementGetDataType</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Data type of an Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sub-element of a complex Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementArraySize'>rsElementGetSubElementArraySize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Array size of a sub-element of a complex Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementCount'>rsElementGetSubElementCount</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Number of sub-elements
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementName'>rsElementGetSubElementName</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Name of a sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementNameLength'>rsElementGetSubElementNameLength</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Length of the name of a sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetSubElementOffsetBytes'>rsElementGetSubElementOffsetBytes</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Offset of the instantiated sub-element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Vector size of the Element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Check for an empty handle
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetAnisotropy'>rsSamplerGetAnisotropy</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Anisotropy of the Sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetMagnification'>rsSamplerGetMagnification</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler magnification value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetMinification'>rsSamplerGetMinification</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler minification value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetWrapS'>rsSamplerGetWrapS</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap S value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsSamplerGetWrapT'>rsSamplerGetWrapT</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap T value
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Deprecated Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_info.html#android_rs:rsGetAllocation'>rsGetAllocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      <b>Deprecated</b>.  Return the Allocation for a given pointer
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAllocationGetDimFaces'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationGetDimFaces</span>
+    <span class='normal'>: Presence of more than one face</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimFaces(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Returns 1 if more than one face is present, 0 otherwise.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> If the Allocation is a cubemap, this function returns 1 if there's more than one face
+present.  In all other cases, it returns 0.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimLOD'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationGetDimLOD</span>
+    <span class='normal'>: Presence of levels of detail</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimLOD(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Returns 1 if more than one LOD is present, 0 otherwise.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Query an Allocation for the presence of more than one Level Of Detail.  This is useful
+for mipmaps.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimX'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationGetDimX</span>
+    <span class='normal'>: Size of the X dimension</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimX(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>X dimension of the Allocation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size of the X dimension of the Allocation.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimY'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationGetDimY</span>
+    <span class='normal'>: Size of the Y dimension</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimY(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Y dimension of the Allocation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size of the Y dimension of the Allocation.  If the Allocation has less
+than two dimensions, returns 0.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimZ'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationGetDimZ</span>
+    <span class='normal'>: Size of the Z dimension</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimZ(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Z dimension of the Allocation.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size of the Z dimension of the Allocation.  If the Allocation has less
+than three dimensions, returns 0.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsAllocationGetElement'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsAllocationGetElement</span>
+    <span class='normal'>: Get the object that describes the cell of an Allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> rsAllocationGetElement(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>a</th><td>Allocation to get data from.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Element describing Allocation layout.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Element object describing the type, kind, and other characteristics of a cell
+of an Allocation.  See the rsElement* functions below.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsClearObject'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsClearObject</span>
+    <span class='normal'>: Release an object</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>* dst);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>* dst);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_font'>rs_font</a>* dst);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a>* dst);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a>* dst);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a>* dst);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a>* dst);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a>* dst);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>* dst);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>* dst);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>* dst);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Tells the run time that this handle will no longer be used to access the the related
+object.  If this was the last handle to that object, resource recovery may happen.
+</p>
+
+<p> After calling this function, *dst will be set to an empty handle.  See <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetBytesSize'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetBytesSize</span>
+    <span class='normal'>: Size of an Element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetBytesSize(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size in bytes that an instantiation of this Element will occupy.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetDataKind'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetDataKind</span>
+    <span class='normal'>: Kind of an Element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a> rsElementGetDataKind(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the Element's data kind.  This is used to interpret pixel data.
+</p>
+
+<p> See <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetDataType'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetDataType</span>
+    <span class='normal'>: Data type of an Element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a> rsElementGetDataType(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the Element's base data type.  This can be a type similar to C/C++ (e.g.
+RS_TYPE_UNSIGNED_8), a handle (e.g. RS_TYPE_ALLOCATION and RS_TYPE_ELEMENT), or a
+more complex numerical type (e.g. RS_TYPE_UNSIGNED_5_6_5 and RS_TYPE_MATRIX_4X4).
+See <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>.
+</p>
+
+<p> If the Element describes a vector, this function returns the data type of one of its items.
+Use <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a> to get the size of the vector.
+</p>
+
+<p> If the Element describes a structure, RS_TYPE_NONE is returned.  Use the rsElementGetSub*
+functions to explore this complex Element.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElement'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetSubElement</span>
+    <span class='normal'>: Sub-element of a complex Element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> rsElementGetSubElement(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>e</th><td>Element to query.</td></tr>
+    <tr><th>index</th><td>Index of the sub-element to return.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Sub-element at the given index.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> For Elements that represents a structure, this function returns the sub-element at the
+specified index.
+</p>
+
+<p> If the Element is not a structure or the index is greater or equal to the number of
+sub-elements, an invalid handle is returned.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementArraySize'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetSubElementArraySize</span>
+    <span class='normal'>: Array size of a sub-element of a complex Element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementArraySize(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>e</th><td>Element to query.</td></tr>
+    <tr><th>index</th><td>Index of the sub-element.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Array size of the sub-element.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> For complex Elements, sub-elements can be statically sized arrays.  This function
+returns the array size of the sub-element at the index.  This sub-element repetition
+is different than fixed size vectors.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementCount'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetSubElementCount</span>
+    <span class='normal'>: Number of sub-elements</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementCount(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>e</th><td>Element to get data from.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Number of sub-elements.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Elements can be simple, such as an int or a float, or a structure with multiple
+sub-elements.  This function returns zero for simple Elements and the number of
+sub-elements for complex Elements.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementName'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetSubElementName</span>
+    <span class='normal'>: Name of a sub-element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementName(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index, char* name, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> nameLength);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>e</th><td>Element to get data from.</td></tr>
+    <tr><th>index</th><td>Index of the sub-element.</td></tr>
+    <tr><th>name</th><td>Address of the array to store the name into.</td></tr>
+    <tr><th>nameLength</th><td>Length of the provided name array.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Number of characters copied, excluding the null terminator.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> For complex Elements, this function returns the name of the sub-element at the
+specified index.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementNameLength'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetSubElementNameLength</span>
+    <span class='normal'>: Length of the name of a sub-element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementNameLength(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>e</th><td>Element to get data from.</td></tr>
+    <tr><th>index</th><td>Index of the sub-element.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Length of the sub-element name including the null terminator.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> For complex Elements, this function returns the length of the name of the sub-element
+at the specified index.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementOffsetBytes'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetSubElementOffsetBytes</span>
+    <span class='normal'>: Offset of the instantiated sub-element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementOffsetBytes(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>e</th><td>Element to get data from.</td></tr>
+    <tr><th>index</th><td>Index of the sub-element.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Offset in bytes.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> This function returns the relative position of the instantiation of the specified
+sub-element within the instantiation of the Element.
+</p>
+
+<p> For example, if the Element describes a 32 bit float followed by a 32 bit integer,
+the offset return for the first will be 0 and the second 4.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsElementGetVectorSize'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsElementGetVectorSize</span>
+    <span class='normal'>: Vector size of the Element</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetVectorSize(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>e</th><td>Element to get data from.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Length of the element vector.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the Element's vector size.  If the Element does not represent a vector,
+1 is returned.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsGetAllocation'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsGetAllocation</span>
+    <span class='normal'>: Return the Allocation for a given pointer</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> rsGetAllocation(const void* p);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+    <p><b>Deprecated.</b>  This function is deprecated and will be removed from the SDK in a future release.</p>
+<p> Returns the Allocation for a given pointer.  The pointer should point within a valid
+allocation.  The results are undefined if the pointer is not from a valid Allocation.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsIsObject'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsIsObject</span>
+    <span class='normal'>: Check for an empty handle</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_font'>rs_font</a> v);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> v);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> v);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> v);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> v);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a> v);
+</td>
+        <td>    When compiling for 32 bits. 
+        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_type'>rs_type</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns true if the handle contains a non-null reference.
+</p>
+
+<p> This function does not validate that the internal pointer used in the handle
+points to an actual valid object; it only checks for null.
+</p>
+
+<p> This function can be used to check the Element returned by <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>()
+or see if <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>() has been called on a handle.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSamplerGetAnisotropy'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSamplerGetAnisotropy</span>
+    <span class='normal'>: Anisotropy of the Sampler</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rsSamplerGetAnisotropy(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's anisotropy.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSamplerGetMagnification'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSamplerGetMagnification</span>
+    <span class='normal'>: Sampler magnification value</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetMagnification(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's magnification value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSamplerGetMinification'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSamplerGetMinification</span>
+    <span class='normal'>: Sampler minification value</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetMinification(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's minification value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSamplerGetWrapS'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSamplerGetWrapS</span>
+    <span class='normal'>: Sampler wrap S value</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetWrapS(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's wrap S value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsSamplerGetWrapT'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsSamplerGetWrapT</span>
+    <span class='normal'>: Sampler wrap T value</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetWrapT(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Get the sampler's wrap T value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_object_types.jd b/docs/html/guide/topics/renderscript/reference/rs_object_types.jd
new file mode 100644
index 0000000..f342896
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_object_types.jd
@@ -0,0 +1,336 @@
+page.title=RenderScript Object Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The types below are used to manipulate RenderScript objects like allocations, samplers,
+elements, and scripts.  Most of these object are created using the Java RenderScript APIs.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to an allocation
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Enum for selecting cube map faces
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Bitfield to specify how an allocation is used
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Element data kind
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Element basic data type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to an element
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Sampler
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Sampler wrap T value
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Script
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Handle to a Type
+    </td>
+  </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_allocation'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_allocation</span>
+    <span class='normal'>: Handle to an allocation</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> An opaque handle to a RenderScript allocation.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Allocation.html">android.renderscript.Allocation</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_allocation_cubemap_face'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_allocation_cubemap_face</span>
+    <span class='normal'>: Enum for selecting cube map faces</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0</th><td></td></tr>
+    <tr><th>RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1</th><td></td></tr>
+    <tr><th>RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2</th><td></td></tr>
+    <tr><th>RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3</th><td></td></tr>
+    <tr><th>RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4</th><td></td></tr>
+    <tr><th>RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5</th><td></td></tr>
+  </tbody></table><br/>
+<p> An enum used to specify one the six faces of a cubemap.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_allocation_usage_type'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_allocation_usage_type</span>
+    <span class='normal'>: Bitfield to specify how an allocation is used</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_ALLOCATION_USAGE_SCRIPT = 0x0001</th><td>Allocation is bound to and accessed by scripts.</td></tr>
+    <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002</th><td>Deprecated.</td></tr>
+    <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004</th><td>Deprecated.</td></tr>
+    <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008</th><td>Deprecated.</td></tr>
+    <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010</th><td>Deprecated.</td></tr>
+    <tr><th>RS_ALLOCATION_USAGE_IO_INPUT = 0x0020</th><td>Allocation is used as a Surface consumer.</td></tr>
+    <tr><th>RS_ALLOCATION_USAGE_IO_OUTPUT = 0x0040</th><td>Allocation is used as a Surface producer.</td></tr>
+    <tr><th>RS_ALLOCATION_USAGE_SHARED = 0x0080</th><td>Allocation's backing store is shared with another object (usually a Bitmap).  Copying to or from the original source Bitmap will cause a synchronization rather than a full copy.</td></tr>
+  </tbody></table><br/>
+<p> These values are ORed together to specify which usages or memory spaces are
+relevant to an allocation or an operation on an allocation.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_data_kind'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_data_kind</span>
+    <span class='normal'>: Element data kind</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_KIND_USER         = 0</th><td>No special interpretation.</td></tr>
+    <tr><th>RS_KIND_PIXEL_L      = 7</th><td>Luminance.</td></tr>
+    <tr><th>RS_KIND_PIXEL_A      = 8</th><td>Alpha.</td></tr>
+    <tr><th>RS_KIND_PIXEL_LA     = 9</th><td>Luminance and Alpha.</td></tr>
+    <tr><th>RS_KIND_PIXEL_RGB    = 10</th><td>Red, Green, Blue.</td></tr>
+    <tr><th>RS_KIND_PIXEL_RGBA   = 11</th><td>Red, Green, Blue, and Alpha.</td></tr>
+    <tr><th>RS_KIND_PIXEL_DEPTH  = 12</th><td>Depth for a depth texture.</td></tr>
+    <tr><th>RS_KIND_PIXEL_YUV    = 13</th><td>Luminance and chrominance.</td></tr>
+    <tr><th>RS_KIND_INVALID      = 100</th><td></td></tr>
+  </tbody></table><br/>
+<p> This enumeration is primarly useful for graphical data.  It provides additional information to
+help interpret the rs_data_type.
+</p>
+
+<p> RS_KIND_USER indicates no special interpretation is expected.
+</p>
+
+<p> The RS_KIND_PIXEL_* values are used in conjunction with the standard data types for representing
+texture formats.
+</p>
+
+<p> See the <a href='http://developer.android.com/reference/android/renderscript/Element.html#createPixel(android.renderscript.RenderScript,%20android.renderscript.Element.DataType, android.renderscript.Element.DataKind)'>Element.createPixel()</a> method.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_data_type'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_data_type</span>
+    <span class='normal'>: Element basic data type</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_TYPE_NONE = 0</th><td>Element is a complex type, i.e. a struct.</td></tr>
+    <tr><th>RS_TYPE_FLOAT_32 = 2</th><td>A 32 bit float point value.</td></tr>
+    <tr><th>RS_TYPE_FLOAT_64 = 3</th><td>A 64 bit floating point value.</td></tr>
+    <tr><th>RS_TYPE_SIGNED_8 = 4</th><td>An 8 bit signed integer.</td></tr>
+    <tr><th>RS_TYPE_SIGNED_16 = 5</th><td>A 16 bit signed integer.</td></tr>
+    <tr><th>RS_TYPE_SIGNED_32 = 6</th><td>A 32 bit signed integer.</td></tr>
+    <tr><th>RS_TYPE_SIGNED_64 = 7</th><td>A 64 bit signed integer.</td></tr>
+    <tr><th>RS_TYPE_UNSIGNED_8 = 8</th><td>An 8 bit unsigned integer.</td></tr>
+    <tr><th>RS_TYPE_UNSIGNED_16 = 9</th><td>A 16 bit unsigned integer.</td></tr>
+    <tr><th>RS_TYPE_UNSIGNED_32 = 10</th><td>A 32 bit unsigned integer.</td></tr>
+    <tr><th>RS_TYPE_UNSIGNED_64 = 11</th><td>A 64 bit unsigned integer.</td></tr>
+    <tr><th>RS_TYPE_BOOLEAN = 12</th><td>0 or 1 (false or true) stored in an 8 bit container.</td></tr>
+    <tr><th>RS_TYPE_UNSIGNED_5_6_5 = 13</th><td>A 16 bit unsigned integer packing graphical data in 5, 6, and 5 bit sections.</td></tr>
+    <tr><th>RS_TYPE_UNSIGNED_5_5_5_1 = 14</th><td>A 16 bit unsigned integer packing graphical data in 5, 5, 5, and 1 bit sections.</td></tr>
+    <tr><th>RS_TYPE_UNSIGNED_4_4_4_4 = 15</th><td>A 16 bit unsigned integer packing graphical data in 4, 4, 4, and 4 bit sections.</td></tr>
+    <tr><th>RS_TYPE_MATRIX_4X4 = 16</th><td>A 4x4 matrix of 32 bit floats, aligned on a 32 bit boundary.</td></tr>
+    <tr><th>RS_TYPE_MATRIX_3X3 = 17</th><td>A 3x3 matrix of 32 bit floats, aligned on a 32 bit boundary.</td></tr>
+    <tr><th>RS_TYPE_MATRIX_2X2 = 18</th><td>A 2x2 matrix of 32 bit floats, aligned on a 32 bit boundary.</td></tr>
+    <tr><th>RS_TYPE_ELEMENT = 1000</th><td>A handle to an Element.</td></tr>
+    <tr><th>RS_TYPE_TYPE = 1001</th><td>A handle to a Type.</td></tr>
+    <tr><th>RS_TYPE_ALLOCATION = 1002</th><td>A handle to an Allocation.</td></tr>
+    <tr><th>RS_TYPE_SAMPLER = 1003</th><td>A handle to a Sampler.</td></tr>
+    <tr><th>RS_TYPE_SCRIPT = 1004</th><td>A handle to a Script.</td></tr>
+    <tr><th>RS_TYPE_MESH = 1005</th><td>Deprecated.</td></tr>
+    <tr><th>RS_TYPE_PROGRAM_FRAGMENT = 1006</th><td>Deprecated.</td></tr>
+    <tr><th>RS_TYPE_PROGRAM_VERTEX = 1007</th><td>Deprecated.</td></tr>
+    <tr><th>RS_TYPE_PROGRAM_RASTER = 1008</th><td>Deprecated.</td></tr>
+    <tr><th>RS_TYPE_PROGRAM_STORE = 1009</th><td>Deprecated.</td></tr>
+    <tr><th>RS_TYPE_FONT = 1010</th><td>Deprecated.</td></tr>
+    <tr><th>RS_TYPE_INVALID = 10000</th><td></td></tr>
+  </tbody></table><br/>
+<p> rs_data_type is used to encode the type information of a basic element.
+</p>
+
+<p> RS_TYPE_UNSIGNED_5_6_5, RS_TYPE_UNSIGNED_5_5_5_1, RS_TYPE_UNSIGNED_4_4_4_4 are for packed
+graphical data formats and represent vectors with per vector member sizes which are treated
+as a single unit for packing and alignment purposes.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_element'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_element</span>
+    <span class='normal'>: Handle to an element</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> An opaque handle to a RenderScript element.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Element.html">android.renderscript.Element</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_sampler'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_sampler</span>
+    <span class='normal'>: Handle to a Sampler</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> An opaque handle to a RenderScript sampler object.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Sampler.html">android.renderscript.Sampler</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_sampler_value'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_sampler_value</span>
+    <span class='normal'>: Sampler wrap T value</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>An enum with the following values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>RS_SAMPLER_NEAREST = 0</th><td></td></tr>
+    <tr><th>RS_SAMPLER_LINEAR = 1</th><td></td></tr>
+    <tr><th>RS_SAMPLER_LINEAR_MIP_LINEAR = 2</th><td></td></tr>
+    <tr><th>RS_SAMPLER_WRAP = 3</th><td></td></tr>
+    <tr><th>RS_SAMPLER_CLAMP = 4</th><td></td></tr>
+    <tr><th>RS_SAMPLER_LINEAR_MIP_NEAREST = 5</th><td></td></tr>
+    <tr><th>RS_SAMPLER_MIRRORED_REPEAT = 6</th><td></td></tr>
+    <tr><th>RS_SAMPLER_INVALID = 100</th><td></td></tr>
+  </tbody></table><br/>
+  </div>
+</div>
+
+<a name='android_rs:rs_script'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_script</span>
+    <span class='normal'>: Handle to a Script</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> An opaque handle to a RenderScript script object.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/ScriptC.html">android.renderscript.ScriptC</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_type'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_type</span>
+    <span class='normal'>: Handle to a Type</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> An opaque handle to a RenderScript type.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Type.html">android.renderscript.Type</a>.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_quaternion.jd b/docs/html/guide/topics/renderscript/reference/rs_quaternion.jd
new file mode 100644
index 0000000..020f1ad
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_quaternion.jd
@@ -0,0 +1,387 @@
+page.title=RenderScript Quaternion Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The following functions manipulate quaternions.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionAdd'>rsQuaternionAdd</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Add two quaternions
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionConjugate'>rsQuaternionConjugate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Conjugate a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionDot'>rsQuaternionDot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Dot product of two quaternions
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionGetMatrixUnit'>rsQuaternionGetMatrixUnit</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Get a rotation matrix from a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotate'>rsQuaternionLoadRotate</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a rotation quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotateUnit'>rsQuaternionLoadRotateUnit</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Quaternion that represents a rotation about an arbitrary unit vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionMultiply'>rsQuaternionMultiply</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Multiply a quaternion by a scalar or another quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionNormalize'>rsQuaternionNormalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Normalize a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionSet'>rsQuaternionSet</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Create a quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_quaternion.html#android_rs:rsQuaternionSlerp'>rsQuaternionSlerp</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Spherical linear interpolation between two quaternions
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsQuaternionAdd'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionAdd</span>
+    <span class='normal'>: Add two quaternions</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionAdd(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Destination quaternion to add to.</td></tr>
+    <tr><th>rhs</th><td>Quaternion to add.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Adds two quaternions, i.e. <code>*q += *rhs;</code>
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionConjugate'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionConjugate</span>
+    <span class='normal'>: Conjugate a quaternion</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionConjugate(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Quaternion to modify.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Conjugates the quaternion.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionDot'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionDot</span>
+    <span class='normal'>: Dot product of two quaternions</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rsQuaternionDot(const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q0, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q1);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q0</th><td>First quaternion.</td></tr>
+    <tr><th>q1</th><td>Second quaternion.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the dot product of two quaternions.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionGetMatrixUnit'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionGetMatrixUnit</span>
+    <span class='normal'>: Get a rotation matrix from a quaternion</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionGetMatrixUnit(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>m</th><td>Resulting matrix.</td></tr>
+    <tr><th>q</th><td>Normalized quaternion.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes a rotation matrix from the normalized quaternion.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionLoadRotate'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionLoadRotate</span>
+    <span class='normal'>: Create a rotation quaternion</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionLoadRotate(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float rot, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Destination quaternion.</td></tr>
+    <tr><th>rot</th><td>Angle to rotate by.</td></tr>
+    <tr><th>x</th><td>X component of a vector.</td></tr>
+    <tr><th>y</th><td>Y component of a vector.</td></tr>
+    <tr><th>z</th><td>Z component of a vector.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Loads a quaternion that represents a rotation about an arbitrary vector
+(doesn't have to be unit)
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionLoadRotateUnit'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionLoadRotateUnit</span>
+    <span class='normal'>: Quaternion that represents a rotation about an arbitrary unit vector</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionLoadRotateUnit(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float rot, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Destination quaternion.</td></tr>
+    <tr><th>rot</th><td>Angle to rotate by, in radians.</td></tr>
+    <tr><th>x</th><td>X component of the vector.</td></tr>
+    <tr><th>y</th><td>Y component of the vector.</td></tr>
+    <tr><th>z</th><td>Z component of the vector.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Loads a quaternion that represents a rotation about an arbitrary unit vector.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionMultiply'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionMultiply</span>
+    <span class='normal'>: Multiply a quaternion by a scalar or another quaternion</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionMultiply(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsQuaternionMultiply(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float scalar);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Destination quaternion.</td></tr>
+    <tr><th>scalar</th><td>Scalar to multiply the quaternion by.</td></tr>
+    <tr><th>rhs</th><td>Quaternion to multiply the destination quaternion by.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Multiplies a quaternion by a scalar or by another quaternion, e.g
+<code>*q = *q * scalar;</code> or <code>*q = *q * *rhs;</code>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionNormalize'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionNormalize</span>
+    <span class='normal'>: Normalize a quaternion</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionNormalize(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Quaternion to normalize.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Normalizes the quaternion.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionSet'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionSet</span>
+    <span class='normal'>: Create a quaternion</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionSet(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* rhs);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>void rsQuaternionSet(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float w, float x, float y, float z);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Destination quaternion.</td></tr>
+    <tr><th>w</th><td>W component.</td></tr>
+    <tr><th>x</th><td>X component.</td></tr>
+    <tr><th>y</th><td>Y component.</td></tr>
+    <tr><th>z</th><td>Z component.</td></tr>
+    <tr><th>rhs</th><td>Source quaternion.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Creates a quaternion from its four components or from another quaternion.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsQuaternionSlerp'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsQuaternionSlerp</span>
+    <span class='normal'>: Spherical linear interpolation between two quaternions</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>void rsQuaternionSlerp(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q0, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q1, float t);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>q</th><td>Result quaternion from the interpolation.</td></tr>
+    <tr><th>q0</th><td>First input quaternion.</td></tr>
+    <tr><th>q1</th><td>Second input quaternion.</td></tr>
+    <tr><th>t</th><td>How much to interpolate by.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Performs spherical linear interpolation between two quaternions.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_time.jd b/docs/html/guide/topics/renderscript/reference/rs_time.jd
new file mode 100644
index 0000000..27044a3
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_time.jd
@@ -0,0 +1,269 @@
+page.title=RenderScript Time Functions and Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below can be used to tell the current clock time and the current
+system up time.  It is not recommended to call these functions inside of a kernel.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Seconds since January 1, 1970
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Date and time structure
+    </td>
+  </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsGetDt'>rsGetDt</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Elapsed time since last call
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsLocaltime'>rsLocaltime</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Convert to local time
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsTime'>rsTime</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Seconds since January 1, 1970
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsUptimeMillis'>rsUptimeMillis</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      System uptime in milliseconds
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_time.html#android_rs:rsUptimeNanos'>rsUptimeNanos</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      System uptime in nanoseconds
+    </td>
+  </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_time_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_time_t</span>
+    <span class='normal'>: Seconds since January 1, 1970</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+<p>A typedef of: long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 64 bits. 
+</p>
+<p> Calendar time interpreted as seconds elapsed since the Epoch (00:00:00 on
+January 1, 1970, Coordinated Universal Time (UTC)).
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_tm'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_tm</span>
+    <span class='normal'>: Date and time structure</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A structure with the following fields:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>int tm_sec</th><td>Seconds after the minute. This ranges from 0 to 59, but possibly up to 60 for leap seconds.</td></tr>
+    <tr><th>int tm_min</th><td>Minutes after the hour. This ranges from 0 to 59.</td></tr>
+    <tr><th>int tm_hour</th><td>Hours past midnight. This ranges from 0 to 23.</td></tr>
+    <tr><th>int tm_mday</th><td>Day of the month. This ranges from 1 to 31.</td></tr>
+    <tr><th>int tm_mon</th><td>Months since January. This ranges from 0 to 11.</td></tr>
+    <tr><th>int tm_year</th><td>Years since 1900.</td></tr>
+    <tr><th>int tm_wday</th><td>Days since Sunday. This ranges from 0 to 6.</td></tr>
+    <tr><th>int tm_yday</th><td>Days since January 1. This ranges from 0 to 365.</td></tr>
+    <tr><th>int tm_isdst</th><td>Flag to indicate whether daylight saving time is in effect. The value is positive if it is in effect, zero if it is not, and negative if the information is not available.</td></tr>
+  </tbody></table><br/>
+<p> Data structure for broken-down time components.
+</p>
+  </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:rsGetDt'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsGetDt</span>
+    <span class='normal'>: Elapsed time since last call</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float rsGetDt();
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Time in seconds.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the time in seconds since this function was last called in this script.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsLocaltime'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsLocaltime</span>
+    <span class='normal'>: Convert to local time</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>* rsLocaltime(<a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>* local, const <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>* timer);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>local</th><td>Pointer to time structure where the local time will be stored.</td></tr>
+    <tr><th>timer</th><td>Input time as a number of seconds since January 1, 1970.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Pointer to the output local time, i.e. the same value as the parameter local.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Converts the time specified by timer into a <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a> structure that provides year, month,
+hour, etc.  This value is stored at *local.
+</p>
+
+<p> This functions returns the same pointer that is passed as first argument.  If the
+local parameter is NULL, this function does nothing and returns NULL.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsTime'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsTime</span>
+    <span class='normal'>: Seconds since January 1, 1970</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a> rsTime(<a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>* timer);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Parameters</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><th>timer</th><td>Location to also store the returned calendar time.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Seconds since the Epoch, -1 if there's an error.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the number of seconds since the Epoch (00:00:00 UTC, January 1, 1970).
+</p>
+
+<p> If timer is non-NULL, the result is also stored in the memory pointed to by
+this variable.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsUptimeMillis'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsUptimeMillis</span>
+    <span class='normal'>: System uptime in milliseconds</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int64_t'>int64_t</a> rsUptimeMillis();
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Uptime in milliseconds.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the current system clock (uptime) in milliseconds.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rsUptimeNanos'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rsUptimeNanos</span>
+    <span class='normal'>: System uptime in nanoseconds</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:int64_t'>int64_t</a> rsUptimeNanos();
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata'>    <h5 class='jd-tagtitle'>Returns</h5>
+    <table class='jd-tagtable'><tbody>
+    <tr><td>Uptime in nanoseconds.</td></tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the current system clock (uptime) in nanoseconds.
+</p>
+
+<p> The granularity of the values return by this call may be much larger than a nanosecond.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_value_types.jd b/docs/html/guide/topics/renderscript/reference/rs_value_types.jd
new file mode 100644
index 0000000..a7caf10
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_value_types.jd
@@ -0,0 +1,1172 @@
+page.title=RenderScript Numerical Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> <h5>Scalars:</h5>
+</p>
+
+<p> RenderScript supports the following scalar numerical types:
+<table>
+<tr><td>                 </td>  <td>8 bits        </td>   <td>16 bits         </td>   <td>32 bits       </td>   <td>64 bits</td></tr>
+<tr><td>Integer:         </td>  <td>char, <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>  </td>   <td>short, <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>  </td>   <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>       </td>   <td>long, long long, <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a></td></tr>
+<tr><td>Unsigned integer:</td>  <td>uchar, <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a></td>   <td>ushort, <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a></td>   <td>uint, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a></td>   <td>ulong, <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a></td></tr>
+<tr><td>Floating point:  </td>  <td>              </td>   <td>                </td>   <td>float         </td>   <td>double</td></tr>
+</table>
+</p>
+
+<p> <h5>Vectors:</h5>
+</p>
+
+<p> RenderScript supports fixed size vectors of length 2, 3, and 4.
+Vectors are declared using the common type name followed by a 2, 3, or 4.
+E.g. <a href='rs_value_types.html#android_rs:float4'>float4</a>, <a href='rs_value_types.html#android_rs:int3'>int3</a>, <a href='rs_value_types.html#android_rs:double2'>double2</a>, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>.
+</p>
+
+<p> To create vector literals, use the vector type followed by the values enclosed
+between parentheses, e.g. <code>(float3)(1.0f, 2.0f, 3.0f)</code>.
+</p>
+
+<p> Entries of a vector can be accessed using different naming styles.
+</p>
+
+<p> Single entries can be accessed by following the variable name with a dot and:<ul>
+<li>The letters x, y, z, and w,</li>
+<li>The letters r, g, b, and a,</li>
+<li>The letter s or S, followed by a zero based index.</li></ul>
+</p>
+
+<p> For example, with <code>int4 myVar;</code> the following are equivalent:<code><br/>
+  myVar.x == myVar.r == myVar.s0 == myVar.S0<br/>
+  myVar.y == myVar.g == myVar.s1 == myVar.S1<br/>
+  myVar.z == myVar.b == myVar.s2 == myVar.S2<br/>
+  myVar.w == myVar.a == myVar.s3 == myVar.S3</code>
+</p>
+
+<p> Multiple entries of a vector can be accessed at once by using an identifier that is
+the concatenation of multiple letters or indices.  The resulting vector has a size
+equal to the number of entries named.
+</p>
+
+<p> With the example above, the middle two entries can be accessed using
+<code>myVar.yz</code>, <code>myVar.gb</code>, <code>myVar.s12</code>, and <code>myVar.S12</code>.
+</p>
+
+<p> The entries don't have to be contiguous or in increasing order.  Entries can even be
+repeated, as long as we're not trying to assign to it.  You also can't mix the naming
+styles.
+</p>
+
+<p> Here are examples of what can or can't be done:<code><br/>
+float4 v4;<br/>
+float3 v3;<br/>
+float2 v2;<br/>
+v2 = v4.xx; // Valid<br/>
+v3 = v4.zxw; // Valid<br/>
+v3 = v4.bba; // Valid<br/>
+v3 = v4.s032; // Valid<br/>
+v3.s120 = v4.S233; // Valid<br/>
+v4.yz = v3.rg; // Valid<br/>
+v4.yzx = v3.rg; // Invalid: mismatched sizes<br/>
+v4.yzz = v3; // Invalid: z appears twice in an assignment<br/>
+v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...<br/>
+v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3<br/>
+</code>
+</p>
+
+<p> <h5>Matrices and Quaternions:</h5>
+</p>
+
+<p> RenderScript supports fixed size square matrices of floats of size 2x2, 3x3, and 4x4.
+The types are named <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>, <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>, and <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>.  See
+<a href='rs_matrix.html'>Matrix Functions</a> for the list of operations.
+</p>
+
+<p> Quaternions are also supported via <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>.  See <a href='rs_quaternion.html'>Quaterion Functions</a> for the list
+of operations.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Types</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char2'>char2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char3'>char3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:char4'>char4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 8 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double2'>double2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double3'>double3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:double4'>double4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float2'>float2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float3'>float3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:float4'>float4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int2'>int2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int3'>int3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int4'>int4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit signed integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long2'>long2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long3'>long3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:long4'>long4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      2x2 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      3x3 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      4x4 matrix of 32 bit floats
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Quaternion
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short2'>short2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short3'>short3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:short4'>short4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 16 bit signed integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:size_t'>size_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Unsigned size type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ssize_t'>ssize_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Signed size type
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar'>uchar</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 8 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint'>uint</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint2'>uint2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint3'>uint3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      32 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint4'>uint4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 32 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      8 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong'>ulong</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      64 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 64 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort'>ushort</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      16 bit unsigned integer
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Two 16 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Three 16 bit unsigned integers
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Four 16 bit unsigned integers
+    </td>
+  </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:char2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>char2</span>
+    <span class='normal'>: Two 8 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: char __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two chars.  These two chars are packed into a single 16 bit field
+with a 16 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:char3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>char3</span>
+    <span class='normal'>: Three 8 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: char __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three chars.  These three chars are packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:char4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>char4</span>
+    <span class='normal'>: Four 8 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: char __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four chars.  These four chars are packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:double2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>double2</span>
+    <span class='normal'>: Two 64 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: double __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two doubles.  These two double fields packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:double3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>double3</span>
+    <span class='normal'>: Three 64 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: double __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three doubles.  These three double fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:double4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>double4</span>
+    <span class='normal'>: Four 64 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: double __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four doubles.  These four double fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:float2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>float2</span>
+    <span class='normal'>: Two 32 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: float __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two floats.  These two floats are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+
+<p> A vector of two floats.  These two floats are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:float3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>float3</span>
+    <span class='normal'>: Three 32 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: float __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three floats.  These three floats are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:float4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>float4</span>
+    <span class='normal'>: Four 32 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: float __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four floats type.  These four floats are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:int16_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>int16_t</span>
+    <span class='normal'>: 16 bit signed integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A 16 bit signed integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:int2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>int2</span>
+    <span class='normal'>: Two 32 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: int __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two ints.  These two ints are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:int3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>int3</span>
+    <span class='normal'>: Three 32 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: int __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three ints.  These three ints are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:int32_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>int32_t</span>
+    <span class='normal'>: 32 bit signed integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A 32 bit signed integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:int4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>int4</span>
+    <span class='normal'>: Four 32 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: int __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four ints.  These two fours are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:int64_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>int64_t</span>
+    <span class='normal'>: 64 bit signed integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: long long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p>A typedef of: long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p> A 64 bit signed integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:int8_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>int8_t</span>
+    <span class='normal'>: 8 bit signed integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> 8 bit signed integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:long2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>long2</span>
+    <span class='normal'>: Two 64 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: long __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two longs.  These two longs are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:long3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>long3</span>
+    <span class='normal'>: Three 64 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: long __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three longs.  These three longs are packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:long4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>long4</span>
+    <span class='normal'>: Four 64 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: long __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four longs.  These four longs are packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_matrix2x2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_matrix2x2</span>
+    <span class='normal'>: 2x2 matrix of 32 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A structure with the following fields:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>float m[4]</th><td></td></tr>
+  </tbody></table><br/>
+<p> A square 2x2 matrix of floats.  The entries are stored in the array at the
+location [row*2 + col].
+</p>
+
+<p> See <a href='rs_matrix.html'>Matrix Functions</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_matrix3x3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_matrix3x3</span>
+    <span class='normal'>: 3x3 matrix of 32 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A structure with the following fields:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>float m[9]</th><td></td></tr>
+  </tbody></table><br/>
+<p> A square 3x3 matrix of floats.  The entries are stored in the array at the
+location [row*3 + col].
+</p>
+
+<p> See <a href='rs_matrix.html'>Matrix Functions</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_matrix4x4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_matrix4x4</span>
+    <span class='normal'>: 4x4 matrix of 32 bit floats</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A structure with the following fields:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+  <table class='jd-tagtable'><tbody>
+    <tr><th>float m[16]</th><td></td></tr>
+  </tbody></table><br/>
+<p> A square 4x4 matrix of floats.  The entries are stored in the array at the
+location [row*4 + col].
+</p>
+
+<p> See <a href='rs_matrix.html'>Matrix Functions</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:rs_quaternion'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>rs_quaternion</span>
+    <span class='normal'>: Quaternion</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: float4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A square 4x4 matrix of floats that represents a quaternion.
+</p>
+
+<p> See <a href='rs_quaternion.html'>Quaternion Functions</a>.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:short2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>short2</span>
+    <span class='normal'>: Two 16 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: short __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two shorts.  These two shorts are packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:short3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>short3</span>
+    <span class='normal'>: Three 16 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: short __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three shorts.  These three short fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:short4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>short4</span>
+    <span class='normal'>: Four 16 bit signed integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: short __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four shorts.  These four short fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:size_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>size_t</span>
+    <span class='normal'>: Unsigned size type</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint64_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 64 bits. 
+</p>
+<p>A typedef of: uint32_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+<p> Unsigned size type.  The number of bits depend on the compilation flags.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ssize_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ssize_t</span>
+    <span class='normal'>: Signed size type</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: int64_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 64 bits. 
+</p>
+<p>A typedef of: int32_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    When compiling for 32 bits. 
+</p>
+<p> Signed size type.  The number of bits depend on the compilation flags.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uchar'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uchar</span>
+    <span class='normal'>: 8 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint8_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> 8 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uchar2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uchar2</span>
+    <span class='normal'>: Two 8 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uchar __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two uchars.  These two uchar fields packed into a single 16 bit field
+with a 16 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uchar3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uchar3</span>
+    <span class='normal'>: Three 8 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uchar __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three uchars.  These three uchar fields packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uchar4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uchar4</span>
+    <span class='normal'>: Four 8 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uchar __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four uchars.  These four uchar fields packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint</span>
+    <span class='normal'>: 32 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint32_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A 32 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint16_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint16_t</span>
+    <span class='normal'>: 16 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: unsigned short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A 16 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint2</span>
+    <span class='normal'>: Two 32 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two uints.  These two uints are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint3</span>
+    <span class='normal'>: Three 32 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three uints.  These three uints are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint32_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint32_t</span>
+    <span class='normal'>: 32 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: unsigned int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A 32 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint4</span>
+    <span class='normal'>: Four 32 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four uints.  These four uints are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint64_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint64_t</span>
+    <span class='normal'>: 64 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: unsigned long long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p>A typedef of: unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p> A 64 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:uint8_t'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>uint8_t</span>
+    <span class='normal'>: 8 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> 8 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ulong'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ulong</span>
+    <span class='normal'>: 64 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint64_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A 64 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ulong2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ulong2</span>
+    <span class='normal'>: Two 64 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: ulong __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two ulongs.  These two ulongs are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ulong3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ulong3</span>
+    <span class='normal'>: Three 64 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: ulong __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three ulongs.  These three ulong fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ulong4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ulong4</span>
+    <span class='normal'>: Four 64 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: ulong __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four ulongs.  These four ulong fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ushort'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ushort</span>
+    <span class='normal'>: 16 bit unsigned integer</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: uint16_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A 16 bit unsigned integer type.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ushort2'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ushort2</span>
+    <span class='normal'>: Two 16 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: ushort __attribute__((ext_vector_type(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of two ushorts.  These two ushort fields packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ushort3'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ushort3</span>
+    <span class='normal'>: Three 16 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: ushort __attribute__((ext_vector_type(3)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of three ushorts.  These three ushort fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:ushort4'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>ushort4</span>
+    <span class='normal'>: Four 16 bit unsigned integers</span>
+  </h4>
+  <div class='jd-details-descr'>
+<p>A typedef of: ushort __attribute__((ext_vector_type(4)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p> A vector of four ushorts.  These four ushort fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_vector_math.jd b/docs/html/guide/topics/renderscript/reference/rs_vector_math.jd
new file mode 100644
index 0000000..cb90e9d
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_vector_math.jd
@@ -0,0 +1,574 @@
+page.title=RenderScript Vector Math Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> These functions interpret the input arguments as representation of vectors in
+n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full.  See <a href='rs_math.html'>Mathematical Constants and Functions</a> for details.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions.  Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision.  Additionally,
+  subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+  infinity input may not be handled correctly.</li>
+<li>fast_: May perform internal computations using 16 bit floats.  Additionally, subnormal
+  values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+  <tr><th colspan='2'>Functions</th></tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:cross'>cross</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Cross product of two vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:distance'>distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:dot'>dot</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Dot product of two vectors
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate normalized vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:length'>length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate distance between two points
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximate length of a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Approximately normalize a vector
+    </td>
+  </tr>
+  <tr class='alt-color api apilevel-1'>
+    <td class='jd-linkcol'>
+      <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>
+    </td>
+    <td class='jd-descrcol' width='100%'>
+      Normalize a vector
+    </td>
+  </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:cross'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>cross</span>
+    <span class='normal'>: Cross product of two vectors</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cross(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cross(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the cross product of two vectors.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:distance'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>distance</span>
+    <span class='normal'>: Distance between two points</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float distance(float left_vector, float right_vector);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float distance(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float distance(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float distance(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the distance between two points.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>(), <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:dot'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>dot</span>
+    <span class='normal'>: Dot product of two vectors</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float dot(float left_vector, float right_vector);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float dot(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float dot(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float dot(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the dot product of two vectors.
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fast_distance'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fast_distance</span>
+    <span class='normal'>: Approximate distance between two points</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fast_distance(float left_vector, float right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float fast_distance(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float fast_distance(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float fast_distance(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate distance between two points.
+</p>
+
+<p> The precision is what would be expected from doing the computation using 16 bit floating
+point values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:distance'>distance</a>(), <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fast_length'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fast_length</span>
+    <span class='normal'>: Approximate length of a vector</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fast_length(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float fast_length(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float fast_length(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float fast_length(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate length of a vector.
+</p>
+
+<p> The precision is what would be expected from doing the computation using 16 bit floating
+point values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:length'>length</a>(), <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:fast_normalize'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>fast_normalize</span>
+    <span class='normal'>: Approximate normalized vector</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float fast_normalize(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fast_normalize(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fast_normalize(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fast_normalize(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Approximately normalizes a vector.
+</p>
+
+<p> For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
+positive values.
+</p>
+
+<p> The precision is what would be expected from doing the computation using 16 bit floating
+point values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>(), <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:length'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>length</span>
+    <span class='normal'>: Length of a vector</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float length(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float length(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float length(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td>float length(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the length of a vector.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>(), <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_distance'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_distance</span>
+    <span class='normal'>: Approximate distance between two points</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_distance(float left_vector, float right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float native_distance(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float native_distance(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float native_distance(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate distance between two points.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:distance'>distance</a>(), <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_length'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_length</span>
+    <span class='normal'>: Approximate length of a vector</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_length(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float native_length(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float native_length(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td>float native_length(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the approximate length of a vector.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:length'>length</a>(), <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:native_normalize'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>native_normalize</span>
+    <span class='normal'>: Approximately normalize a vector</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float native_normalize(float v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_normalize(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_normalize(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_normalize(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>    Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Approximately normalizes a vector.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>(), <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>().
+</p>
+  </div>
+</div>
+
+<a name='android_rs:normalize'></a>
+<div class='jd-details'>
+  <h4 class='jd-details-title'>
+    <span class='sympad'>normalize</span>
+    <span class='normal'>: Normalize a vector</span>
+  </h4>
+  <div class='jd-details-descr'>
+    <table class='jd-tagtable'><tbody>
+      <tr>
+        <td>float normalize(float v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float2'>float2</a> normalize(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float3'>float3</a> normalize(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+        <td>        </td>
+      </tr>
+      <tr>
+        <td><a href='rs_value_types.html#android_rs:float4'>float4</a> normalize(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+        <td>        </td>
+      </tr>
+    </tbody></table>
+  </div>
+  <div class='jd-tagdata jd-tagdescr'>
+<p> Normalize a vector.
+</p>
+
+<p> For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
+positive values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>(), <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>().
+</p>
+  </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index fc79970..b06da56 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -129,7 +129,7 @@
     <td><code>mipmap/</code></td>
     <td>Drawable files for different launcher icon densities. For more information on managing
     launcher icons with {@code mipmap/} folders, see
-    <a href="{@docRoot}tools/project/index.html#mipmap">Managing Projects Overview</a>.</td>
+    <a href="{@docRoot}tools/projects/index.html#mipmap">Managing Projects Overview</a>.</td>
   </tr>
 
   <tr>
diff --git a/docs/html/images/cards/adwords_2x.jpg b/docs/html/images/cards/adwords_2x.jpg
new file mode 100644
index 0000000..cd83b26
--- /dev/null
+++ b/docs/html/images/cards/adwords_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/analytics-mobile_2x.jpg b/docs/html/images/cards/analytics-mobile_2x.jpg
new file mode 100644
index 0000000..e668991
--- /dev/null
+++ b/docs/html/images/cards/analytics-mobile_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/android-auto_2x.png b/docs/html/images/cards/android-auto_2x.png
new file mode 100644
index 0000000..6acdcb1
--- /dev/null
+++ b/docs/html/images/cards/android-auto_2x.png
Binary files differ
diff --git a/docs/html/images/cards/android-devices_2x.jpg b/docs/html/images/cards/android-devices_2x.jpg
new file mode 100644
index 0000000..cefff15
--- /dev/null
+++ b/docs/html/images/cards/android-devices_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/android-studio_2x.png b/docs/html/images/cards/android-studio_2x.png
new file mode 100644
index 0000000..87f9e70
--- /dev/null
+++ b/docs/html/images/cards/android-studio_2x.png
Binary files differ
diff --git a/docs/html/images/cards/android-tv_2x.png b/docs/html/images/cards/android-tv_2x.png
new file mode 100644
index 0000000..deb41a2
--- /dev/null
+++ b/docs/html/images/cards/android-tv_2x.png
Binary files differ
diff --git a/docs/html/images/cards/android-wear-apps_2x.jpg b/docs/html/images/cards/android-wear-apps_2x.jpg
new file mode 100644
index 0000000..614ef19
--- /dev/null
+++ b/docs/html/images/cards/android-wear-apps_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/android-wear-materials_2x.jpg b/docs/html/images/cards/android-wear-materials_2x.jpg
new file mode 100644
index 0000000..19a78c3
--- /dev/null
+++ b/docs/html/images/cards/android-wear-materials_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/android-wear_2x.png b/docs/html/images/cards/android-wear_2x.png
new file mode 100644
index 0000000..5d1a796
--- /dev/null
+++ b/docs/html/images/cards/android-wear_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-android-fundamentals_16x9_2x.png b/docs/html/images/cards/card-android-fundamentals_16x9_2x.png
new file mode 100644
index 0000000..64d1fa5
--- /dev/null
+++ b/docs/html/images/cards/card-android-fundamentals_16x9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-android-studio-overview_16x9_2x.jpg b/docs/html/images/cards/card-android-studio-overview_16x9_2x.jpg
new file mode 100644
index 0000000..c0ef659
--- /dev/null
+++ b/docs/html/images/cards/card-android-studio-overview_16x9_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/card-build_16x9_2x.png b/docs/html/images/cards/card-build_16x9_2x.png
new file mode 100644
index 0000000..1fdbf89
--- /dev/null
+++ b/docs/html/images/cards/card-build_16x9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-download_16-9_2x.png b/docs/html/images/cards/card-download_16-9_2x.png
new file mode 100644
index 0000000..06642b4
--- /dev/null
+++ b/docs/html/images/cards/card-download_16-9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-earn_16x9_2x.png b/docs/html/images/cards/card-earn_16x9_2x.png
new file mode 100644
index 0000000..1b96c83
--- /dev/null
+++ b/docs/html/images/cards/card-earn_16x9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-engage_16x9_2x.png b/docs/html/images/cards/card-engage_16x9_2x.png
new file mode 100644
index 0000000..334420b
--- /dev/null
+++ b/docs/html/images/cards/card-engage_16x9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-g-play-services_16x9_2x.jpg b/docs/html/images/cards/card-g-play-services_16x9_2x.jpg
new file mode 100644
index 0000000..a2805a6
--- /dev/null
+++ b/docs/html/images/cards/card-g-play-services_16x9_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/card-key-changes_16-9_2x.png b/docs/html/images/cards/card-key-changes_16-9_2x.png
new file mode 100644
index 0000000..1629b4f
--- /dev/null
+++ b/docs/html/images/cards/card-key-changes_16-9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-material-icons-16x9_2x.jpg b/docs/html/images/cards/card-material-icons-16x9_2x.jpg
new file mode 100644
index 0000000..016932c
--- /dev/null
+++ b/docs/html/images/cards/card-material-icons-16x9_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/card-new_16x9_2x.png b/docs/html/images/cards/card-new_16x9_2x.png
new file mode 100644
index 0000000..270f4a3
--- /dev/null
+++ b/docs/html/images/cards/card-new_16x9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-preview_16-9_2x.png b/docs/html/images/cards/card-preview_16-9_2x.png
new file mode 100644
index 0000000..dd80f6a
--- /dev/null
+++ b/docs/html/images/cards/card-preview_16-9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-set-up_16-9_2x.png b/docs/html/images/cards/card-set-up_16-9_2x.png
new file mode 100644
index 0000000..0283801
--- /dev/null
+++ b/docs/html/images/cards/card-set-up_16-9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-support_16-9_2x.png b/docs/html/images/cards/card-support_16-9_2x.png
new file mode 100644
index 0000000..08b3290
--- /dev/null
+++ b/docs/html/images/cards/card-support_16-9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-ubiquitous-computing_16x9_2x.png b/docs/html/images/cards/card-ubiquitous-computing_16x9_2x.png
new file mode 100644
index 0000000..5edff62
--- /dev/null
+++ b/docs/html/images/cards/card-ubiquitous-computing_16x9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/card-using-code-templates_16x9_2x.png b/docs/html/images/cards/card-using-code-templates_16x9_2x.png
new file mode 100644
index 0000000..1496306
--- /dev/null
+++ b/docs/html/images/cards/card-using-code-templates_16x9_2x.png
Binary files differ
diff --git a/docs/html/images/cards/cloud-platform_2x.png b/docs/html/images/cards/cloud-platform_2x.png
new file mode 100644
index 0000000..d3c203d
--- /dev/null
+++ b/docs/html/images/cards/cloud-platform_2x.png
Binary files differ
diff --git a/docs/html/images/cards/course-ud825.png b/docs/html/images/cards/course-ud825.png
new file mode 100644
index 0000000..77f98b5
--- /dev/null
+++ b/docs/html/images/cards/course-ud825.png
Binary files differ
diff --git a/docs/html/images/cards/course-ud849.jpg b/docs/html/images/cards/course-ud849.jpg
new file mode 100644
index 0000000..41b7ecf
--- /dev/null
+++ b/docs/html/images/cards/course-ud849.jpg
Binary files differ
diff --git a/docs/html/images/cards/course-ud853.jpg b/docs/html/images/cards/course-ud853.jpg
new file mode 100644
index 0000000..94adfb0
--- /dev/null
+++ b/docs/html/images/cards/course-ud853.jpg
Binary files differ
diff --git a/docs/html/images/cards/design-creative-vision_2x.jpg b/docs/html/images/cards/design-creative-vision_2x.jpg
new file mode 100644
index 0000000..9c7dde3
--- /dev/null
+++ b/docs/html/images/cards/design-creative-vision_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/design-material-for-android_2x.jpg b/docs/html/images/cards/design-material-for-android_2x.jpg
new file mode 100644
index 0000000..e47594a
--- /dev/null
+++ b/docs/html/images/cards/design-material-for-android_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/design-new-in-android_2x.jpg b/docs/html/images/cards/design-new-in-android_2x.jpg
new file mode 100644
index 0000000..3bdd542
--- /dev/null
+++ b/docs/html/images/cards/design-new-in-android_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/design-pure-android_2x.png b/docs/html/images/cards/design-pure-android_2x.png
new file mode 100644
index 0000000..94758f7
--- /dev/null
+++ b/docs/html/images/cards/design-pure-android_2x.png
Binary files differ
diff --git a/docs/html/images/cards/dev-console_2x.jpg b/docs/html/images/cards/dev-console_2x.jpg
new file mode 100644
index 0000000..f2d10eb
--- /dev/null
+++ b/docs/html/images/cards/dev-console_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/google-play_2x.png b/docs/html/images/cards/google-play_2x.png
new file mode 100644
index 0000000..8680639
--- /dev/null
+++ b/docs/html/images/cards/google-play_2x.png
Binary files differ
diff --git a/docs/html/images/cards/google-search_2x.png b/docs/html/images/cards/google-search_2x.png
new file mode 100644
index 0000000..2564121
--- /dev/null
+++ b/docs/html/images/cards/google-search_2x.png
Binary files differ
diff --git a/docs/html/images/cards/google-sign-in_2x.png b/docs/html/images/cards/google-sign-in_2x.png
new file mode 100644
index 0000000..60078a7
--- /dev/null
+++ b/docs/html/images/cards/google-sign-in_2x.png
Binary files differ
diff --git a/docs/html/images/cards/material-animation_2x.png b/docs/html/images/cards/material-animation_2x.png
new file mode 100644
index 0000000..79315e4
--- /dev/null
+++ b/docs/html/images/cards/material-animation_2x.png
Binary files differ
diff --git a/docs/html/images/cards/material-color-palette_2x.jpg b/docs/html/images/cards/material-color-palette_2x.jpg
new file mode 100644
index 0000000..bae8d07
--- /dev/null
+++ b/docs/html/images/cards/material-color-palette_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/material-components_2x.jpg b/docs/html/images/cards/material-components_2x.jpg
new file mode 100644
index 0000000..7ac1012
--- /dev/null
+++ b/docs/html/images/cards/material-components_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/material-layout-template_2x.jpg b/docs/html/images/cards/material-layout-template_2x.jpg
new file mode 100644
index 0000000..d2fa3c5
--- /dev/null
+++ b/docs/html/images/cards/material-layout-template_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/material-layout_2x.png b/docs/html/images/cards/material-layout_2x.png
new file mode 100644
index 0000000..6c5dca1
--- /dev/null
+++ b/docs/html/images/cards/material-layout_2x.png
Binary files differ
diff --git a/docs/html/images/cards/material-patterns_2x.png b/docs/html/images/cards/material-patterns_2x.png
new file mode 100644
index 0000000..8e8d8aa
--- /dev/null
+++ b/docs/html/images/cards/material-patterns_2x.png
Binary files differ
diff --git a/docs/html/images/cards/material-sticker-sheet_2x.jpg b/docs/html/images/cards/material-sticker-sheet_2x.jpg
new file mode 100644
index 0000000..8e9f3f7c
--- /dev/null
+++ b/docs/html/images/cards/material-sticker-sheet_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/material-style_2x.jpg b/docs/html/images/cards/material-style_2x.jpg
new file mode 100644
index 0000000..38ae540
--- /dev/null
+++ b/docs/html/images/cards/material-style_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/material-typography_2x.jpg b/docs/html/images/cards/material-typography_2x.jpg
new file mode 100644
index 0000000..537db8e
--- /dev/null
+++ b/docs/html/images/cards/material-typography_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/material-usability_2x.png b/docs/html/images/cards/material-usability_2x.png
new file mode 100644
index 0000000..468e1c8
--- /dev/null
+++ b/docs/html/images/cards/material-usability_2x.png
Binary files differ
diff --git a/docs/html/images/cards/material_2x.png b/docs/html/images/cards/material_2x.png
new file mode 100644
index 0000000..e759d9f
--- /dev/null
+++ b/docs/html/images/cards/material_2x.png
Binary files differ
diff --git a/docs/html/images/cards/program-edu_2x.jpg b/docs/html/images/cards/program-edu_2x.jpg
new file mode 100644
index 0000000..4430dfd
--- /dev/null
+++ b/docs/html/images/cards/program-edu_2x.jpg
Binary files differ
diff --git a/docs/html/images/cards/samples-new_2x.png b/docs/html/images/cards/samples-new_2x.png
new file mode 100644
index 0000000..270f4a3
--- /dev/null
+++ b/docs/html/images/cards/samples-new_2x.png
Binary files differ
diff --git a/docs/html/images/develop/hero-android-studio-on-device.png b/docs/html/images/develop/hero-android-studio-on-device.png
new file mode 100644
index 0000000..eac0e1f
--- /dev/null
+++ b/docs/html/images/develop/hero-android-studio-on-device.png
Binary files differ
diff --git a/docs/html/images/distribute/google-play-bg.jpg b/docs/html/images/distribute/google-play-bg.jpg
new file mode 100644
index 0000000..effd422
--- /dev/null
+++ b/docs/html/images/distribute/google-play-bg.jpg
Binary files differ
diff --git a/docs/html/images/distribute/hero-family.jpg b/docs/html/images/distribute/hero-family.jpg
new file mode 100644
index 0000000..6e467a5
--- /dev/null
+++ b/docs/html/images/distribute/hero-family.jpg
Binary files differ
diff --git a/docs/html/images/distribute/hero-g-play-guidebooks_2x.png b/docs/html/images/distribute/hero-g-play-guidebooks_2x.png
new file mode 100644
index 0000000..3dfda18
--- /dev/null
+++ b/docs/html/images/distribute/hero-g-play-guidebooks_2x.png
Binary files differ
diff --git a/docs/html/images/distribute/hero-ginlemon.jpg b/docs/html/images/distribute/hero-ginlemon.jpg
new file mode 100644
index 0000000..11837b3
--- /dev/null
+++ b/docs/html/images/distribute/hero-ginlemon.jpg
Binary files differ
diff --git a/docs/html/images/distribute/hero-haystack.jpg b/docs/html/images/distribute/hero-haystack.jpg
new file mode 100644
index 0000000..36b6d9f
--- /dev/null
+++ b/docs/html/images/distribute/hero-haystack.jpg
Binary files differ
diff --git a/docs/html/images/distribute/hero-jelly-button.jpg b/docs/html/images/distribute/hero-jelly-button.jpg
new file mode 100644
index 0000000..032755b
--- /dev/null
+++ b/docs/html/images/distribute/hero-jelly-button.jpg
Binary files differ
diff --git a/docs/html/images/distribute/hero-outfit7.jpg b/docs/html/images/distribute/hero-outfit7.jpg
new file mode 100644
index 0000000..a013417
--- /dev/null
+++ b/docs/html/images/distribute/hero-outfit7.jpg
Binary files differ
diff --git a/docs/html/images/home/hero-lollipop_2x.png b/docs/html/images/home/hero-lollipop_2x.png
new file mode 100644
index 0000000..6f41e13
--- /dev/null
+++ b/docs/html/images/home/hero-lollipop_2x.png
Binary files differ
diff --git a/docs/html/images/tools/studio-add-icon.png b/docs/html/images/tools/studio-add-icon.png
new file mode 100644
index 0000000..3ff49f6
--- /dev/null
+++ b/docs/html/images/tools/studio-add-icon.png
Binary files differ
diff --git a/docs/html/images/tools/studio-debug-settings-icon.png b/docs/html/images/tools/studio-debug-settings-icon.png
new file mode 100644
index 0000000..ee9c7a1
--- /dev/null
+++ b/docs/html/images/tools/studio-debug-settings-icon.png
Binary files differ
diff --git a/docs/html/images/tools/studio-inspections-config.png b/docs/html/images/tools/studio-inspections-config.png
index e41afa1..15a5a5b 100644
--- a/docs/html/images/tools/studio-inspections-config.png
+++ b/docs/html/images/tools/studio-inspections-config.png
Binary files differ
diff --git a/docs/html/images/tools/studio-memory-monitor.png b/docs/html/images/tools/studio-memory-monitor.png
index 796daf0..58147b7 100644
--- a/docs/html/images/tools/studio-memory-monitor.png
+++ b/docs/html/images/tools/studio-memory-monitor.png
Binary files differ
diff --git a/docs/html/images/tools/studio-memory-monitor2x.png b/docs/html/images/tools/studio-memory-monitor2x.png
new file mode 100644
index 0000000..7c3d6c4
--- /dev/null
+++ b/docs/html/images/tools/studio-memory-monitor2x.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index 2838959..cfbe7b6 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -6,96 +6,53 @@
 
 @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>
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
-
-      <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>The Android 5.0 update adds a variety of new
-            features for your apps, such as notifications on the lock screen, an all-new camera API,
-            OpenGL ES 3.1, the new Material design interface, and much more.</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">Learn More</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 -->
-
-<div class="actions-bar" style="margin-top:20px">
+<div class="actions-bar dac-expand dac-invert">
   <div class="wrap">
     <div class="actions">
-      <div><a href="{@docRoot}sdk/index.html">Get the SDK</a></div>
-      <div><a href="{@docRoot}samples/index.html">Browse Samples</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">Watch Videos</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">Manage Your Apps</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><a href="{@docRoot}distribute/googleplay/developer-console.html">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Manage Your Apps
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
+<section class="dac-section dac-section-light"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    See what’s new or find the 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-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
-
-            <div class="landing-h1" style="margin-top:0px">Build for a Multi-Screen World</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          Android runs on hundreds of millions of handheld devices around the world, <br>
-          and it now supports these exciting, new form-factors.
-        </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">
-                Provide information on-the-go for your users, whenever they need it.
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">Learn about 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">
-                Build your apps for the big screen and bring your content to life.
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">Learn about 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">
-                Extend your music apps to automobile
-                entertainment systems.
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">Learn about Android Auto</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">Build for a Multi-Screen World</h1>
+    <div class="dac-section-subtitle">
+      Android runs on hundreds of millions of handheld devices around the world,
+      and it now supports these exciting, new form-factors.
+    </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/jd_collections.js b/docs/html/jd_collections.js
index e2d0eb9..834eac1 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -1,4 +1,10 @@
 var RESOURCE_COLLECTIONS = {
+  "index/carousel": {
+    "title": "",
+    "resources": [
+      "about/versions/lollipop.html"
+    ]
+  },
   "index/primary": {
     "title": "",
     "resources": [
@@ -7,6 +13,14 @@
       "sdk/index.html"
     ]
   },
+  "index/multiscreen": {
+    "title": "",
+    "resources": [
+      "wear/index.html",
+      "tv/index.html",
+      "auto/index.html"
+    ]
+  },
   "index/primary/zhcn": {
     "title": "",
     "resources": [
@@ -15,6 +29,128 @@
       "intl/zh-cn/distribute/tools/localization-checklist.html"
     ]
   },
+  "design/landing/latest": {
+    "title": "",
+    "resources": [
+      "http://www.youtube.com/watch?v=p4gmvHyuZzw",
+      "http://www.youtube.com/watch?v=YaG_ljfzeUw",
+      "http://www.youtube.com/watch?v=XOcCOBe8PTc"
+    ]
+  },
+  "design/landing/materialdesign": {
+    "title": "",
+    "resources": [
+      "https://www.google.com/design/spec/animation/",
+      "https://www.google.com/design/spec/style/",
+      "https://www.google.com/design/spec/layout/",
+      "https://www.google.com/design/spec/components/",
+      "https://www.google.com/design/spec/patterns/",
+      "https://www.google.com/design/spec/usability/"
+    ]
+  },
+  "design/landing/pureandroid": {
+    "title": "",
+    "resources": [
+      "design/get-started/creative-vision.html",
+      "design/material/index.html",
+      "training/material/index.html",
+      "design/patterns/pure-android.html",
+      "design/patterns/new.html",
+      "design/devices.html"
+    ]
+  },
+  "design/landing/resources": {
+    "title": "",
+    "resources": [
+      "https://www.google.com/design/spec/resources/color-palettes.html",
+      "https://www.google.com/design/spec/resources/layout-templates.html",
+      "https://www.google.com/design/spec/resources/sticker-sheets-icons.html",
+      "https://www.google.com/design/spec/resources/roboto-noto-fonts.html",
+      "https://www.google.com/design/icons/index.html",
+      "design/downloads/index.html#Wear"
+    ]
+  },
+  "develop/landing/mainlinks": {
+    "title": "",
+    "resources": [
+      "tools/studio/index.html",
+      "samples/new/index.html",
+      "tools/projects/templates.html"
+    ]
+  },
+  "develop/landing/latest": {
+    "title": "",
+    "resources": [
+      "http://android-developers.blogspot.com/2015/04/new-android-code-samples.html",
+      "http://android-developers.blogspot.com/2015/04/android-support-library-221.html",
+      "http://android-developers.blogspot.com/2015/03/a-new-reference-app-for-multi-device.html"
+    ]
+  },
+  "develop/landing/performance": {
+    "title": "",
+    "resources": [
+      "http://www.youtube.com/watch?v=fEEulSk1kNY",
+      "http://www.youtube.com/watch?v=-3ry8PxcJJA",
+      "http://www.youtube.com/watch?v=_kKTGK-Cb_4"
+    ]
+  },
+  "develop/landing/buildwithgoogle": {
+    "title": "",
+    "resources": [
+    ]
+  },
+  "develop/landing/ubicomp": {
+    "title": "",
+    "resources": [
+      "https://www.youtube.com/watch?v=AK38PJZmIW8&list=PLWz5rJ2EKKc-kIrPiq098QH9dOle-fLef",
+      "https://www.youtube.com/watch?v=6K_jxccHv5M&index=1&list=PLOU2XLYxmsILFBfx66ens76VMLMEPJAB0",
+      "https://www.youtube.com/watch?v=KNKGM4ss5Sc&index=4&list=PLWz5rJ2EKKc9BdE_PSLNIGjXXr3h_orXM"
+    ]
+  },
+  "develop/landing/tools": {
+    "title": "",
+    "resources": [
+      "https://www.youtube.com/watch?v=K2dodTXARqc&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ&index=1",
+      "https://www.youtube.com/watch?v=3PIc-DuEU2s&index=1&list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX",
+      "https://www.youtube.com/watch?v=FOn64iqlphk&index=1&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf"
+    ]
+  },
+  "develop/landing/courses": {
+    "title": "",
+    "resources": [
+      "https://www.udacity.com/course/ux-design-for-mobile-developers--ud849",
+      "https://www.udacity.com/course/developing-android-apps--ud853",
+      "https://www.udacity.com/course/android-performance--ud825"
+    ]
+  },
+  "distribute/landing/carousel": {
+    "title": "",
+    "resources": [
+      "http://www.youtube.com/watch?v=Pd49vTkvu0U",
+      "http://www.youtube.com/watch?v=ekxABqJeRBc",
+      "http://www.youtube.com/watch?v=MPnH7h12h0U",
+      "http://www.youtube.com/watch?v=700gYRkhkLM"
+    ]
+  },
+  "distribute/landing/googleplay": {
+    "title": "",
+    "resources": [
+      "distribute/googleplay/about.html",
+      "distribute/googleplay/developer-console.html",
+      "distribute/googleplay/index.html#opportunities"
+    ]
+  },
+  "distribute/landing/more": {
+    "title": "",
+    "resources": [
+      "distribute/users/promote-with-ads.html",
+      "distribute/monetize/ads.html",
+      "distribute/analyze/index.html",
+      "distribute/engage/deep-linking.html",
+      "distribute/engage/easy-signin.html",
+      "https://cloud.google.com/docs/"
+    ]
+  },
   "distribute/edu/videos/stories": {
     "title": "",
     "resources": [
@@ -40,21 +176,20 @@
   "launch/static": {
     "title": "",
     "resources": [
-      "distribute/googleplay/about.html",
-      "distribute/googleplay/guide.html",
-      "about/versions/lollipop.html",
-      "distribute/googleplay/wear.html",
-      "distribute/googleplay/tv.html",
-      "distribute/googleplay/edu/about.html",
-      "distribute/googleplay/families/about.html",
-      "distribute/monetize/subscriptions.html",
+      "http://www.youtube.com/watch?v=1RIz-cmTQB4",
+      "http://www.youtube.com/watch?v=MVBMWDzyHAI",
+      "http://android-developers.blogspot.com/2013/11/app-translation-service-now-available.html",
+      "http://android-developers.blogspot.com/2013/10/more-visibility-for-tablet-apps-in.html",
+      "http://android-developers.blogspot.com/2013/11/bring-your-apps-into-classroom-with.html",
+      "distribute/essentials/quality/tablets.html",
+      "distribute/users/build-buzz.html",
+      "distribute/monetize/premium.html",
       "distribute/monetize/freemium.html",
       "distribute/monetize/ads.html",
-      "distribute/users/promote-with-ads.html",
-      "distribute/engage/deep-linking.html",
-      "distribute/engage/game-services.html",
-      "distribute/essentials/optimizing-your-app.html",
-      "distribute/engage/easy-signin.html",
+      "distribute/essentials/best-practices/apps.html",
+      "distribute/essentials/best-practices/games.html",
+      "distribute/users/know-your-user.html",
+      "distribute/googleplay/developer-console.html"
     ]
   },
   "launch/static/ja": {
@@ -1095,6 +1230,14 @@
       "https://support.google.com/googleplay/answer/2651410"
     ]
   },
+  "preview/landing/resources": {
+    "title": "",
+    "resources": [
+      "preview/api-overview.html",
+      "preview/setup-sdk.html",
+      "preview/samples.html"
+    ]
+  },
   "autolanding": {
     "title": "",
     "resources": [
diff --git a/docs/html/jd_extras.js b/docs/html/jd_extras.js
index f91550f..cc11da5 100644
--- a/docs/html/jd_extras.js
+++ b/docs/html/jd_extras.js
@@ -99,6 +99,138 @@
     "type":"video"
   },
   {
+    "title":"DesignBytes: Intro To Material Design",
+    "titleFriendly":"",
+    "summary":"These days, UI designers need to be thinking about phones, tablets, laptops, TVs, smartwatches, and beyond. In this DesignByte we talk about how Google designers have been working on making cross-platform and multi-screen design easier. We wanted to build a design system that felt at home on every screen, from the smallest watch to the largest TV.",
+    "url":"http://www.youtube.com/watch?v=p4gmvHyuZzw",
+    "group":"",
+    "keywords": [],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/p4gmvHyuZzw/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"DesignBytes: Paper and Ink: The Materials that Matter",
+    "titleFriendly":"",
+    "summary":"Join Rich Fulcher to learn about the materials of material design. See how virtual paper and ink form the foundation of your tactile user interface and master the rules that govern their behaviour.",
+    "url":"http://www.youtube.com/watch?v=YaG_ljfzeUw",
+    "group":"",
+    "keywords": [],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/YaG_ljfzeUw/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"DesignBytes: Material Design in the Google I/O App",
+    "titleFriendly":"",
+    "summary":"Roman Nurik shares details on the design process for the Google I/O 2014 app. To check out the app's source code, visit github.com/google/iosched.",
+    "url":"http://www.youtube.com/watch?v=XOcCOBe8PTc",
+    "group":"",
+    "keywords": [],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/XOcCOBe8PTc/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"Battery Drain and Networking",
+    "titleFriendly":"",
+    "summary":"Let’s take a moment to make something insanely clear: As far as battery is concerned, NETWORKING is the biggest, baddest, dirtiest offender there is. And optimizing performance here isn’t easy. Since the chip isn’t always awake and draining power, means you can optimize how it wakes up, sends traffic, and saves battery.",
+    "url":"http://www.youtube.com/watch?v=fEEulSk1kNY",
+    "group":"",
+    "keywords": [],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/fEEulSk1kNY/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"Batching Background Work Until Later",
+    "titleFriendly":"",
+    "summary":"Yes, your app is special. But when it comes to battery use, sometimes it’s better to be part of the crowd. Why not spread the battery blame around a bit? Ian Ni-Lewis shows you how ridiculously easy it is to go from battery hog to team player in this video.",
+    "url":"http://www.youtube.com/watch?v=-3ry8PxcJJA",
+    "group":"",
+    "keywords": [],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/-3ry8PxcJJA/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"The Performance Lifecycle",
+    "titleFriendly":"",
+    "summary":"Performance problems surface in your application at the least-wanted times (like right before you’re about to ship your first build). But don’t freak out: There’s a simple process that you can follow to help get your performance back under control.",
+    "url":"http://www.youtube.com/watch?v=_kKTGK-Cb_4",
+    "group":"",
+    "keywords": [],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/_kKTGK-Cb_4/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"Introduction to Android Studio",
+    "titleFriendly":"",
+    "summary":"Learn why you should migrate your projects to Android Studio now and how it can help you be more productive as a developer. Rich layout editor, handy suggestions and fixes, new Android project view - these are just some of the things you can expect from the IDE, which is built on the successful IntelliJ IDEA.",
+    "url":"https://www.youtube.com/watch?v=K2dodTXARqc&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ&index=1",
+    "group":"",
+    "keywords": ["studio", "tools"],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/K2dodTXARqc/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"Google Play Services 7.3",
+    "titleFriendly":"",
+    "summary":"Google Play Services 7.3 brings a ton of great new features to help you BUILD BETTER APPS! This update brings the ability to connect multiple wearables simultaneously to a single phone.",
+    "url":"https://www.youtube.com/watch?v=FOn64iqlphk&index=1&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
+    "group":"",
+    "keywords": ["google play services"],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/FOn64iqlphk/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"Running a Successful Games Business with Google",
+    "titleFriendly":"",
+    "summary":"Sure, we all want to make the next great gaming masterpiece. But we also want to feed our families and/or dogs. Join Bob Meese from the Google Play team as he gives you some key pointers on how to make sure you're best taking advantage of Google Play and running a successful games business.",
+    "url":"http://www.youtube.com/watch?v=tDmnGNkTtlE",
+    "group":"",
+    "keywords": [],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/tDmnGNkTtlE/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"Introduction to Android TV",
+    "titleFriendly":"",
+    "summary":"Android TV brings the Android platform to the living room with rich content and entertaining app experiences. In this video, Timothy introduces the design philosophy and developer components that make building TV experiences easier than ever before.",
+    "url":"https://www.youtube.com/watch?v=6K_jxccHv5M&index=1&list=PLOU2XLYxmsILFBfx66ens76VMLMEPJAB0",
+    "group":"",
+    "keywords": ["tv"],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/6K_jxccHv5M/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
+    "title":"Under the Hood of Android Auto",
+    "titleFriendly":"",
+    "summary":"Your car contains some serious technology. Learn about the Android Auto architecture, which enables you to control Android apps and services running on your phone through your car. ",
+    "url":"https://www.youtube.com/watch?v=KNKGM4ss5Sc&index=4&list=PLWz5rJ2EKKc9BdE_PSLNIGjXXr3h_orXM",
+    "group":"",
+    "keywords": ["auto"],
+    "tags": [
+    ],
+    "image":"http://i1.ytimg.com/vi/KNKGM4ss5Sc/maxresdefault.jpg",
+    "type":"video"
+  },
+  {
     "title":"Developer Registration",
     "titleFriendly":"",
     "summary":"Additional information about the registration process.",
@@ -1990,6 +2122,261 @@
     "titleFriendly": ""
   },
   {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/animation/",
+    "timestamp": null,
+    "image": "images/cards/material-animation_2x.png",
+    "title": "Animation",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/style/",
+    "timestamp": null,
+    "image": "images/cards/material-style_2x.jpg",
+    "title": "Style",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/layout/",
+    "timestamp": null,
+    "image": "images/cards/material-layout_2x.png",
+    "title": "Layout",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/components/",
+    "timestamp": null,
+    "image": "images/cards/material-components_2x.jpg",
+    "title": "Components",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/patterns/",
+    "timestamp": null,
+    "image": "images/cards/material-patterns_2x.png",
+    "title": "Patterns",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/usability/",
+    "timestamp": null,
+    "image": "images/cards/material-usability_2x.png",
+    "title": "Usability",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/resources/color-palettes.html",
+    "timestamp": null,
+    "image": "images/cards/material-color-palette_2x.jpg",
+    "title": "Color Palettes",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/resources/layout-templates.html",
+    "timestamp": null,
+    "image": "images/cards/material-layout-template_2x.jpg",
+    "title": "Layout Templates",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/resources/sticker-sheets-icons.html",
+    "timestamp": null,
+    "image": "images/cards/material-sticker-sheet_2x.jpg",
+    "title": "Sticker Sheets & Icons",
+    "summary": "",
+    "keywords": [],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "lang": "en",
+    "group": "",
+    "tags": [],
+    "url": "https://www.google.com/design/spec/resources/roboto-noto-fonts.html",
+    "timestamp": null,
+    "image": "images/cards/material-typography_2x.jpg",
+    "title": "Typography: Roboto and Noto Sans fonts",
+    "summary": "",
+    "keywords": [],
+    "type": "materialdesign",
+    "titleFriendly": ""
+  },
+    {
+    "lang": "en",
+    "group": "",
+    "tags": [
+      "icons",
+      "material",
+      "iconography"
+    ],
+    "url": "https://www.google.com/design/icons/index.html",
+    "timestamp": null,
+    "image": "images/cards/card-material-icons-16x9_2x.jpg",
+    "title": "Material icon collection",
+    "summary": "",
+    "keywords": ["icons"],
+    "type": "material design",
+    "titleFriendly": ""
+  },
+  {
+    "title":"Android Wear Materials",
+    "titleFriendly":"",
+    "summary":"Drag and drop your way to beautifully designed Android Wear apps.",
+    "url":"design/downloads/index.html#Wear",
+    "group":"",
+    "keywords": ["icons","stencils","color swatches"],
+    "tags": ["icons","stencils","colorswatches"],
+    "image":"images/cards/android-wear-materials_2x.jpg",
+    "lang":"en",
+    "type":"design"
+  },
+  {
+    "title":"UX Design for Mobile Developers",
+    "titleFriendly":"",
+    "summary":"Learn how to design a 5-star app.",
+    "url":"https://www.udacity.com/course/ux-design-for-mobile-developers--ud849",
+    "group":"",
+    "keywords": ["mobile","ux","design"],
+    "tags": ["courses"],
+    "image":"images/cards/course-ud849.jpg",
+    "lang":"en",
+    "type":"online course"
+  },
+  {
+    "title":"Developing Android Apps",
+    "titleFriendly":"",
+    "summary":"Learn Android and build an app!",
+    "url":"https://www.udacity.com/course/developing-android-apps--ud853",
+    "group":"",
+    "keywords": ["start","firstapp","sdk"],
+    "tags": ["courses"],
+    "image":"images/cards/course-ud853.jpg",
+    "lang":"en",
+    "type":"online course"
+  },
+  {
+    "title":"Android Performance",
+    "titleFriendly":"",
+    "summary":"Optimize your apps for speed and usability.",
+    "url":"https://www.udacity.com/course/android-performance--ud825",
+    "group":"",
+    "keywords": ["performance","battery"],
+    "tags": ["courses"],
+    "image":"images/cards/course-ud825.png",
+    "lang":"en",
+    "type":"online course"
+  },
+  {
+    "title":"Watch Faces for Android Wear",
+    "titleFriendly":"",
+    "summary":"Watch faces let you customize the most prominent UI feature of Android wearables. The API is simple enough for rapid development and flexible enough to build something awesome.",
+    "url":"https://www.youtube.com/watch?v=AK38PJZmIW8&list=PLWz5rJ2EKKc-kIrPiq098QH9dOle-fLef",
+    "group":"",
+    "keywords": ["wear", "wearable", "watch face"],
+    "tags": [],
+    "image":"http://i1.ytimg.com/vi/AK38PJZmIW8/maxresdefault.jpg",
+    "lang":"en",
+    "type":"video"
+  },
+
+  {
+    "title":"Android Support Library",
+    "titleFriendly":"",
+    "summary":"These essential components help you build a great app that works on the huge variety of Android devices, faster.",
+    "url":"https://www.youtube.com/watch?v=3PIc-DuEU2s&index=1&list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX",
+    "group":"",
+    "keywords": ["support", "compatibility"],
+    "tags": [],
+    "image":"http://i1.ytimg.com/vi/3PIc-DuEU2s/maxresdefault.jpg",
+    "lang":"en",
+    "type":"Video"
+  },
+  {
+    "tags": [
+      "android",
+      "developerstory",
+      "googleplay",
+      "featured"
+    ],
+    "title": "Android Developer Storys: Jelly Button Games — Growing globally through data driven development",
+    "type": "youtube",
+    "url": "http://www.youtube.com/watch?v=Pd49vTkvu0U"
+  },
+  {
+    "title":"Scale with Google Cloud Platform",
+    "titleFriendly":"",
+    "summary":"With Google Cloud Platform, developers can build, test and deploy applications on Google's highly-scalable and reliable infrastructure for your web, mobile and backend solutions.",
+    "url":"https://cloud.google.com/docs/",
+    "group":"",
+    "keywords": [],
+    "tags": [],
+    "image":"images/cards/cloud-platform_2x.png",
+    "lang":"en",
+    "type":"distribute"
+  },
+  {
+    "title":"Opportunities & Programs",
+    "titleFriendly":"",
+    "summary":"This is a card body place holder text. This is a card body place holder text. This is a card body place holder text.",
+    "url":"distribute/googleplay/index.html#opportunities",
+    "group":"",
+    "keywords": [],
+    "tags": [],
+    "image":"images/cards/program-edu_2x.jpg",
+    "lang":"en",
+    "type":"distribute"
+  },
+  {
     "lang": "ja",
     "title": "Gaming Everywhere",
     "titleFriendly": "",
@@ -2313,4 +2700,45 @@
     "image": "distribute/images/advertising.jpg",
     "type": "distribute"
   }
-]);
\ No newline at end of file
+]);
+
+var CAROUSEL_OVERRIDE = {
+  "about/versions/lollipop.html": {
+    "image": "images/home/hero-lollipop_2x.png",
+    "heroColor": "#263238",
+    "heroInvert": true,
+    "title": "Android 5.0 Lollipop",
+    "summary": "The Android 5.0 update adds a variety of new features for your apps, such as notifications on the lock screen, an all-new camera API, OpenGL ES 3.1, the new Material design interface, and much more."
+  },
+  "distribute/googleplay/families/about.html": {
+    "image": "images/distribute/hero-family.jpg",
+    "title": "Designed for Families",
+    "summary": "Introducing a new Google Play section to promote family friendly apps. Your apps in the program can benefit from enhanced discoverability in addition to maintaining their existing categories, rankings, and reviews elsewhere on the Google Play store."
+  },
+  "http://www.youtube.com/watch?v=Pd49vTkvu0U": {
+    "image": "images/distribute/hero-jelly-button.jpg",
+    "title": "How Jelly Button Games are growing globally through data",
+    "summary": "To really understand their users, Jelly Button Games analyses over 3 billion events each month using Google Analytics and Google BigQuery."
+  },
+  "http://www.youtube.com/watch?v=700gYRkhkLM": {
+    "image": "images/distribute/hero-outfit7.jpg",
+    "title": "Outfit7 — Building an entertainment company with Google",
+    "summary": "Outfit7, creators of My Talking Tom and My Talking Angela, offer a complete entertainment experience to users spanning mobile apps, user generated and original YouTube content, and a range of toys, clothing, and accessories...."
+  },
+  "http://www.youtube.com/watch?v=MPnH7h12h0U": {
+    "image": "images/distribute/hero-haystack.jpg",
+    "summary": "Haystack TV built a scalable business with six employees and Android TV. Two weeks was all it took for them to bring their mobile app to the big screen."
+  },
+  "http://www.youtube.com/watch?v=ekxABqJeRBc": {
+    "image": "images/distribute/hero-ginlemon.jpg",
+    "title": "How GinLemon is breaking through with Google Play",
+    "summary": "Meet Vincenzo Colucci, developer and founder of GinLemon, which started as a summer holiday joke and has now become a successful global app business on Google Play based in Manfredonia, southern Italy."
+  },
+  "distribute/googleplay/guide.html": {
+    "heroColor": "#fcb94e",
+    "image": "images/distribute/hero-g-play-guidebooks_2x.png",
+    "title": "Finding Success on Google Play",
+    "summary": "We’ve created a downloadable guide to help you find success with your app or game business on Google Play. In it, you’ll find features, tips, and best practices to help you build an effective strategy.",
+    "tags": []
+  }
+};
\ No newline at end of file
diff --git a/docs/html/jd_tag_helpers.js b/docs/html/jd_tag_helpers.js
index 7538e4d..f03b1d7 100644
--- a/docs/html/jd_tag_helpers.js
+++ b/docs/html/jd_tag_helpers.js
@@ -13,6 +13,7 @@
   GOOGLE_RESOURCES,
   GUIDE_RESOURCES,
   SAMPLES_RESOURCES,
+  PREVIEW_RESOURCES,
   TOOLS_RESOURCES,
   TRAINING_RESOURCES,
   YOUTUBE_RESOURCES,
@@ -70,6 +71,7 @@
   'google': GOOGLE_RESOURCES,
   'guide': GUIDE_RESOURCES,
   'samples': SAMPLES_RESOURCES,
+  'preview': PREVIEW_RESOURCES,
   'tools': TOOLS_RESOURCES,
   'training': TRAINING_RESOURCES,
   'youtube': YOUTUBE_RESOURCES,
@@ -86,6 +88,7 @@
   {map:GOOGLE_BY_TAG,arr:GOOGLE_RESOURCES},
   {map:GUIDE_BY_TAG,arr:GUIDE_RESOURCES},
   {map:SAMPLES_BY_TAG,arr:SAMPLES_RESOURCES},
+  {map:PREVIEW_BY_TAG,arr:PREVIEW_RESOURCES},
   {map:TOOLS_BY_TAG,arr:TOOLS_RESOURCES},
   {map:TRAINING_BY_TAG,arr:TRAINING_RESOURCES},
   {map:YOUTUBE_BY_TAG,arr:YOUTUBE_RESOURCES},
diff --git a/docs/html/preview/api-overview.jd b/docs/html/preview/api-overview.jd
new file mode 100644
index 0000000..dde3c7be
--- /dev/null
+++ b/docs/html/preview/api-overview.jd
@@ -0,0 +1,120 @@
+page.title=API Overview
+page.keywords=preview,sdk,compatibility
+sdk.platform.apiLevel=22
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document
+    <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle">
+        <span class="more">show more</span>
+        <span class="less" style="display:none">show less</span></a></h2>
+
+<ol id="toc44" class="hide-nested">
+  <li><a href="#">Important Behavior Changes</a>
+    <ol>
+      <li><a href="#">change 1</a></li>
+      <li><a href="#">change 2</a></li>
+    </ol>
+  </li>
+  <li><a href="#">Feature Group 1</a>
+    <ol>
+      <li><a href="#">change 1</a></li>
+      <li><a href="#">change 2</a></li>
+    </ol>
+  </li>
+  <li><a href="#">Feature Group 2</a>
+    <ol>
+      <li><a href="#">change 1</a></li>
+      <li><a href="#">change 2</a></li>
+    </ol>
+  </li>
+</ol>
+
+</div>
+</div>
+
+<p>The M Developer Preview gives you an advance look at the upcoming release
+for the Android platform, which offers new features for users and app
+developers. This document provides an introduction to the most notable APIs.</p>
+
+<p>The M Developer Preview is intended for <strong>developer early
+adopters</strong> and <strong>testers</strong>. If you are interested in
+influencing the direction of the Android framework,
+<a href="{@docRoot}preview/setup-sdk.html">give the M Developer Preview a
+try</a> and send us your feedback!</p>
+
+<p class="caution"><strong>Caution:</strong> Do not not publish apps
+that use the M Developer Preview to the Google Play store.</p>
+
+<p class="note"><strong>Note:</strong> This document often refers to classes and
+methods that do not yet have reference material available on <a
+href="{@docRoot}">developer.android.com</a>. These API elements are
+formatted in {@code code style} in this document (without hyperlinks). For the
+preliminary API documentation for these elements, download the <a
+href="http://storage.googleapis.com/androiddevelopers/preview/l-developer-preview-reference.zip">preview
+reference</a>.</p>
+
+<h2 id="Behaviors">Important Behavior Changes</h2>
+
+<p>If you have previously published an app for Android, be aware that your app
+  might be affected by changes in the upcoming release.</p>
+
+<h3 id="id">Behavior Change 1</h3>
+
+<p>
+  Bacon ipsum dolor amet biltong picanha t-bone, jowl salami tri-tip jerky kielbasa sirloin boudin
+  porchetta fatback cow meatloaf capicola. Short ribs kielbasa pig drumstick rump boudin jowl chuck
+  beef ribs doner tenderloin biltong swine.
+</p>
+
+
+
+<h2 id="id">Feature Group 1</h2>
+
+<h3 id="id">Feature item 1</h3>
+
+<p>
+  Bacon ipsum dolor amet landjaeger capicola tail sausage shank swine biltong pork andouille t-bone
+  alcatra chicken. Strip steak bacon tongue beef bresaola landjaeger. Shankle boudin pork belly
+  jowl pig. Rump swine ham hock frankfurter pork shankle. Shank corned beef alcatra doner flank
+  turducken. Tongue brisket ham shoulder:
+</p>
+
+<h3 id="id">Feature item 2</h3>
+
+<p>
+  Bacon ipsum dolor amet landjaeger capicola tail sausage shank swine biltong pork andouille t-bone
+  alcatra chicken. Strip steak bacon tongue beef bresaola landjaeger. Shankle boudin pork belly
+  jowl pig. Rump swine ham hock frankfurter pork shankle. Shank corned beef alcatra doner flank
+  turducken. Tongue brisket ham shoulder:
+</p>
+
+<h2 id="id">Feature Group 2</h2>
+
+<h3 id="id">Feature item 1</h3>
+
+<p>
+  Bacon ipsum dolor amet landjaeger capicola tail sausage shank swine biltong pork andouille t-bone
+  alcatra chicken. Strip steak bacon tongue beef bresaola landjaeger. Shankle boudin pork belly
+  jowl pig. Rump swine ham hock frankfurter pork shankle. Shank corned beef alcatra doner flank
+  turducken. Tongue brisket ham shoulder:
+</p>
+
+<h3 id="id">Feature item 2</h3>
+
+<p>
+  Bacon ipsum dolor amet landjaeger capicola tail sausage shank swine biltong pork andouille t-bone
+  alcatra chicken. Strip steak bacon tongue beef bresaola landjaeger. Shankle boudin pork belly
+  jowl pig. Rump swine ham hock frankfurter pork shankle. Shank corned beef alcatra doner flank
+  turducken. Tongue brisket ham shoulder:
+</p>
+
+
+
+<p class="note">
+  For a detailed view of all API changes in the M Developer Preview, see the <a href=
+  "{@docRoot}preview/reference.html">API Differences Report</a>.
+</p>
\ No newline at end of file
diff --git a/docs/html/preview/images/bugs.png b/docs/html/preview/images/bugs.png
new file mode 100644
index 0000000..46adf05
--- /dev/null
+++ b/docs/html/preview/images/bugs.png
Binary files differ
diff --git a/docs/html/preview/images/dev-prev.png b/docs/html/preview/images/dev-prev.png
new file mode 100644
index 0000000..eae6ede
--- /dev/null
+++ b/docs/html/preview/images/dev-prev.png
Binary files differ
diff --git a/docs/html/preview/images/updates.png b/docs/html/preview/images/updates.png
new file mode 100644
index 0000000..f165c5a
--- /dev/null
+++ b/docs/html/preview/images/updates.png
Binary files differ
diff --git a/docs/html/preview/index.html b/docs/html/preview/index.html
index 7cd029f..af99e2d 100644
--- a/docs/html/preview/index.html
+++ b/docs/html/preview/index.html
@@ -1,5 +1,88 @@
 <!DOCTYPE html>
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 <html>
 <head>
 
@@ -9,7 +92,7 @@
 
 <meta name="Description" content="Test and build your apps against the next version of Android to ensure they're ready when the platform officially launches.">
 <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
-<title>Android L Developer Preview | Android Developers</title>
+<title>Android M Developer Preview | Android Developers</title>
 
 <!-- STYLESHEETS -->
 <link rel="stylesheet"
@@ -44,517 +127,211 @@
 
 </head>
 
+<body class="gc-documentation
 
-<body class="gc-documentation" itemscope="" itemtype="http://schema.org/Article">
+" itemscope itemtype="http://schema.org/Article">
 
 
 <a name="top"></a>
-<a name="download"></a>
 <div id="body-content">
-<div class="fullpage">
+<div class="fullpage" >
 <div id="jd-content">
   <div class="jd-descr" itemprop="articleBody">
-<style>
-body,html, #qv {background-color:#e9e9e9}
-
-#qv * { font-weight:bold;}
-
+    <style>
 .fullpage>#footer,
 #jd-content>.content-footer.wrap {
   display:none;
 }
+</style>
 
+<style>
+#footer {
+    display: none;
+}
 .content-footer {
   display: none;
 }
 </style>
 
-    <div style="border-bottom: 1px solid #a5c43a; position: absolute; left: 0; right: 0; top: 0; z-index:99">
-      <div class="wrap" style="position: relative; height: 45px; padding: 0 20px;">
-        <a href="/index.html" style="position:absolute;top:8px">
-          <img src="/assets/images/dac_logo.png" srcset="/assets/images/dac_logo@2x.png 2x" width="123" height="25" alt="Android Developers home page">
-        </a>
-      </div>
-    </div>
+<!--
+<div style="height:20px"></div>
+<div id="butterbar-wrapper">
+  <div id="butterbar">
+    <a href="#" id="butterbar-message">
+      butterbar message
+    </a>
+  </div>
+</div>
+-->
 
+    <div class="landing-rest-of-page">
+      <div class="landing-section" style="padding-top:60px">
+        <div class="wrap">
+          <div class="landing-section-header">
+            <div class="landing-h1">Android M Developer Preview</div>
+            <div class="landing-subhead">
+              Get an early look at the next release and prepare your apps for the
+              official platform launch.
+            </div>
 
-
-
-
-
-
-
-
-
-
-
-
-    <div class="landing-rest-of-page" style="position:relative;">
-
-
-
-
-
-
-
-
-  <div class="wrap" id="tos" style="display:none;padding-top:90px">
-
-    <p class="sdk-terms-intro">Before downloading the Android Preview system image,
-      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:100%">
-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 class="landing-section" id="landing-wrapper" style="padding:55px 10px 0">
-          <div class="landing-section-header" style="margin:0">
-            <div class="landing-h1">Android L Developer Preview</div>
-            <div class="landing-subhead" style="padding-bottom:40px">
-              Final APIs now available!
+            <img src="/preview/images/dev-prev.png" style=" margin:0px 0 0 40px" width="860px"/>
+            <div class="col-6" style="margin-left:660px; margin-top:-105px">
+              <a href="/preview/setup-sdk.html" class="landing-button landing-primary"
+              style="position:absolute;z-index:100;float:right;margin-top: 0px;">
+                Get Started</a>
             </div>
           </div>
-        <div class="wrap" style="padding:20px; position:relative">
-
-    <img src="/images/home/l-hero_2x.png"
-          srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x"
-          style=" margin:-5px -30px 0 0;float:right" alt="" width="510">
-
-  <a href="/about/versions/android-5.0.html" class="landing-button landing-primary"
-  style="position:absolute;z-index:100;right:215px;top:375px">Android 5.0 API Overview</a>
-
-      <div style="width:440px">
-<p>Android 5.0 (Lollipop) is now out of preview and available to users.</p>
-
-<p>If you previously developed apps with the L Developer Preview, be aware that various APIs and
-behaviors have changed, so you should update your SDK now to test your apps and take advantage of
-new features in Android 5.0.</p>
-
-
-        <p>To get the latest Android 5.0 SDK:</p>
-        <ol>
-          <li>Start the <a href="/tools/help/sdk-manager.html">Android SDK Manager</a>.</li>
-          <li>In the <b>Tools</b> section, select the latest <b>SDK Tools</b>,
-            <b>SDK Platform-tools</b>, and <b>SDK Build-tools</b>.</li>
-            <!-- Android L not yet showing up in Android SDK Manager...  -->
-          <li>Select everything under the <b>Android 5.0</b> section, then
-            click <b>Install packages...</b></li>
-          <li>Accept the licensing agreement for the packages, then click
-            <b>Install</b>.</li>
-        <li>If you previously installed the Android L Preview SDK, select all those
-          packages in the SDK Manager and click <strong>Delete packages</strong>.
-        </ol>
-        <p>Now you're ready to develop and test on Android 5.0 with your normal workflow
-          and begin publishing app updates to Google Play.
-      </div>
-
-    <h2 id="Start" class="norule" style="margin:60px 0 0 0">Get Started on Android 5.0</h2>
         </div> <!-- end .wrap -->
-
-
-
-    <div class="wrap" style="background-color:#fff;padding:20px;position:relative">
-
-      <div id="qv-wrapper">
-      <div id="qv">
-      <h2>More about Android 5.0</h2>
-        <ul>
-          <li><a href="http://android-developers.blogspot.com/">Android 5.0 announcement</a></li>
-          <li><a href="/about/versions/android-5.0.html">Android 5.0 API Overview</a></li>
-          <li><a href="/sdk/api_diff/21/changes.html">Android 5.0 API Diff Report</a></li>
-          <li><a href="/samples/new/index.html">Android 5.0 API Samples</a></li>
-        </ul>
-      </div>
-      </div>
-
-      <p>Now that Android 5.0 APIs are final:</p>
-      <ul>
-        <li>The API level for Android 5.0 is 21, so be sure to update your
-        app's manifest file to set <a href="/guide/topics/manifest/uses-sdk-element.html#target"
-        ><code>targetSdkVersion</code></a> to
-        <code>"21"</code> when you begin testing:
-        <pre>&lt;uses-sdk android:targetSdkVersion="21" ... /></pre>
-        </li>
-        <li>Google Play now accepts APKs with <a
-          href="/guide/topics/manifest/uses-sdk-element.html#min"><code>minSdkVersion</code></a> or
-          <a href="/guide/topics/manifest/uses-sdk-element.html#target"
-                  ><code>targetSdkVersion</code></a> set
-          to <code>"21"</code>, so you can upload your updated apps today.</li>
-      </ul>
-
-      <p>If you previously flashed your Nexus 5 or Nexus 7 with a preview system image, you should
-        now update your device to the final factory system image.
-        Download the appropriate image from
-        <a href="http://developers.google.com/android/nexus/images">Factory Images for Nexus
-          Devices</a> and follow the flashing instructions on that page.</p>
-
-        </div> <!-- end .wrap -->
-
-
-
-
-
-
-
-
-        <div class="wrap" style="padding:20px; position:relative">
-    <h2 id="Material" class="norule" style="margin:40px 0 0 0">Design with Material</h2>
-    </div>
-
-        <div class="wrap" style="background-color:#fff;padding:20px;position:relative">
-      <img src="images/material-layers.png" width="240"
-          style="position:absolute;right:20px;top:-50px">
-
-      <div id="qv-wrapper" style="margin-top:120px">
-      <div id="qv">
-
-      <h2>More about Material Design</h2>
-        <ul>
-          <li><a href="http://www.google.com/design/spec/material-design/introduction.html">Material
-            Design Spec</a></li>
-          <li><a href="/design/material/index.html">Android Material Design</a></li>
-          <li><a href="/training/material/index.html">Creating Apps with Material Design</a>
-        </ul>
-      </div>
-      </div>
-
-
-<p>Material design is a complete design philosophy for visual, motion, and interaction design
-across platforms and devices. The <a href=
-"http://www.google.com/design/spec/material-design/introduction.html">material design specification
-(preview)</a> provides all the details for designers.</p>
-
-
-      <p>To get started with Material design in your Android app, update
-        your <a href="/guide/topics/manifest/uses-sdk-element.html#target"
-        ><code>targetSdkVersion</code></a> to <code>"21"</code> and apply the new
-        <a href="/reference/android/R.style.html#Theme_Material"
-        ><code>Material</code></a> theme. For example, when creating
-        a <a href="/guide/topics/ui/themes.html">custom theme</a>
-        for your app, open your project's <code>res/values/styles.xml</code> file
-        and extend the <a href="/reference/android/R.style.html#Theme_Material"
-        ><code>Material</code></a> theme:</p>
-<pre>
-&lt;resources>
-    &lt;style name="AppTheme" parent="android:Theme.Material">
-        &lt;!-- Customize the Material elements here -->
-    &lt;/style>
-&lt;/resources>
-</pre>
-<p>Then apply your custom theme to your application in the manifest file:</p>
-<pre>
-&lt;application android:theme="&#64;style/AppTheme">
-</pre>
-<p>Material design is more than just the UI theme, though. It's also about the way the app
-  behaves&mdash;how elements move and transform when the user interacts with them. So Android 5.0
-  and the <a href="/tools/support-library/features.html#v7">v7 support library</a> provide new
-  widgets and animation APIs that allow you to
-  build interaction patterns described in the
-  <a href="http://www.google.com/design/spec/material-design/introduction.html">Material design
-    specification</a>.</p>
-
-<p>All the Material design elements and interaction patterns provided by the UI styles and widgets
-are flexible, so you can adopt only what's appropriate for your app and retain a unique identity
-and experience for your product.</p>
-
-<p>And Material design on Android isn't just for Android 5.0. The
-  <a href="/tools/support-library/features.html#v7">v7 support library</a> has been significantly
-  updated in revision 21 to make many of the Material design elements available when
-  running on older versions of the platform.</p>
-
-<p>For many more details about how to implement the Material look and feel,
-    see <a href="/training/material/index.html">Creating Apps with Material
-    Design</a>.</p>
-
-
-    </div>
-
-
-
-
-
-
-
-
-
-
-
-    <div class="wrap" style="padding:20px; position:relative">
-    <h2 id="TV" class="norule" style="margin:40px 0 0 0">Build for Android TV</h2>
-    </div>
-
-        <div class="wrap" style="background-color:#fff;padding:20px;position:relative">
-      <img src="/tv/images/components.png" width="240"
-          style="position:absolute;right:20px;top:-50px">
-
-    <div id="qv-wrapper" style="margin-top:120px">
-    <div id="qv">
-
-    <h2>More about Android TV</h2>
-      <ul>
-        <li><a href="/design/tv/index.html">Android TV Design</a></li>
-        <li><a href="/training/tv/start/index.html">Building Apps for Android TV</a></li>
-        <li><a href="/training/tv/games/index.html">Building TV Games</a></li>
-        <li><a href="/training/tv/playback/index.html">Building TV Playback Apps</a></li>
-        <li><a href="/distribute/essentials/quality/tv.html">TV App Quality</a></li>
-      </ul>
-    </div>
-    </div>
-
-<p>Android 5.0 provides a new platform for users to experience your app on a big screen. The
-Android TV experience is centered around a simplified home screen that allows users to discover
-your app's content with personalized recommendations and voice search, or select your app to launch
-into your fullscreen experience.</p>
-
-
-<p>Making your app available on Android TV does not require that you build an entirely new app.
-Android TV is simply another form factor for the Android platform, so you can deliver the same APK
-that you provide for phones and tablets to TVs through Google Play. However, to make your app
-available on Android TV, you'll need to make some optimizations such as adding layouts
-for the big screen and adding support for remote control input. For more information about design
-guidelines, see <a href="/distribute/essentials/quality/tv.html">TV App Quality</a>.</p>
-
-<p class="note"><strong>Note:</strong> Google Play for Android TV will officially
-open for apps on November 3.</p>
-
-<p>Android TV is also great new opportunity for Android games. If you'd like to make your games
-available on Android TV, be sure to optimize the user experience for the big screen by following
-the recommendations in <a href="/training/tv/games/index.html">Building TV Games</a>.</p>
-
-
-      <p>To get started on Android TV, you need:</p>
-      <ul>
-        <li>The Android 5.0 SDK packages from the
-          <a href="/tools/help/sdk-manager.html">Android SDK Manager</a>,
-          including the <strong>Android TV System Image</strong> so you can create an
-          Android TV emulator.</li>
-        <li>An activity that's launchable from the Android TV home screen. This requires that you
-        add the <a href="/reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"
-        ><code>LEANBACK_LAUNCHER</code></a> category to one of your activities. For example:
-<pre>
-&lt;activity ... >
-    &lt;intent-filter>
-        &lt;action android:name="android.intent.action.MAIN" />
-        &lt;category android:name="android.intent.category.LEANBACK_LAUNCHER" />
-    &lt;/intent-filter>
-&lt;/activity>
-</pre>
-        </li>
-
-        <li>For a set of default styles that optimize your UI for the TV's
-          <em>leanback user experience</em>,
-          you should also apply the <a
-          href="/reference/android/support/v17/leanback/R.style.html#Theme_Leanback"
-        ><code>Leanback</code></a> theme to your activity:
-<pre>
-&lt;activity android:theme="@style/Theme.Leanback" ... >
-</pre>
-      </li>
-
-      </ul>
-      <p>You should also take advantage of the <a
-        href="/tools/support-library/features.html#v17-leanback">v17 leanback library</a>, which
-        provides the <a href="/reference/android/support/v17/leanback/R.style.html#Theme_Leanback"
-        ><code>Leanback</code></a> theme shown above, plus several widgets designed to
-        make your UI beautiful and easy to navigate on the big screen, such as a widget that creates
-        a set of large horizontal card views.</p>
-
-      <p>For more information about setting up a project for your TV app, building
-        TV layouts, and handling controller input,
-        see <a href="/training/tv/start/index.html">Building
-        TV Apps</a>.</p>
-    </div>
-
-
-
-
-
-
-
-
       </div> <!-- end .landing-section -->
 
 
 
+      <div class="landing-section landing-gray-background"
+        style="margin-top:-105px; padding-bottom:20px">
+        <div class="wrap">
+          <div class="cols">
+          <div class="landing-body" style="margin-top:-80px" >
 
+            <div class="landing-breakout cols">
+              <div class="col-4">
+                <p>This Feature</p>
+                <p class="landing-small">
+                  Kevin ham hock pig cupim brisket picanha, doner pork tri-tip frankfurter
+                  leberkas turkey.
+                </p>
+                <p class="landing-small">
+                  <a href="/preview/api-overview.html">Learn about this feature</a>
+                </p>
+              </div>
+              <div class="col-4">
+                <p>That Feature</p>
+                <p class="landing-small">
+                 Bacon ipsum dolor amet meatball tongue pork loin fatback, andouille shoulder
+                 chicken picanha pig landjaeger kielbasa shankle pastrami flank meatloaf.
+                </p>
+                <p class="landing-small">
+                  <a href="/preview/api-overview.html">Learn about that feature</a>
+                </p>
+              </div>
+              <div class="col-4">
+                <p style="width:230px">Another Feature</p>
+                <p class="landing-small">
+                   Landjaeger tri-tip tenderloin pork loin jowl, meatloaf t-bone kielbasa sausage
+                   swine spare ribs drumstick corned beef ham.
+                </p>
+                <p class="landing-small">
+                  <a href="/preview/api-overview.html">Learn about notifications</a>
+                </p>
+              </div>
+              <div class="col-4">
+                <p>Moar Features</p>
+                <p class="landing-small">
+                  <b>Feature Name</b> is our effort to meatloaf boudin meatball sausage strip
+                  steak hamburger, chuck ham pork chop.
+                </p>
+                <p class="landing-small">
+                  <a href="/preview/api-overview.html">Learn about moar feature</a>
+                </p>
+              </div>
+            </div>
+             <p style="margin-left:20px">See the <a href="/preview/api-overview.html">API
+              overview</a> for more information on the rest of the new and updated features.</p>
+          </div>
+          </div></div></div>
+    <div class="landing-section">
+        <div class="wrap">
+          <div class="cols">
+            <div class="landing-body">
+              <div class="col-3-wide">
+                  <a target="_blank" href="https://code.google.com/p/android-developer-preview/">
+                    <img class="landing-social-image" src="/preview/images/bugs.png" alt="">
+                  </a>
+                <div class="landing-social-copy">
+                  <p>Issue Tracker</p>
+                  <p class="landing-small">
+                  Let us know when you encounter problems, so we can fix them and make
+                  the platform better for you and your users.
+                    </p><p class="landing-small">
+                      <a href="https://code.google.com/p/android-developer-preview/">
+                      Report Issues</a>
+                    </p>
+                  <p></p>
+                </div>
+              </div>
+              <div class="col-3-wide">
+                <a target="_blank" href="http://g.co/androidldevpreview">
+                  <img class="landing-social-image" src="//www.google.com/images/icons/product/gplus-128.png" alt="">
+                </a>
+                <div class="landing-social-copy">
+                  <p>Google+ </p>
+                  <p class="landing-small">
+                    Join the community of Android developers testing out the M Developer Preview and
+                    share your thoughts and experiences.
+                  </p><p class="landing-small">
+                    <a href="http://g.co/androidldevpreview">
+                    Discuss on Google+</a>
+                    </p>
+                </div>
+              </div>
+              <div class="col-3-wide">
+                <a target="_blank" href="/preview/support.html">
+                  <img class="landing-social-image" src="/preview/images/updates.png" alt="">
+                </a>
+                <div class="landing-social-copy">
+                  <p>Support and Updates</p>
+                  <p class="landing-small">
+                  Updates to the preview are delivered
+                  in the Android SDK Manager. Check back periodically
+                  for news about the changes.
+                  </p>
+                  <p class="landing-small">
+                    <a href="/preview/support.html">Get Support</a>
+                  </p>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
 
-
-
-
-    <!-- spacer -->
-    <div class="wrap" style="padding:20px; position:relative">
-      <p>&nbsp;</p>
+    <div class="content-footer wrap" itemscope="" itemtype="http://schema.org/SiteNavigationElement">
+      <div class="layout-content-col col-16" style="padding-top:4px">
+        <style>#___plusone_0 {float:right !important;}</style>
+        <div class="g-plusone" data-size="medium"></div>
+      </div>
     </div>
-
-
-
-    <div id="footer" class="wrap" style="width:940px;position:relative;">
+    <div id="footer" class="wrap" style="width:940px;position:relative;top:-35px;z-index:-1">
       <div id="copyright">
         Except as noted, this content is
         licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
         Creative Commons Attribution 2.5</a>. For details and
-        restrictions, see the <a href="https://developer.android.com/license.html">Content
+        restrictions, see the <a href="/license.html">Content
         License</a>.
       </div>
     </div>
   </div> <!-- end landing-body-content -->
 
+  <script>
+  $("a.landing-down-arrow").on("click", function(e) {
+    $("body").animate({
+      scrollTop: $(".preview-hero").height() + 76
+    }, 1000, "easeOutQuint");
+    e.preventDefault();
+  });
+  </script>
     </div>
 
-      <div class="content-footer wrap" itemscope=""
-        itemtype="http://schema.org/SiteNavigationElement">
+      <div class="content-footer wrap"
+                    itemscope itemtype="http://schema.org/SiteNavigationElement">
 
         <div class="paging-links layout-content-col col-10">
 
         </div>
+        <div class="layout-content-col plus-container col-2" >
+          <style>#___plusone_0 {float:right !important;}</style>
+            <div class="g-plusone" data-size="medium"></div>
+
+        </div>
 
       </div>
 
@@ -571,7 +348,7 @@
   Except as noted, this content is
   licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
   Creative Commons Attribution 2.5</a>. For details and
-  restrictions, see the <a href="https://developer.android.com/license.html">Content
+  restrictions, see the <a href="/license.html">Content
   License</a>.
   </div>
 
@@ -582,50 +359,14 @@
 </div> <!-- end body-content -->
 
 
-<script>
-  var urlRoot = "http://storage.googleapis.com/androiddevelopers/finalpreview/";
-  function onDownload(link) {
-
-    $("#downloadForRealz").html("Download " + $(link).text());
-    $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
-    $("#tos").show();
-    $("#landing-wrapper").hide();
-
-    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-wrapper").fadeIn('fast');
-      ga('send', 'event', 'L Preview', 'System Image', $("#downloadForRealz").html());
-      location.hash = "";
-      // reset the checkbox for future downloads
-      $("#agree").trigger('click');
-      $("a#downloadForRealz").addClass('disabled');
-      return true;
-    } else {
-      $("label#agreeLabel").parent().stop().animate({color: "#258AAF"}, 200,
-        function() {$("label#agreeLabel").parent().stop().animate({color: "#222"}, 200)}
-      );
-      return false;
-    }
-  }
-
-</script>
-
+  <script src="https://developer.android.com/ytblogger_lists_unified.js" type="text/javascript"></script>
+  <script src="/jd_lists_unified.js" type="text/javascript"></script>
+  <script src="/jd_extras.js" type="text/javascript"></script>
+  <script src="/jd_collections.js" type="text/javascript"></script>
+  <script src="/jd_tag_helpers.js" type="text/javascript"></script>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/docs/html/preview/index.jd b/docs/html/preview/index.jd
new file mode 100644
index 0000000..a2d0b18
--- /dev/null
+++ b/docs/html/preview/index.jd
@@ -0,0 +1,60 @@
+page.title=M Developer Preview
+page.tags=preview
+meta.tags="preview"
+fullpage=true
+page.viewport_width=970
+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-1of2 col-push-1of2 dac-hero-figure">
+        <img class="dac-hero-image" src="/design/media/hero-material-design.png">
+      </div>
+      <div class="col-1of2 col-pull-1of2">
+        <h1 class="dac-hero-title">M Developer Preview</h1>
+        <p class="dac-hero-description">
+          Get ready for the next official release of the platform. Test your apps
+          and give us feedback!
+        </p>
+        <a class="dac-hero-cta" href="{@docRoot}preview/setup-sdk.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Set up the Preview SDK
+        </a><br>
+        <a class="dac-hero-cta" href="{@docRoot}preview/api-overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Review the API changes
+        </a><br>
+        <a class="dac-hero-cta" href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Report issues
+        </a><br>
+      </div>
+    </div>
+  </div>
+</section>
+
+<section class="dac-section dac-gray dac-small dac-invert"><div class="wrap">
+  <h2 class="norule">Latest</h2>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:develop/landing/latest"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
+
+
+<section class="dac-section"><div class="wrap">
+  <h1 class="dac-section-title">Resources</h1>
+  <div class="dac-section-subtitle">
+    Check out these resources to help you get started with the M Developer Preview.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/resources"
+       data-cardSizes="6x6"
+       data-maxResults="6"></div>
+</div></section>
+
+
diff --git a/docs/html/preview/license.jd b/docs/html/preview/license.jd
new file mode 100644
index 0000000..5ff52ba
--- /dev/null
+++ b/docs/html/preview/license.jd
@@ -0,0 +1,143 @@
+page.title=License Agreement
+
+@jd:body
+
+<p>
+To get started with the Android SDK Preview, you must agree to the following terms and conditions. 
+As described below, please note that this is a preview version of the Android SDK, subject to change, that you use at your own risk.  The Android SDK Preview is not a stable release, and may contain errors and defects that can result in serious damage to your computer systems, devices and data.
+</p>
+
+<p>
+This is the Android SDK Preview License Agreement (the “License Agreement”).
+</p>
+<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
+1. Introduction
+
+1.1 The Android SDK Preview (referred to in the License Agreement as the “Preview” and specifically including the Android system files, packaged APIs, and Preview library files, if and when they are made available) is licensed to you subject to the terms of the License Agreement. The License Agreement forms a legally binding contract between you and Google in relation to your use of the Preview.
+
+1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.
+
+1.3 "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>
\ No newline at end of file
diff --git a/docs/html/preview/overview.jd b/docs/html/preview/overview.jd
new file mode 100644
index 0000000..00f1cfe
--- /dev/null
+++ b/docs/html/preview/overview.jd
@@ -0,0 +1,7 @@
+page.title=Preview Program Overview
+
+@jd:body
+
+<p>
+  This is an overview of the program. Bacon.
+</p>
\ No newline at end of file
diff --git a/docs/html/preview/preview_toc.cs b/docs/html/preview/preview_toc.cs
new file mode 100644
index 0000000..fbf73f6
--- /dev/null
+++ b/docs/html/preview/preview_toc.cs
@@ -0,0 +1,37 @@
+<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>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html">
+      Set up the SDK</a></div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/api-overview.html">
+      API Overview</a></div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html">
+      Samples</a></div>
+  </li>
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/reference.html">
+      Reference</a></div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html">
+      Support</a></div>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html">
+      License Agreement</a></div>
+  </li>
+
+</ul>
diff --git a/docs/html/preview/reference.jd b/docs/html/preview/reference.jd
new file mode 100644
index 0000000..2d30c62
--- /dev/null
+++ b/docs/html/preview/reference.jd
@@ -0,0 +1,15 @@
+page.title=Reference
+
+@jd:body
+
+<p>
+  The reference documentation and API difference report for the Developer Preview are available in
+  this downloadable package.
+</p>
+
+<ul>
+  <li>
+    <a href="http://storage.googleapis.com/androiddevelopers/preview/m-developer-preview-reference.zip">
+      M Developer Preview reference</a>
+  </li>
+</ul>
\ No newline at end of file
diff --git a/docs/html/preview/samples.jd b/docs/html/preview/samples.jd
new file mode 100644
index 0000000..fb80e30
--- /dev/null
+++ b/docs/html/preview/samples.jd
@@ -0,0 +1,37 @@
+page.title=Samples
+
+@jd:body
+
+<p>
+  The following code samples are provided for the M Developer Preview. You can download them in the
+  Android SDK Manager under the <b>SDK Samples</b> component for the M Developer Preview.
+</p>
+
+<p class="note">
+  <strong>Note:</strong> These downloadable projects are designed
+   for use with Gradle and Android Studio.
+</p>
+
+
+<h3 id="id">Sample 1</h3>
+
+<p>
+  This sample demonstrates how to turducken frankfurter boudin, ham brisket alcatra kielbasa pork
+  loin pork. Jowl kielbasa kevin, sausage landjaeger corned beef cow spare ribs pastrami leberkas
+  drumstick.
+</p>
+
+<p><a href="#">Get it on GitHub</a></p>
+
+
+<h3 id="id">Sample 2</h3>
+
+<p>
+  This sample demonstrates how to turducken frankfurter boudin, ham brisket alcatra kielbasa pork
+  loin pork. Jowl kielbasa kevin, sausage landjaeger corned beef cow spare ribs pastrami leberkas
+  drumstick.
+</p>
+
+<p><a href="#">Get it on GitHub</a></p>
+
+
diff --git a/docs/html/preview/setup-sdk.jd b/docs/html/preview/setup-sdk.jd
new file mode 100644
index 0000000..11b009e
--- /dev/null
+++ b/docs/html/preview/setup-sdk.jd
@@ -0,0 +1,361 @@
+page.title=Setting Up the Preview SDK
+@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 installing the Android 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">
+
+<p>The Preview SDK is available from the Android SDK Manager.
+This document assumes that you are familiar with Android app development, such
+as using the Android SDK Manager and creating projects. If you're new to
+Android, see <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First
+App</a> training lesson first.</a></p>
+
+<h2 id="downloadSdk">Download the SDK</h2>
+
+<ol>
+  <li>Start the <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK Manager</a>.</li>
+  <li>In the <b>Tools</b> section, select the latest Android <b>SDK Tools</b>,
+    <b>Platform-tools</b>, and <b>Build-tools</b>.</li>
+  <li>Select everything under the <b>Android M Developer Preview</b> section and
+    click <b>Install packages...</b></li>
+  <li>Accept the Licensing Agreement for all of the packages and click
+    <b>Install</b>.</li>
+</ol>
+
+<p class="note"><strong>Note:</strong> The Eclipse ADT plug-in requires Java 7
+  if your compilation target is the M Developer Preview.</p>
+
+<h2 id="setupHardware">Set Up Hardware and AVDs</h2>
+
+<p>The Android M Developer Preview provides you with 32-bit system images
+to flash the following devices:
+</p>
+
+<ul>
+  <li>Nexus 5</li>
+  <li>Nexus 7 Wi-Fi (version 2, released in 2013)</li>
+</ul>
+
+<p>In addition, you also get the emulator system images, which includes
+experimental 64-bit system images along with standard 32-bit system images.
+</p>
+
+<p class="note"><strong>Note:</strong> The 64-bit system images require the
+Intel x86 Emulator Accelerator (HAXM) Rev.5 which can be downloaded from the
+<a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> <em>Extras</em>
+folder.</p>
+
+
+<h3 id="installImage">Install the M Preview System Image</h3>
+
+<p class="warning"><b>Warning:</b> This is a preview version of the Android
+system image, and is subject to change. Your use of this system image is
+governed by the Android SDK Preview License Agreement. The Android preview
+system image is not a stable release, and may contain errors and defects that
+can result in damage to your computer systems, devices, and data. The preview
+Android system image is not subject to the same testing as the factory OS and
+can cause your phone and installed services and applications to stop working.
+</p>
+
+
+<ol>
+  <li>Download and uncompress the Android Developer Preview package.
+    <table style="width:860px">
+      <tr>
+        <th scope="col">Device</th>
+        <th scope="col">Download</th>
+        <th scope="col">Checksum</th>
+      </tr>
+      <tr id="hammerhead">
+        <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
+        <td><a href="#top" onclick="onDownload(this)"
+          >hammerhead-lpv79-preview-ac1d8a8e.tgz</a></td>
+        <td>MD5: <code>5a6ae77217978cb7b958a240c2e80b57</code>
+        <br>SHA-1: <code>ac1d8a8e4f4a1dca5864dc733caa940bffc28616</code></td>
+      </tr>
+      <tr id="razor">
+        <td>Nexus 7 (Wifi) <br>"razor"</td>
+        <td><a href="#top" onclick="onDownload(this)"
+          >razor-lpv79-preview-d0ddf8ce.tgz</a></td>
+        <td>MD5: <code>b293a5d3a4e07beabebcc0be85ad68a2</code>
+        <br><nobr>SHA-1: <code>d0ddf8ce733ba2a34279cdff8827fd604762c2342d</nobr></td>
+      </tr>
+    </table>
+  </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>
+
+
+<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>
+
+
+<h3 id="setupAVD">Set up an AVD</h3>
+
+<p>You can set up <a href="{@docRoot}tools/devices/">Android Virtual Devices
+(AVD)</a> and use the emulator to build and test apps with the M Preview.</p>
+
+<p>To create an AVD with the AVD Manager:</p>
+
+<ol>
+  <li>Install the M Preview SDK in your development environment, as described
+      in <a href="{@docRoot}preview/setup-sdk.html">Setting Up the Preview
+      SDK.</a></li>
+  <li>Follow the steps in
+      <a href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD
+      Manager</a>. Use the following settings:
+    <ul>
+      <li><b>Device:</b> Either Nexus 5 or Nexus 7</li>
+      <li><b>Target:</b> <!-- Confirm exact text when we have final distro -->
+       Android M (Preview) - API Level M</li>
+    </ul>
+    <!-- Confirm this works when you can download image through SDK manager! -->
+  </li>
+</ol>
+
+
+<h2 id="createProject">Create a Project</h2>
+
+<p>Android Studio makes it easy to create a project for the M Developer Preview. Follow
+the steps described in <a href="{@docRoot}sdk/installing/create-project.html">Creating a
+Project</a>. In the <strong>Form Factors</strong> screen:</p>
+
+<ul>
+  <li>Check <strong>Phone and Tablet</strong>.</li>
+  <li>Select <strong>API 22+: Android M (Preview)</strong> in <strong>Minimum SDK</strong>.</li>
+</ul>
+
+<p>On the development environment, open the <code>build.gradle</code> file for your module
+and make sure that:</p>
+
+<ul>
+  <li><code>compileSdkVersion</code> is set to <code>'android-M'</code></li>
+  <li><code>minSdkVersion</code> is set to <code>'M'</code></li>
+  <li><code>targetSdkVersion</code> is set to <code>'M'</code></li>
+</ul>
+
+  </div><!-- landing -->
+
+</div><!-- relative wrapper -->
+
+
+
+<script>
+  var urlRoot = "http://storage.googleapis.com/androiddevelopers/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 {
+      $("label#agreeLabel").parent().stop().animate({color: "#258AAF"}, 200,
+        function() {$("label#agreeLabel").parent().stop().animate({color: "#222"}, 200)}
+      );
+      return false;
+    }
+  }
+
+  $(window).hashchange( function(){
+    if (location.hash == "") {
+      location.reload();
+    }
+  });
+
+</script>
diff --git a/docs/html/preview/support.jd b/docs/html/preview/support.jd
new file mode 100644
index 0000000..4be6dd7
--- /dev/null
+++ b/docs/html/preview/support.jd
@@ -0,0 +1,67 @@
+page.title=Support
+
+@jd:body
+
+<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.
+</p>
+
+<p>
+  For more support, join the
+  <a href="https://plus.google.com/communities/101985907812750684586">M Developer
+  Preview Google+ community</a> to discuss your development experiences.
+</p>
+
+<h2 id="release-notes">Release Notes</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>
+</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>
+
+  <div class="toggle-content-toggleme">
+
+    <dl>
+    <dt>Initial release.</dt>
+    </dl>
+  </div>
+</div>
+
+
diff --git a/docs/html/reference/renderscript/annotated.html b/docs/html/reference/renderscript/annotated.html
deleted file mode 100644
index 9ddbc81..0000000
--- a/docs/html/reference/renderscript/annotated.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Data Structures</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">Data Structures</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"> </div><table>
-  <tr><td class="indexkey"><a class="el" href="structrs__allocation.html">rs_allocation</a></td><td class="indexvalue">Opaque handle to a RenderScript allocation </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__element.html">rs_element</a></td><td class="indexvalue">Opaque handle to a RenderScript element </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__font.html">rs_font</a></td><td class="indexvalue">Opaque handle to a RenderScript font object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a></td><td class="indexvalue">2x2 float matrix </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a></td><td class="indexvalue">3x3 float matrix </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a></td><td class="indexvalue">4x4 float matrix </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__mesh.html">rs_mesh</a></td><td class="indexvalue">Opaque handle to a RenderScript mesh object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__path.html">rs_path</a></td><td class="indexvalue">Opaque handle to a RenderScript Path object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramFragment object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__program__raster.html">rs_program_raster</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramRaster object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__program__store.html">rs_program_store</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramStore object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramVertex object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__sampler.html">rs_sampler</a></td><td class="indexvalue">Opaque handle to a RenderScript sampler object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__script.html">rs_script</a></td><td class="indexvalue">Opaque handle to a RenderScript script object </td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__script__call.html">rs_script_call</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__tm.html">rs_tm</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="structrs__type.html">rs_type</a></td><td class="indexvalue">Opaque handle to a RenderScript type </td></tr>
-</table>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/doxygen.css b/docs/html/reference/renderscript/doxygen.css
deleted file mode 100644
index 22c7b5c..0000000
--- a/docs/html/reference/renderscript/doxygen.css
+++ /dev/null
@@ -1,946 +0,0 @@
-/* The standard CSS for doxygen */
-
-body, table, div, p, dl {
-	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
-	font-size: 12px;
-}
-
-/* @group Heading Levels */
-
-h1 {
-	font-size: 150%;
-}
-
-.title {
-	font-size: 150%;
-	font-weight: bold;
-	margin: 10px 2px;
-}
-
-h2 {
-	font-size: 120%;
-}
-
-h3 {
-	font-size: 100%;
-}
-
-dt {
-	font-weight: bold;
-}
-
-div.multicol {
-	-moz-column-gap: 1em;
-	-webkit-column-gap: 1em;
-	-moz-column-count: 3;
-	-webkit-column-count: 3;
-}
-
-p.startli, p.startdd, p.starttd {
-	margin-top: 2px;
-}
-
-p.endli {
-	margin-bottom: 0px;
-}
-
-p.enddd {
-	margin-bottom: 4px;
-}
-
-p.endtd {
-	margin-bottom: 2px;
-}
-
-/* @end */
-
-caption {
-	font-weight: bold;
-}
-
-span.legend {
-        font-size: 70%;
-        text-align: center;
-}
-
-h3.version {
-        font-size: 90%;
-        text-align: center;
-}
-
-div.qindex, div.navtab{
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-}
-
-div.qindex, div.navpath {
-	width: 100%;
-	line-height: 140%;
-}
-
-div.navtab {
-	margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
-	color: #3D578C;
-	font-weight: normal;
-	text-decoration: none;
-}
-
-.contents a:visited {
-	color: #4665A2;
-}
-
-a:hover {
-	text-decoration: underline;
-}
-
-a.qindex {
-	font-weight: bold;
-}
-
-a.qindexHL {
-	font-weight: bold;
-	background-color: #9CAFD4;
-	color: #ffffff;
-	border: 1px double #869DCA;
-}
-
-.contents a.qindexHL:visited {
-        color: #ffffff;
-}
-
-a.el {
-	font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code {
-	color: #4665A2;
-}
-
-a.codeRef {
-	color: #4665A2;
-}
-
-/* @end */
-
-dl.el {
-	margin-left: -1cm;
-}
-
-.fragment {
-	font-family: monospace, fixed;
-	font-size: 105%;
-}
-
-pre.fragment {
-	border: 1px solid #C4CFE5;
-	background-color: #FBFCFD;
-	padding: 4px 6px;
-	margin: 4px 8px 4px 2px;
-	overflow: auto;
-	word-wrap: break-word;
-	font-size:  9pt;
-	line-height: 125%;
-}
-
-div.ah {
-	background-color: black;
-	font-weight: bold;
-	color: #ffffff;
-	margin-bottom: 3px;
-	margin-top: 3px;
-	padding: 0.2em;
-	border: solid thin #333;
-	border-radius: 0.5em;
-	-webkit-border-radius: .5em;
-	-moz-border-radius: .5em;
-	box-shadow: 2px 2px 3px #999;
-	-webkit-box-shadow: 2px 2px 3px #999;
-	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
-	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
-}
-
-div.groupHeader {
-	margin-left: 16px;
-	margin-top: 12px;
-	font-weight: bold;
-}
-
-div.groupText {
-	margin-left: 16px;
-	font-style: italic;
-}
-
-body {
-	background-color: white;
-	color: black;
-        margin: 0;
-}
-
-div.contents {
-	margin-top: 10px;
-	margin-left: 8px;
-	margin-right: 8px;
-}
-
-td.indexkey {
-	background-color: #EBEFF6;
-	font-weight: bold;
-	border: 1px solid #C4CFE5;
-	margin: 2px 0px 2px 0;
-	padding: 2px 10px;
-}
-
-td.indexvalue {
-	background-color: #EBEFF6;
-	border: 1px solid #C4CFE5;
-	padding: 2px 10px;
-	margin: 2px 0px;
-}
-
-tr.memlist {
-	background-color: #EEF1F7;
-}
-
-p.formulaDsp {
-	text-align: center;
-}
-
-img.formulaDsp {
-	
-}
-
-img.formulaInl {
-	vertical-align: middle;
-}
-
-div.center {
-	text-align: center;
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding: 0px;
-}
-
-div.center img {
-	border: 0px;
-}
-
-address.footer {
-	text-align: right;
-	padding-right: 12px;
-}
-
-img.footer {
-	border: 0px;
-	vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
-	color: #008000
-}
-
-span.keywordtype {
-	color: #604020
-}
-
-span.keywordflow {
-	color: #e08000
-}
-
-span.comment {
-	color: #800000
-}
-
-span.preprocessor {
-	color: #806020
-}
-
-span.stringliteral {
-	color: #002080
-}
-
-span.charliteral {
-	color: #008080
-}
-
-span.vhdldigit { 
-	color: #ff00ff 
-}
-
-span.vhdlchar { 
-	color: #000000 
-}
-
-span.vhdlkeyword { 
-	color: #700070 
-}
-
-span.vhdllogic { 
-	color: #ff0000 
-}
-
-/* @end */
-
-/*
-.search {
-	color: #003399;
-	font-weight: bold;
-}
-
-form.search {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-
-input.search {
-	font-size: 75%;
-	color: #000080;
-	font-weight: normal;
-	background-color: #e8eef2;
-}
-*/
-
-td.tiny {
-	font-size: 75%;
-}
-
-.dirtab {
-	padding: 4px;
-	border-collapse: collapse;
-	border: 1px solid #A3B4D7;
-}
-
-th.dirtab {
-	background: #EBEFF6;
-	font-weight: bold;
-}
-
-hr {
-	height: 0px;
-	border: none;
-	border-top: 1px solid #4A6AAA;
-}
-
-hr.footer {
-	height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
-	border-spacing: 0px;
-	padding: 0px;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: #F9FAFC;
-	border: none;
-	margin: 4px;
-	padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
-	padding: 0px 8px 4px 8px;
-	color: #555;
-}
-
-.memItemLeft, .memItemRight, .memTemplParams {
-	border-top: 1px solid #C4CFE5;
-}
-
-.memItemLeft, .memTemplItemLeft {
-        white-space: nowrap;
-}
-
-.memItemRight {
-	width: 100%;
-}
-
-.memTemplParams {
-	color: #4665A2;
-        white-space: nowrap;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtemplate {
-	font-size: 80%;
-	color: #4665A2;
-	font-weight: normal;
-	margin-left: 9px;
-}
-
-.memnav {
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-	margin: 2px;
-	margin-right: 15px;
-	padding: 2px;
-}
-
-.mempage {
-	width: 100%;
-}
-
-.memitem {
-	padding: 0;
-	margin-bottom: 10px;
-	margin-right: 5px;
-}
-
-.memname {
-        white-space: nowrap;
-        font-weight: bold;
-        margin-left: 6px;
-}
-
-.memproto, dl.reflist dt {
-        border-top: 1px solid #A8B8D9;
-        border-left: 1px solid #A8B8D9;
-        border-right: 1px solid #A8B8D9;
-        padding: 6px 0px 6px 0px;
-        color: #253555;
-        font-weight: bold;
-        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-        /* opera specific markup */
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        border-top-right-radius: 8px;
-        border-top-left-radius: 8px;
-        /* firefox specific markup */
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        -moz-border-radius-topright: 8px;
-        -moz-border-radius-topleft: 8px;
-        /* webkit specific markup */
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        -webkit-border-top-right-radius: 8px;
-        -webkit-border-top-left-radius: 8px;
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
-
-}
-
-.memdoc, dl.reflist dd {
-        border-bottom: 1px solid #A8B8D9;      
-        border-left: 1px solid #A8B8D9;      
-        border-right: 1px solid #A8B8D9; 
-        padding: 2px 5px;
-        background-color: #FBFCFD;
-        border-top-width: 0;
-        /* opera specific markup */
-        border-bottom-left-radius: 8px;
-        border-bottom-right-radius: 8px;
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        /* firefox specific markup */
-        -moz-border-radius-bottomleft: 8px;
-        -moz-border-radius-bottomright: 8px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
-        /* webkit specific markup */
-        -webkit-border-bottom-left-radius: 8px;
-        -webkit-border-bottom-right-radius: 8px;
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
-}
-
-dl.reflist dt {
-        padding: 5px;
-}
-
-dl.reflist dd {
-        margin: 0px 0px 10px 0px;
-        padding: 5px;
-}
-
-.paramkey {
-	text-align: right;
-}
-
-.paramtype {
-	white-space: nowrap;
-}
-
-.paramname {
-	color: #602020;
-	white-space: nowrap;
-}
-.paramname em {
-	font-style: normal;
-}
-
-.params, .retval, .exception, .tparams {
-        border-spacing: 6px 2px;
-}       
-
-.params .paramname, .retval .paramname {
-        font-weight: bold;
-        vertical-align: top;
-}
-        
-.params .paramtype {
-        font-style: italic;
-        vertical-align: top;
-}       
-        
-.params .paramdir {
-        font-family: "courier new",courier,monospace;
-        vertical-align: top;
-}
-
-
-
-
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
-
-.ftvtree {
-	font-family: sans-serif;
-	margin: 0px;
-}
-
-/* these are for tree view when used as main index */
-
-.directory {
-	font-size: 9pt;
-	font-weight: bold;
-	margin: 5px;
-}
-
-.directory h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
-}
-
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice.  Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
-
-/*
-.directory h3.swap {
-	height: 61px;
-	background-repeat: no-repeat;
-	background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
-	display: none;
-}
-*/
-
-.directory > h3 {
-	margin-top: 0;
-}
-
-.directory p {
-	margin: 0px;
-	white-space: nowrap;
-}
-
-.directory div {
-	display: none;
-	margin: 0px;
-}
-
-.directory img {
-	vertical-align: -30%;
-}
-
-/* these are for tree view when not used as main index */
-
-.directory-alt {
-	font-size: 100%;
-	font-weight: bold;
-}
-
-.directory-alt h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
-}
-
-.directory-alt > h3 {
-	margin-top: 0;
-}
-
-.directory-alt p {
-	margin: 0px;
-	white-space: nowrap;
-}
-
-.directory-alt div {
-	display: none;
-	margin: 0px;
-}
-
-.directory-alt img {
-	vertical-align: -30%;
-}
-
-/* @end */
-
-div.dynheader {
-        margin-top: 8px;
-}
-
-address {
-	font-style: normal;
-	color: #2A3D61;
-}
-
-table.doxtable {
-	border-collapse:collapse;
-}
-
-table.doxtable td, table.doxtable th {
-	border: 1px solid #2D4068;
-	padding: 3px 7px 2px;
-}
-
-table.doxtable th {
-	background-color: #374F7F;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-	text-align:left;
-}
-
-table.fieldtable {
-        width: 100%;
-        margin-bottom: 10px;
-        border: 1px solid #A8B8D9;
-        border-spacing: 0px;
-        -moz-border-radius: 4px;
-        -webkit-border-radius: 4px;
-        border-radius: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
-        padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
-        white-space: nowrap;
-        border-right: 1px solid #A8B8D9;
-        border-bottom: 1px solid #A8B8D9;
-        vertical-align: top;
-}
-
-.fieldtable td.fielddoc {
-        border-bottom: 1px solid #A8B8D9;
-        width: 100%;
-}
-
-.fieldtable tr:last-child td {
-        border-bottom: none;
-}
-
-.fieldtable th {
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
-        font-size: 90%;
-        color: #253555;
-        padding-bottom: 4px;
-        padding-top: 5px;
-        text-align:left;
-        -moz-border-radius-topleft: 4px;
-        -moz-border-radius-topright: 4px;
-        -webkit-border-top-left-radius: 4px;
-        -webkit-border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        border-bottom: 1px solid #A8B8D9;
-}
-
-
-.tabsearch {
-	top: 0px;
-	left: 10px;
-	height: 36px;
-	background-image: url('tab_b.png');
-	z-index: 101;
-	overflow: hidden;
-	font-size: 13px;
-}
-
-.navpath ul
-{
-	font-size: 11px;
-	background-image:url('tab_b.png');
-	background-repeat:repeat-x;
-	height:30px;
-	line-height:30px;
-	color:#8AA0CC;
-	border:solid 1px #C2CDE4;
-	overflow:hidden;
-	margin:0px;
-	padding:0px;
-}
-
-.navpath li
-{
-	list-style-type:none;
-	float:left;
-	padding-left:10px;
-	padding-right:15px;
-	background-image:url('bc_s.png');
-	background-repeat:no-repeat;
-	background-position:right;
-	color:#364D7C;
-}
-
-.navpath li.navelem a
-{
-	height:32px;
-	display:block;
-	text-decoration: none;
-	outline: none;
-}
-
-.navpath li.navelem a:hover
-{
-	color:#6884BD;
-}
-
-.navpath li.footer
-{
-        list-style-type:none;
-        float:right;
-        padding-left:10px;
-        padding-right:15px;
-        background-image:none;
-        background-repeat:no-repeat;
-        background-position:right;
-        color:#364D7C;
-        font-size: 8pt;
-}
-
-
-div.summary
-{
-	float: right;
-	font-size: 8pt;
-	padding-right: 5px;
-	width: 50%;
-	text-align: right;
-}       
-
-div.summary a
-{
-	white-space: nowrap;
-}
-
-div.ingroups
-{
-	margin-left: 5px;
-	font-size: 8pt;
-	padding-left: 5px;
-	width: 50%;
-	text-align: left;
-}
-
-div.ingroups a
-{
-	white-space: nowrap;
-}
-
-div.header
-{
-        background-image:url('nav_h.png');
-        background-repeat:repeat-x;
-	background-color: #F9FAFC;
-	margin:  0px;
-	border-bottom: 1px solid #C4CFE5;
-}
-
-div.headertitle
-{
-	padding: 5px 5px 5px 7px;
-}
-
-dl
-{
-        padding: 0 0 0 10px;
-}
-
-dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
-{
-        border-left:4px solid;
-        padding: 0 0 0 6px;
-}
-
-dl.note
-{
-        border-color: #D0C000;
-}
-
-dl.warning, dl.attention
-{
-        border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant
-{
-        border-color: #00D000;
-}
-
-dl.deprecated
-{
-        border-color: #505050;
-}
-
-dl.todo
-{
-        border-color: #00C0E0;
-}
-
-dl.test
-{
-        border-color: #3030E0;
-}
-
-dl.bug
-{
-        border-color: #C08050;
-}
-
-#projectlogo
-{
-	text-align: center;
-	vertical-align: bottom;
-	border-collapse: separate;
-}
- 
-#projectlogo img
-{ 
-	border: 0px none;
-}
- 
-#projectname
-{
-	font: 300% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 2px 0px;
-}
-    
-#projectbrief
-{
-	font: 120% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#projectnumber
-{
-	font: 50% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#titlearea
-{
-	padding: 0px;
-	margin: 0px;
-	width: 100%;
-	border-bottom: 1px solid #5373B4;
-}
-
-.image
-{
-        text-align: center;
-}
-
-.dotgraph
-{
-        text-align: center;
-}
-
-.mscgraph
-{
-        text-align: center;
-}
-
-.caption
-{
-	font-weight: bold;
-}
-
-div.zoom
-{
-	border: 1px solid #90A5CE;
-}
-
-dl.citelist {
-        margin-bottom:50px;
-}
-
-dl.citelist dt {
-        color:#334975;
-        float:left;
-        font-weight:bold;
-        margin-right:10px;
-        padding:5px;
-}
-
-dl.citelist dd {
-        margin:2px 0;
-        padding:5px 0;
-}
-
-@media print
-{
-  #top { display: none; }
-  #side-nav { display: none; }
-  #nav-path { display: none; }
-  body { overflow:visible; }
-  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
-  .summary { display: none; }
-  .memitem { page-break-inside: avoid; }
-  #doc-content
-  {
-    margin-left:0 !important;
-    height:auto !important;
-    width:auto !important;
-    overflow:inherit;
-    display:inline;
-  }
-  pre.fragment
-  {
-    overflow: visible;
-    text-wrap: unrestricted;
-    white-space: -moz-pre-wrap; /* Moz */
-    white-space: -pre-wrap; /* Opera 4-6 */
-    white-space: -o-pre-wrap; /* Opera 7 */
-    white-space: pre-wrap; /* CSS3  */
-    word-wrap: break-word; /* IE 5.5+ */
-  }
-}
-
diff --git a/docs/html/reference/renderscript/globals.html b/docs/html/reference/renderscript/globals.html
deleted file mode 100644
index d149a0d..0000000
--- a/docs/html/reference/renderscript/globals.html
+++ /dev/null
@@ -1,919 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li class="current"><a href="globals.html"><span>All</span></a></li>
-      <li><a href="globals_func.html"><span>Functions</span></a></li>
-      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="#index_a"><span>a</span></a></li>
-      <li><a href="#index_c"><span>c</span></a></li>
-      <li><a href="#index_d"><span>d</span></a></li>
-      <li><a href="#index_e"><span>e</span></a></li>
-      <li><a href="#index_f"><span>f</span></a></li>
-      <li><a href="#index_h"><span>h</span></a></li>
-      <li><a href="#index_i"><span>i</span></a></li>
-      <li><a href="#index_l"><span>l</span></a></li>
-      <li><a href="#index_m"><span>m</span></a></li>
-      <li><a href="#index_n"><span>n</span></a></li>
-      <li><a href="#index_p"><span>p</span></a></li>
-      <li><a href="#index_r"><span>r</span></a></li>
-      <li><a href="#index_s"><span>s</span></a></li>
-      <li><a href="#index_t"><span>t</span></a></li>
-      <li><a href="#index_u"><span>u</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock"> </div>
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>abs()
-: <a class="el" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">rs_cl.rsh</a>
-</li>
-<li>acos()
-: <a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">rs_cl.rsh</a>
-</li>
-<li>acosh()
-: <a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">rs_cl.rsh</a>
-</li>
-<li>acospi()
-: <a class="el" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">rs_cl.rsh</a>
-</li>
-<li>asin()
-: <a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">rs_cl.rsh</a>
-</li>
-<li>asinh()
-: <a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">rs_cl.rsh</a>
-</li>
-<li>asinpi()
-: <a class="el" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">rs_cl.rsh</a>
-</li>
-<li>atan()
-: <a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">rs_cl.rsh</a>
-</li>
-<li>atan2()
-: <a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">rs_cl.rsh</a>
-</li>
-<li>atan2pi()
-: <a class="el" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">rs_cl.rsh</a>
-</li>
-<li>atanh()
-: <a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">rs_cl.rsh</a>
-</li>
-<li>atanpi()
-: <a class="el" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>cbrt()
-: <a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">rs_cl.rsh</a>
-</li>
-<li>ceil()
-: <a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">rs_cl.rsh</a>
-</li>
-<li>char2
-: <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">rs_types.rsh</a>
-</li>
-<li>char3
-: <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">rs_types.rsh</a>
-</li>
-<li>char4
-: <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">rs_types.rsh</a>
-</li>
-<li>clamp()
-: <a class="el" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">rs_cl.rsh</a>
-</li>
-<li>clz()
-: <a class="el" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">rs_cl.rsh</a>
-</li>
-<li>convert_char2()
-: <a class="el" href="rs__cl_8rsh.html#a67421c4b17df15a1c726d912770e5ca4">rs_cl.rsh</a>
-</li>
-<li>convert_float2()
-: <a class="el" href="rs__cl_8rsh.html#a1ad62d449c1e3548573c2f9c1a5cb13a">rs_cl.rsh</a>
-</li>
-<li>convert_int2()
-: <a class="el" href="rs__cl_8rsh.html#a9d2e4b8f0f25a7ccaed05248edc21f06">rs_cl.rsh</a>
-</li>
-<li>convert_short2()
-: <a class="el" href="rs__cl_8rsh.html#a83e89db1940f3190fbec5bd823a99fc5">rs_cl.rsh</a>
-</li>
-<li>convert_uchar2()
-: <a class="el" href="rs__cl_8rsh.html#a833bb5476683ec5692feaf0cd5dcdd80">rs_cl.rsh</a>
-</li>
-<li>convert_uint2()
-: <a class="el" href="rs__cl_8rsh.html#a01ff256469203ba33ba0f220b54e70d1">rs_cl.rsh</a>
-</li>
-<li>convert_ushort2()
-: <a class="el" href="rs__cl_8rsh.html#a6862ea6ddfba8a59796bc681a544fb4f">rs_cl.rsh</a>
-</li>
-<li>copysign()
-: <a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">rs_cl.rsh</a>
-</li>
-<li>cos()
-: <a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">rs_cl.rsh</a>
-</li>
-<li>cosh()
-: <a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">rs_cl.rsh</a>
-</li>
-<li>cospi()
-: <a class="el" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">rs_cl.rsh</a>
-</li>
-<li>cross()
-: <a class="el" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>degrees()
-: <a class="el" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">rs_cl.rsh</a>
-</li>
-<li>distance()
-: <a class="el" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">rs_cl.rsh</a>
-</li>
-<li>dot()
-: <a class="el" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">rs_cl.rsh</a>
-</li>
-<li>double2
-: <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">rs_types.rsh</a>
-</li>
-<li>double3
-: <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">rs_types.rsh</a>
-</li>
-<li>double4
-: <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>erf()
-: <a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">rs_cl.rsh</a>
-</li>
-<li>erfc()
-: <a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">rs_cl.rsh</a>
-</li>
-<li>exp()
-: <a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">rs_cl.rsh</a>
-</li>
-<li>exp10()
-: <a class="el" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">rs_cl.rsh</a>
-</li>
-<li>exp2()
-: <a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">rs_cl.rsh</a>
-</li>
-<li>expm1()
-: <a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>fabs()
-: <a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">rs_cl.rsh</a>
-</li>
-<li>fast_distance()
-: <a class="el" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">rs_cl.rsh</a>
-</li>
-<li>fast_length()
-: <a class="el" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">rs_cl.rsh</a>
-</li>
-<li>fast_normalize()
-: <a class="el" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">rs_cl.rsh</a>
-</li>
-<li>fdim()
-: <a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">rs_cl.rsh</a>
-</li>
-<li>float2
-: <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">rs_types.rsh</a>
-</li>
-<li>float3
-: <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">rs_types.rsh</a>
-</li>
-<li>float4
-: <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">rs_types.rsh</a>
-</li>
-<li>floor()
-: <a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">rs_cl.rsh</a>
-</li>
-<li>fma()
-: <a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">rs_cl.rsh</a>
-</li>
-<li>fmax()
-: <a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">rs_cl.rsh</a>
-</li>
-<li>fmin()
-: <a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">rs_cl.rsh</a>
-</li>
-<li>fmod()
-: <a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">rs_cl.rsh</a>
-</li>
-<li>fract()
-: <a class="el" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">rs_cl.rsh</a>
-</li>
-<li>frexp()
-: <a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>half_recip()
-: <a class="el" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">rs_cl.rsh</a>
-</li>
-<li>half_rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">rs_cl.rsh</a>
-</li>
-<li>half_sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">rs_cl.rsh</a>
-</li>
-<li>hypot()
-: <a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>ilogb()
-: <a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">rs_cl.rsh</a>
-</li>
-<li>int16_t
-: <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">rs_types.rsh</a>
-</li>
-<li>int2
-: <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">rs_types.rsh</a>
-</li>
-<li>int3
-: <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">rs_types.rsh</a>
-</li>
-<li>int32_t
-: <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">rs_types.rsh</a>
-</li>
-<li>int4
-: <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">rs_types.rsh</a>
-</li>
-<li>int64_t
-: <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">rs_types.rsh</a>
-</li>
-<li>int8_t
-: <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>ldexp()
-: <a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">rs_cl.rsh</a>
-</li>
-<li>length()
-: <a class="el" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">rs_cl.rsh</a>
-</li>
-<li>lgamma()
-: <a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">rs_cl.rsh</a>
-</li>
-<li>log()
-: <a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">rs_cl.rsh</a>
-</li>
-<li>log10()
-: <a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">rs_cl.rsh</a>
-</li>
-<li>log1p()
-: <a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">rs_cl.rsh</a>
-</li>
-<li>log2()
-: <a class="el" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">rs_cl.rsh</a>
-</li>
-<li>logb()
-: <a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">rs_cl.rsh</a>
-</li>
-<li>long2
-: <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">rs_types.rsh</a>
-</li>
-<li>long3
-: <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">rs_types.rsh</a>
-</li>
-<li>long4
-: <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>mad()
-: <a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">rs_cl.rsh</a>
-</li>
-<li>max()
-: <a class="el" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">rs_cl.rsh</a>
-</li>
-<li>min()
-: <a class="el" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">rs_cl.rsh</a>
-</li>
-<li>mix()
-: <a class="el" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">rs_cl.rsh</a>
-</li>
-<li>modf()
-: <a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>native_exp()
-: <a class="el" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">rs_cl.rsh</a>
-</li>
-<li>native_exp10()
-: <a class="el" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">rs_cl.rsh</a>
-</li>
-<li>native_exp2()
-: <a class="el" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">rs_cl.rsh</a>
-</li>
-<li>nextafter()
-: <a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">rs_cl.rsh</a>
-</li>
-<li>normalize()
-: <a class="el" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>pow()
-: <a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">rs_cl.rsh</a>
-</li>
-<li>pown()
-: <a class="el" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">rs_cl.rsh</a>
-</li>
-<li>powr()
-: <a class="el" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>radians()
-: <a class="el" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">rs_cl.rsh</a>
-</li>
-<li>remainder()
-: <a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">rs_cl.rsh</a>
-</li>
-<li>rint()
-: <a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rs_cl.rsh</a>
-</li>
-<li>rootn()
-: <a class="el" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rs_cl.rsh</a>
-</li>
-<li>round()
-: <a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">rs_cl.rsh</a>
-</li>
-<li>rs_allocation_cubemap_face
-: <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_types.rsh</a>
-</li>
-<li>rs_allocation_usage_type
-: <a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_types.rsh</a>
-</li>
-<li>rs_data_kind
-: <a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_types.rsh</a>
-</li>
-<li>rs_data_type
-: <a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_types.rsh</a>
-</li>
-<li>rs_depth_func
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_ALWAYS
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_EQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_GEQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_GREATER
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_INVALID
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_LEQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_LESS
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_NOTEQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">rs_types.rsh</a>
-</li>
-<li>rs_for_each_strategy
-: <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_core.rsh</a>
-</li>
-<li>rs_primitive
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_INVALID
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_LINE
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_LINE_STRIP
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_POINT
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_TRIANGLE
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_TRIANGLE_FAN
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_TRIANGLE_STRIP
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">rs_types.rsh</a>
-</li>
-<li>rs_quaternion
-: <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_types.rsh</a>
-</li>
-<li>rs_script_call_t
-: <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_core.rsh</a>
-</li>
-<li>rs_time_t
-: <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time.rsh</a>
-</li>
-<li>rsAllocationCopy1DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationCopy2DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimFaces()
-: <a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimLOD()
-: <a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimX()
-: <a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimY()
-: <a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimZ()
-: <a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetElement()
-: <a class="el" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoReceive()
-: <a class="el" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoSend()
-: <a class="el" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rs_allocation.rsh</a>
-</li>
-<li>rsAtomicAdd()
-: <a class="el" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicAnd()
-: <a class="el" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicCas()
-: <a class="el" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicDec()
-: <a class="el" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicInc()
-: <a class="el" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMax()
-: <a class="el" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMin()
-: <a class="el" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicOr()
-: <a class="el" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicSub()
-: <a class="el" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicXor()
-: <a class="el" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rs_atomic.rsh</a>
-</li>
-<li>rsClamp()
-: <a class="el" href="rs__math_8rsh.html#a40eddbf6c2462eada177a581a49bd3c6">rs_math.rsh</a>
-</li>
-<li>rsClearObject()
-: <a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rs_object.rsh</a>
-</li>
-<li>rsDebug()
-: <a class="el" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rs_debug.rsh</a>
-</li>
-<li>rsElementGetBytesSize()
-: <a class="el" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataKind()
-: <a class="el" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataType()
-: <a class="el" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElement()
-: <a class="el" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementArraySize()
-: <a class="el" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementCount()
-: <a class="el" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementName()
-: <a class="el" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementNameLength()
-: <a class="el" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementOffsetBytes()
-: <a class="el" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rs_element.rsh</a>
-</li>
-<li>rsElementGetVectorSize()
-: <a class="el" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rs_element.rsh</a>
-</li>
-<li>rsExtractFrustumPlanes()
-: <a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rs_math.rsh</a>
-</li>
-<li>rsForEach()
-: <a class="el" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rs_core.rsh</a>
-</li>
-<li>rsFrac()
-: <a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rs_math.rsh</a>
-</li>
-<li>rsGetAllocation()
-: <a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rs_allocation.rsh</a>
-</li>
-<li>rsGetDt()
-: <a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rs_time.rsh</a>
-</li>
-<li>rsGetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_U()
-: <a class="el" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_V()
-: <a class="el" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_Y()
-: <a class="el" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rs_allocation.rsh</a>
-</li>
-<li>rsgMeshGetIndexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitive()
-: <a class="el" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitiveCount()
-: <a class="el" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocationCount()
-: <a class="el" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rs_mesh.rsh</a>
-</li>
-<li>rsgProgramRasterGetCullMode()
-: <a class="el" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rs_program.rsh</a>
-</li>
-<li>rsgProgramRasterIsPointSpriteEnabled()
-: <a class="el" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendDstFunc()
-: <a class="el" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendSrcFunc()
-: <a class="el" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetDepthFunc()
-: <a class="el" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskAlphaEnabled()
-: <a class="el" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskBlueEnabled()
-: <a class="el" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskGreenEnabled()
-: <a class="el" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskRedEnabled()
-: <a class="el" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDepthMaskEnabled()
-: <a class="el" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDitherEnabled()
-: <a class="el" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rs_program.rsh</a>
-</li>
-<li>rsIsObject()
-: <a class="el" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rs_object.rsh</a>
-</li>
-<li>rsIsSphereInFrustum()
-: <a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rs_math.rsh</a>
-</li>
-<li>rsLocaltime()
-: <a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rs_time.rsh</a>
-</li>
-<li>rsMatrixGet()
-: <a class="el" href="rs__matrix_8rsh.html#a22e983b67d3089c5cb97032e249ca335">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverse()
-: <a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverseTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoad()
-: <a class="el" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadFrustum()
-: <a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadIdentity()
-: <a class="el" href="rs__matrix_8rsh.html#a5b31e83553efa947db2198674d5db043">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#a78872343ea6a5c1a846160ccdc4add52">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadOrtho()
-: <a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadPerspective()
-: <a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadRotate()
-: <a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadScale()
-: <a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#a88ae2ed203769cb4a7917f84f6c1a2e2">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixRotate()
-: <a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixScale()
-: <a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixSet()
-: <a class="el" href="rs__matrix_8rsh.html#ab69543f85a673f23fbb5f893e5824395">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rs_matrix.rsh</a>
-</li>
-<li>rsPackColorTo8888()
-: <a class="el" href="rs__math_8rsh.html#ac30a8c020eade2b57fd5966cb7c8665e">rs_math.rsh</a>
-</li>
-<li>rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rs_cl.rsh</a>
-</li>
-<li>rsQuaternionAdd()
-: <a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionConjugate()
-: <a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionDot()
-: <a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionGetMatrixUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotate()
-: <a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotateUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionMultiply()
-: <a class="el" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionNormalize()
-: <a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSet()
-: <a class="el" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSlerp()
-: <a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rs_quaternion.rsh</a>
-</li>
-<li>rsRand()
-: <a class="el" href="rs__math_8rsh.html#a84b2e7468314873b3aa02969e310d9e4">rs_math.rsh</a>
-</li>
-<li>rsSample()
-: <a class="el" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rs_allocation.rsh</a>
-</li>
-<li>rsSamplerGetAnisotropy()
-: <a class="el" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMagnification()
-: <a class="el" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMinification()
-: <a class="el" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapS()
-: <a class="el" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapT()
-: <a class="el" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rs_sampler.rsh</a>
-</li>
-<li>rsSendToClient()
-: <a class="el" href="rs__core_8rsh.html#a508003cadad2d37d41e2de7e9226f859">rs_core.rsh</a>
-</li>
-<li>rsSendToClientBlocking()
-: <a class="el" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rs_core.rsh</a>
-</li>
-<li>rsSetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a351627f335b9a091a5152db7ac9134dc">rs_allocation.rsh</a>
-</li>
-<li>rsSetObject()
-: <a class="el" href="rs__object_8rsh.html#a5132f90b4aaf8d2e35e6ad021fb08175">rs_object.rsh</a>
-</li>
-<li>rsTime()
-: <a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rs_time.rsh</a>
-</li>
-<li>rsUnpackColor8888()
-: <a class="el" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rs_math.rsh</a>
-</li>
-<li>rsUptimeMillis()
-: <a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rs_time.rsh</a>
-</li>
-<li>rsUptimeNanos()
-: <a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rs_time.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>short2
-: <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">rs_types.rsh</a>
-</li>
-<li>short3
-: <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">rs_types.rsh</a>
-</li>
-<li>short4
-: <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">rs_types.rsh</a>
-</li>
-<li>sign()
-: <a class="el" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">rs_cl.rsh</a>
-</li>
-<li>sin()
-: <a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">rs_cl.rsh</a>
-</li>
-<li>sincos()
-: <a class="el" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">rs_cl.rsh</a>
-</li>
-<li>sinh()
-: <a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">rs_cl.rsh</a>
-</li>
-<li>sinpi()
-: <a class="el" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">rs_cl.rsh</a>
-</li>
-<li>size_t
-: <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">rs_types.rsh</a>
-</li>
-<li>sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">rs_cl.rsh</a>
-</li>
-<li>ssize_t
-: <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">rs_types.rsh</a>
-</li>
-<li>step()
-: <a class="el" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>tan()
-: <a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">rs_cl.rsh</a>
-</li>
-<li>tanh()
-: <a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">rs_cl.rsh</a>
-</li>
-<li>tanpi()
-: <a class="el" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">rs_cl.rsh</a>
-</li>
-<li>tgamma()
-: <a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">rs_cl.rsh</a>
-</li>
-<li>trunc()
-: <a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
-<li>uchar
-: <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">rs_types.rsh</a>
-</li>
-<li>uchar2
-: <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">rs_types.rsh</a>
-</li>
-<li>uchar3
-: <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">rs_types.rsh</a>
-</li>
-<li>uchar4
-: <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">rs_types.rsh</a>
-</li>
-<li>uint
-: <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">rs_types.rsh</a>
-</li>
-<li>uint16_t
-: <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">rs_types.rsh</a>
-</li>
-<li>uint2
-: <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">rs_types.rsh</a>
-</li>
-<li>uint3
-: <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">rs_types.rsh</a>
-</li>
-<li>uint32_t
-: <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">rs_types.rsh</a>
-</li>
-<li>uint4
-: <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">rs_types.rsh</a>
-</li>
-<li>uint64_t
-: <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">rs_types.rsh</a>
-</li>
-<li>uint8_t
-: <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">rs_types.rsh</a>
-</li>
-<li>ulong
-: <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">rs_types.rsh</a>
-</li>
-<li>ulong2
-: <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">rs_types.rsh</a>
-</li>
-<li>ulong3
-: <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">rs_types.rsh</a>
-</li>
-<li>ulong4
-: <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">rs_types.rsh</a>
-</li>
-<li>ushort
-: <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">rs_types.rsh</a>
-</li>
-<li>ushort2
-: <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">rs_types.rsh</a>
-</li>
-<li>ushort3
-: <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">rs_types.rsh</a>
-</li>
-<li>ushort4
-: <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">rs_types.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/globals_enum.html b/docs/html/reference/renderscript/globals_enum.html
deleted file mode 100644
index 500d6c4..0000000
--- a/docs/html/reference/renderscript/globals_enum.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="globals.html"><span>All</span></a></li>
-      <li><a href="globals_func.html"><span>Functions</span></a></li>
-      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-&#160;<ul>
-<li>rs_allocation_cubemap_face
-: <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_types.rsh</a>
-</li>
-<li>rs_allocation_usage_type
-: <a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_types.rsh</a>
-</li>
-<li>rs_data_kind
-: <a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_types.rsh</a>
-</li>
-<li>rs_data_type
-: <a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_types.rsh</a>
-</li>
-<li>rs_depth_func
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_types.rsh</a>
-</li>
-<li>rs_for_each_strategy
-: <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_core.rsh</a>
-</li>
-<li>rs_primitive
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_types.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/globals_func.html b/docs/html/reference/renderscript/globals_func.html
deleted file mode 100644
index bed106a..0000000
--- a/docs/html/reference/renderscript/globals_func.html
+++ /dev/null
@@ -1,707 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="globals.html"><span>All</span></a></li>
-      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
-      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="#index_a"><span>a</span></a></li>
-      <li><a href="#index_c"><span>c</span></a></li>
-      <li><a href="#index_d"><span>d</span></a></li>
-      <li><a href="#index_e"><span>e</span></a></li>
-      <li><a href="#index_f"><span>f</span></a></li>
-      <li><a href="#index_h"><span>h</span></a></li>
-      <li><a href="#index_i"><span>i</span></a></li>
-      <li><a href="#index_l"><span>l</span></a></li>
-      <li><a href="#index_m"><span>m</span></a></li>
-      <li><a href="#index_n"><span>n</span></a></li>
-      <li><a href="#index_p"><span>p</span></a></li>
-      <li><a href="#index_r"><span>r</span></a></li>
-      <li><a href="#index_s"><span>s</span></a></li>
-      <li><a href="#index_t"><span>t</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>abs()
-: <a class="el" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">rs_cl.rsh</a>
-</li>
-<li>acos()
-: <a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">rs_cl.rsh</a>
-</li>
-<li>acosh()
-: <a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">rs_cl.rsh</a>
-</li>
-<li>acospi()
-: <a class="el" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">rs_cl.rsh</a>
-</li>
-<li>asin()
-: <a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">rs_cl.rsh</a>
-</li>
-<li>asinh()
-: <a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">rs_cl.rsh</a>
-</li>
-<li>asinpi()
-: <a class="el" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">rs_cl.rsh</a>
-</li>
-<li>atan()
-: <a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">rs_cl.rsh</a>
-</li>
-<li>atan2()
-: <a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">rs_cl.rsh</a>
-</li>
-<li>atan2pi()
-: <a class="el" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">rs_cl.rsh</a>
-</li>
-<li>atanh()
-: <a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">rs_cl.rsh</a>
-</li>
-<li>atanpi()
-: <a class="el" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>cbrt()
-: <a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">rs_cl.rsh</a>
-</li>
-<li>ceil()
-: <a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">rs_cl.rsh</a>
-</li>
-<li>clamp()
-: <a class="el" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">rs_cl.rsh</a>
-</li>
-<li>clz()
-: <a class="el" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">rs_cl.rsh</a>
-</li>
-<li>convert_char2()
-: <a class="el" href="rs__cl_8rsh.html#a67421c4b17df15a1c726d912770e5ca4">rs_cl.rsh</a>
-</li>
-<li>convert_float2()
-: <a class="el" href="rs__cl_8rsh.html#a1ad62d449c1e3548573c2f9c1a5cb13a">rs_cl.rsh</a>
-</li>
-<li>convert_int2()
-: <a class="el" href="rs__cl_8rsh.html#a9d2e4b8f0f25a7ccaed05248edc21f06">rs_cl.rsh</a>
-</li>
-<li>convert_short2()
-: <a class="el" href="rs__cl_8rsh.html#a83e89db1940f3190fbec5bd823a99fc5">rs_cl.rsh</a>
-</li>
-<li>convert_uchar2()
-: <a class="el" href="rs__cl_8rsh.html#a833bb5476683ec5692feaf0cd5dcdd80">rs_cl.rsh</a>
-</li>
-<li>convert_uint2()
-: <a class="el" href="rs__cl_8rsh.html#a01ff256469203ba33ba0f220b54e70d1">rs_cl.rsh</a>
-</li>
-<li>convert_ushort2()
-: <a class="el" href="rs__cl_8rsh.html#a6862ea6ddfba8a59796bc681a544fb4f">rs_cl.rsh</a>
-</li>
-<li>copysign()
-: <a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">rs_cl.rsh</a>
-</li>
-<li>cos()
-: <a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">rs_cl.rsh</a>
-</li>
-<li>cosh()
-: <a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">rs_cl.rsh</a>
-</li>
-<li>cospi()
-: <a class="el" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">rs_cl.rsh</a>
-</li>
-<li>cross()
-: <a class="el" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>degrees()
-: <a class="el" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">rs_cl.rsh</a>
-</li>
-<li>distance()
-: <a class="el" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">rs_cl.rsh</a>
-</li>
-<li>dot()
-: <a class="el" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>erf()
-: <a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">rs_cl.rsh</a>
-</li>
-<li>erfc()
-: <a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">rs_cl.rsh</a>
-</li>
-<li>exp()
-: <a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">rs_cl.rsh</a>
-</li>
-<li>exp10()
-: <a class="el" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">rs_cl.rsh</a>
-</li>
-<li>exp2()
-: <a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">rs_cl.rsh</a>
-</li>
-<li>expm1()
-: <a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>fabs()
-: <a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">rs_cl.rsh</a>
-</li>
-<li>fast_distance()
-: <a class="el" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">rs_cl.rsh</a>
-</li>
-<li>fast_length()
-: <a class="el" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">rs_cl.rsh</a>
-</li>
-<li>fast_normalize()
-: <a class="el" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">rs_cl.rsh</a>
-</li>
-<li>fdim()
-: <a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">rs_cl.rsh</a>
-</li>
-<li>floor()
-: <a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">rs_cl.rsh</a>
-</li>
-<li>fma()
-: <a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">rs_cl.rsh</a>
-</li>
-<li>fmax()
-: <a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">rs_cl.rsh</a>
-</li>
-<li>fmin()
-: <a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">rs_cl.rsh</a>
-</li>
-<li>fmod()
-: <a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">rs_cl.rsh</a>
-</li>
-<li>fract()
-: <a class="el" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">rs_cl.rsh</a>
-</li>
-<li>frexp()
-: <a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>half_recip()
-: <a class="el" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">rs_cl.rsh</a>
-</li>
-<li>half_rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">rs_cl.rsh</a>
-</li>
-<li>half_sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">rs_cl.rsh</a>
-</li>
-<li>hypot()
-: <a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>ilogb()
-: <a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>ldexp()
-: <a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">rs_cl.rsh</a>
-</li>
-<li>length()
-: <a class="el" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">rs_cl.rsh</a>
-</li>
-<li>lgamma()
-: <a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">rs_cl.rsh</a>
-</li>
-<li>log()
-: <a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">rs_cl.rsh</a>
-</li>
-<li>log10()
-: <a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">rs_cl.rsh</a>
-</li>
-<li>log1p()
-: <a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">rs_cl.rsh</a>
-</li>
-<li>log2()
-: <a class="el" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">rs_cl.rsh</a>
-</li>
-<li>logb()
-: <a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>mad()
-: <a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">rs_cl.rsh</a>
-</li>
-<li>max()
-: <a class="el" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">rs_cl.rsh</a>
-</li>
-<li>min()
-: <a class="el" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">rs_cl.rsh</a>
-</li>
-<li>mix()
-: <a class="el" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">rs_cl.rsh</a>
-</li>
-<li>modf()
-: <a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>native_exp()
-: <a class="el" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">rs_cl.rsh</a>
-</li>
-<li>native_exp10()
-: <a class="el" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">rs_cl.rsh</a>
-</li>
-<li>native_exp2()
-: <a class="el" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">rs_cl.rsh</a>
-</li>
-<li>nextafter()
-: <a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">rs_cl.rsh</a>
-</li>
-<li>normalize()
-: <a class="el" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>pow()
-: <a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">rs_cl.rsh</a>
-</li>
-<li>pown()
-: <a class="el" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">rs_cl.rsh</a>
-</li>
-<li>powr()
-: <a class="el" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>radians()
-: <a class="el" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">rs_cl.rsh</a>
-</li>
-<li>remainder()
-: <a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">rs_cl.rsh</a>
-</li>
-<li>rint()
-: <a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rs_cl.rsh</a>
-</li>
-<li>rootn()
-: <a class="el" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rs_cl.rsh</a>
-</li>
-<li>round()
-: <a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">rs_cl.rsh</a>
-</li>
-<li>rsAllocationCopy1DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationCopy2DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimFaces()
-: <a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimLOD()
-: <a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimX()
-: <a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimY()
-: <a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimZ()
-: <a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetElement()
-: <a class="el" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoReceive()
-: <a class="el" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoSend()
-: <a class="el" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rs_allocation.rsh</a>
-</li>
-<li>rsAtomicAdd()
-: <a class="el" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicAnd()
-: <a class="el" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicCas()
-: <a class="el" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicDec()
-: <a class="el" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicInc()
-: <a class="el" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMax()
-: <a class="el" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMin()
-: <a class="el" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicOr()
-: <a class="el" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicSub()
-: <a class="el" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicXor()
-: <a class="el" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rs_atomic.rsh</a>
-</li>
-<li>rsClamp()
-: <a class="el" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rs_math.rsh</a>
-</li>
-<li>rsClearObject()
-: <a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rs_object.rsh</a>
-</li>
-<li>rsDebug()
-: <a class="el" href="rs__debug_8rsh.html#aa75aa9faf7646ceeafeb19279416e9e8">rs_debug.rsh</a>
-</li>
-<li>rsElementGetBytesSize()
-: <a class="el" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataKind()
-: <a class="el" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataType()
-: <a class="el" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElement()
-: <a class="el" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementArraySize()
-: <a class="el" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementCount()
-: <a class="el" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementName()
-: <a class="el" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementNameLength()
-: <a class="el" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementOffsetBytes()
-: <a class="el" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rs_element.rsh</a>
-</li>
-<li>rsElementGetVectorSize()
-: <a class="el" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rs_element.rsh</a>
-</li>
-<li>rsExtractFrustumPlanes()
-: <a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rs_math.rsh</a>
-</li>
-<li>rsForEach()
-: <a class="el" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rs_core.rsh</a>
-</li>
-<li>rsFrac()
-: <a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rs_math.rsh</a>
-</li>
-<li>rsGetAllocation()
-: <a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rs_allocation.rsh</a>
-</li>
-<li>rsGetDt()
-: <a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rs_time.rsh</a>
-</li>
-<li>rsGetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_U()
-: <a class="el" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_V()
-: <a class="el" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_Y()
-: <a class="el" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rs_allocation.rsh</a>
-</li>
-<li>rsgMeshGetIndexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitive()
-: <a class="el" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitiveCount()
-: <a class="el" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocationCount()
-: <a class="el" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rs_mesh.rsh</a>
-</li>
-<li>rsgProgramRasterGetCullMode()
-: <a class="el" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rs_program.rsh</a>
-</li>
-<li>rsgProgramRasterIsPointSpriteEnabled()
-: <a class="el" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendDstFunc()
-: <a class="el" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendSrcFunc()
-: <a class="el" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetDepthFunc()
-: <a class="el" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskAlphaEnabled()
-: <a class="el" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskBlueEnabled()
-: <a class="el" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskGreenEnabled()
-: <a class="el" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskRedEnabled()
-: <a class="el" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDepthMaskEnabled()
-: <a class="el" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDitherEnabled()
-: <a class="el" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rs_program.rsh</a>
-</li>
-<li>rsIsObject()
-: <a class="el" href="rs__object_8rsh.html#a547cd0a8071d895139893f1e10f5c3fd">rs_object.rsh</a>
-</li>
-<li>rsIsSphereInFrustum()
-: <a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rs_math.rsh</a>
-</li>
-<li>rsLocaltime()
-: <a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rs_time.rsh</a>
-</li>
-<li>rsMatrixGet()
-: <a class="el" href="rs__matrix_8rsh.html#ad485084684991796cffdd8a008557569">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverse()
-: <a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverseTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoad()
-: <a class="el" href="rs__matrix_8rsh.html#a5f3697805c794c9c9f2f8cfdde4b9a44">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadFrustum()
-: <a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadIdentity()
-: <a class="el" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadOrtho()
-: <a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadPerspective()
-: <a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadRotate()
-: <a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadScale()
-: <a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#ab1973ad3efa0ab2d53f466dd9fb190bb">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixRotate()
-: <a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixScale()
-: <a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixSet()
-: <a class="el" href="rs__matrix_8rsh.html#ad6ea242218e0f1a031f754df0317e6e7">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#a49164dd4d4e85b212196028b1fd89dc1">rs_matrix.rsh</a>
-</li>
-<li>rsPackColorTo8888()
-: <a class="el" href="rs__math_8rsh.html#a1f1107cf778cf1f614edfb5b8ac436a0">rs_math.rsh</a>
-</li>
-<li>rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rs_cl.rsh</a>
-</li>
-<li>rsQuaternionAdd()
-: <a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionConjugate()
-: <a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionDot()
-: <a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionGetMatrixUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotate()
-: <a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotateUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionMultiply()
-: <a class="el" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionNormalize()
-: <a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSet()
-: <a class="el" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSlerp()
-: <a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rs_quaternion.rsh</a>
-</li>
-<li>rsRand()
-: <a class="el" href="rs__math_8rsh.html#a03e898d810ac44158e7461b2b2b1c356">rs_math.rsh</a>
-</li>
-<li>rsSample()
-: <a class="el" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rs_allocation.rsh</a>
-</li>
-<li>rsSamplerGetAnisotropy()
-: <a class="el" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMagnification()
-: <a class="el" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMinification()
-: <a class="el" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapS()
-: <a class="el" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapT()
-: <a class="el" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rs_sampler.rsh</a>
-</li>
-<li>rsSendToClient()
-: <a class="el" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rs_core.rsh</a>
-</li>
-<li>rsSendToClientBlocking()
-: <a class="el" href="rs__core_8rsh.html#afc93b00be08f58512a6ab6a87feb9515">rs_core.rsh</a>
-</li>
-<li>rsSetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a351627f335b9a091a5152db7ac9134dc">rs_allocation.rsh</a>
-</li>
-<li>rsSetObject()
-: <a class="el" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rs_object.rsh</a>
-</li>
-<li>rsTime()
-: <a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rs_time.rsh</a>
-</li>
-<li>rsUnpackColor8888()
-: <a class="el" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rs_math.rsh</a>
-</li>
-<li>rsUptimeMillis()
-: <a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rs_time.rsh</a>
-</li>
-<li>rsUptimeNanos()
-: <a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rs_time.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>sign()
-: <a class="el" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">rs_cl.rsh</a>
-</li>
-<li>sin()
-: <a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">rs_cl.rsh</a>
-</li>
-<li>sincos()
-: <a class="el" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">rs_cl.rsh</a>
-</li>
-<li>sinh()
-: <a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">rs_cl.rsh</a>
-</li>
-<li>sinpi()
-: <a class="el" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">rs_cl.rsh</a>
-</li>
-<li>sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">rs_cl.rsh</a>
-</li>
-<li>step()
-: <a class="el" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>tan()
-: <a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">rs_cl.rsh</a>
-</li>
-<li>tanh()
-: <a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">rs_cl.rsh</a>
-</li>
-<li>tanpi()
-: <a class="el" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">rs_cl.rsh</a>
-</li>
-<li>tgamma()
-: <a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">rs_cl.rsh</a>
-</li>
-<li>trunc()
-: <a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">rs_cl.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/globals_type.html b/docs/html/reference/renderscript/globals_type.html
deleted file mode 100644
index 1d1ffd7..0000000
--- a/docs/html/reference/renderscript/globals_type.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow3" class="tabs2">
-    <ul class="tablist">
-      <li><a href="globals.html"><span>All</span></a></li>
-      <li><a href="globals_func.html"><span>Functions</span></a></li>
-      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
-      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
-      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
-    </ul>
-  </div>
-  <div id="navrow4" class="tabs3">
-    <ul class="tablist">
-      <li><a href="#index_c"><span>c</span></a></li>
-      <li><a href="#index_d"><span>d</span></a></li>
-      <li><a href="#index_f"><span>f</span></a></li>
-      <li><a href="#index_i"><span>i</span></a></li>
-      <li><a href="#index_l"><span>l</span></a></li>
-      <li><a href="#index_r"><span>r</span></a></li>
-      <li><a href="#index_s"><span>s</span></a></li>
-      <li><a href="#index_u"><span>u</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>char2
-: <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">rs_types.rsh</a>
-</li>
-<li>char3
-: <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">rs_types.rsh</a>
-</li>
-<li>char4
-: <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>double2
-: <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">rs_types.rsh</a>
-</li>
-<li>double3
-: <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">rs_types.rsh</a>
-</li>
-<li>double4
-: <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>float2
-: <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">rs_types.rsh</a>
-</li>
-<li>float3
-: <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">rs_types.rsh</a>
-</li>
-<li>float4
-: <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>int16_t
-: <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">rs_types.rsh</a>
-</li>
-<li>int2
-: <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">rs_types.rsh</a>
-</li>
-<li>int3
-: <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">rs_types.rsh</a>
-</li>
-<li>int32_t
-: <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">rs_types.rsh</a>
-</li>
-<li>int4
-: <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">rs_types.rsh</a>
-</li>
-<li>int64_t
-: <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">rs_types.rsh</a>
-</li>
-<li>int8_t
-: <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>long2
-: <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">rs_types.rsh</a>
-</li>
-<li>long3
-: <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">rs_types.rsh</a>
-</li>
-<li>long4
-: <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>rs_quaternion
-: <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_types.rsh</a>
-</li>
-<li>rs_script_call_t
-: <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_core.rsh</a>
-</li>
-<li>rs_time_t
-: <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>short2
-: <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">rs_types.rsh</a>
-</li>
-<li>short3
-: <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">rs_types.rsh</a>
-</li>
-<li>short4
-: <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">rs_types.rsh</a>
-</li>
-<li>size_t
-: <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">rs_types.rsh</a>
-</li>
-<li>ssize_t
-: <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
-<li>uchar
-: <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">rs_types.rsh</a>
-</li>
-<li>uchar2
-: <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">rs_types.rsh</a>
-</li>
-<li>uchar3
-: <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">rs_types.rsh</a>
-</li>
-<li>uchar4
-: <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">rs_types.rsh</a>
-</li>
-<li>uint
-: <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">rs_types.rsh</a>
-</li>
-<li>uint16_t
-: <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">rs_types.rsh</a>
-</li>
-<li>uint2
-: <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">rs_types.rsh</a>
-</li>
-<li>uint3
-: <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">rs_types.rsh</a>
-</li>
-<li>uint32_t
-: <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">rs_types.rsh</a>
-</li>
-<li>uint4
-: <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">rs_types.rsh</a>
-</li>
-<li>uint64_t
-: <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">rs_types.rsh</a>
-</li>
-<li>uint8_t
-: <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">rs_types.rsh</a>
-</li>
-<li>ulong
-: <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">rs_types.rsh</a>
-</li>
-<li>ulong2
-: <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">rs_types.rsh</a>
-</li>
-<li>ulong3
-: <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">rs_types.rsh</a>
-</li>
-<li>ulong4
-: <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">rs_types.rsh</a>
-</li>
-<li>ushort
-: <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">rs_types.rsh</a>
-</li>
-<li>ushort2
-: <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">rs_types.rsh</a>
-</li>
-<li>ushort3
-: <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">rs_types.rsh</a>
-</li>
-<li>ushort4
-: <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">rs_types.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/index.html b/docs/html/reference/renderscript/index.html
deleted file mode 100644
index 2e3a449..0000000
--- a/docs/html/reference/renderscript/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Main Page</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li class="current"><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="contents">
-<div class="textblock"><p>RenderScript is a high-performance runtime that provides compute operations at the native level. RenderScript code is compiled on devices at runtime to allow platform-independence as well. This reference documentation describes the RenderScript runtime APIs, which you can utilize to write RenderScript code in C99. The RenderScript compute header files are automatically included for you.</p>
-<p>To use RenderScript, you need to utilize the RenderScript runtime APIs documented here as well as the Android framework APIs for RenderScript. For documentation on the Android framework APIs, see the <a href="http://developer.android.com/reference/android/renderscript/package-summary.html" target="_parent">android.renderscript</a> package reference. For more information on how to develop with RenderScript and how the runtime and Android framework APIs interact, see the <a href="http://developer.android.com/guide/topics/renderscript/index.html" target="_parent">RenderScript developer guide</a> and the <a href="http://developer.android.com/resources/samples/RenderScript/index.html" target="_parent">RenderScript samples</a>. </p>
-</div></div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__allocation_8rsh.html b/docs/html/reference/renderscript/rs__allocation_8rsh.html
deleted file mode 100644
index 31736a6..0000000
--- a/docs/html/reference/renderscript/rs__allocation_8rsh.html
+++ /dev/null
@@ -1,818 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rsGetAllocation</a> (const void *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rsAllocationGetDimX</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rsAllocationGetDimY</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rsAllocationGetDimZ</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rsAllocationGetDimLOD</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rsAllocationGetDimFaces</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rsAllocationCopy1DRange</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> dstAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstOff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> count, <a class="el" href="structrs__allocation.html">rs_allocation</a> srcAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcOff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rsAllocationCopy2DRange</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> dstAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstXoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstYoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip, <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> dstFace, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> width, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> height, <a class="el" href="structrs__allocation.html">rs_allocation</a> srcAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcXoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcYoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip, <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> srcFace)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#aea4f2338fb36faf73021ff7179fa5930">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a4256e51301797517cafd5474d7d4b26f">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rsAllocationIoSend</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rsAllocationIoReceive</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rsAllocationGetElement</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="structrs__sampler.html">rs_sampler</a> s, float location)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#aa9574fd5f1655f6e74b4872aace618bf">rsSample</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="structrs__sampler.html">rs_sampler</a> s, float location, float lod)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a36ef1e609e360a9a5a5ff5dce13b5100">rsSetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, void *ptr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a351627f335b9a091a5152db7ac9134dc">rsSetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, void *ptr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rsGetElementAtYuv_uchar_Y</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rsGetElementAtYuv_uchar_U</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rsGetElementAtYuv_uchar_V</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Allocation routines. </p>
-
-<p>Definition in file <a class="el" href="rs__allocation_8rsh_source.html">rs_allocation.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a3a1098a3ea3a5106955dd4398b8904e1"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationCopy1DRange" ref="a3a1098a3ea3a5106955dd4398b8904e1" args="(rs_allocation dstAlloc, uint32_t dstOff, uint32_t dstMip, uint32_t count, rs_allocation srcAlloc, uint32_t srcOff, uint32_t srcMip)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsAllocationCopy1DRange </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>dstAlloc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>dstOff</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>dstMip</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>count</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>srcAlloc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>srcOff</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>srcMip</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Copy part of an allocation from another allocation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">dstAlloc</td><td>Allocation to copy data into. </td></tr>
-    <tr><td class="paramname">dstOff</td><td>The offset of the first element to be copied in the destination allocation. </td></tr>
-    <tr><td class="paramname">dstMip</td><td>Mip level in the destination allocation. </td></tr>
-    <tr><td class="paramname">count</td><td>The number of elements to be copied. </td></tr>
-    <tr><td class="paramname">srcAlloc</td><td>The source data allocation. </td></tr>
-    <tr><td class="paramname">srcOff</td><td>The offset of the first element in data to be copied in the source allocation. </td></tr>
-    <tr><td class="paramname">srcMip</td><td>Mip level in the source allocation. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a7f7e2369b3ed7d7db31729b6db7ba07e"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationCopy2DRange" ref="a7f7e2369b3ed7d7db31729b6db7ba07e" args="(rs_allocation dstAlloc, uint32_t dstXoff, uint32_t dstYoff, uint32_t dstMip, rs_allocation_cubemap_face dstFace, uint32_t width, uint32_t height, rs_allocation srcAlloc, uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip, rs_allocation_cubemap_face srcFace)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsAllocationCopy2DRange </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>dstAlloc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>dstXoff</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>dstYoff</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>dstMip</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a>&#160;</td>
-          <td class="paramname"><em>dstFace</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>width</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>height</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>srcAlloc</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>srcXoff</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>srcYoff</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>srcMip</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a>&#160;</td>
-          <td class="paramname"><em>srcFace</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Copy a rectangular region into the allocation from another allocation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">dstAlloc</td><td>allocation to copy data into. </td></tr>
-    <tr><td class="paramname">dstXoff</td><td>X offset of the region to update in the destination allocation. </td></tr>
-    <tr><td class="paramname">dstYoff</td><td>Y offset of the region to update in the destination allocation. </td></tr>
-    <tr><td class="paramname">dstMip</td><td>Mip level in the destination allocation. </td></tr>
-    <tr><td class="paramname">dstFace</td><td>Cubemap face of the destination allocation, ignored for allocations that aren't cubemaps. </td></tr>
-    <tr><td class="paramname">width</td><td>Width of the incoming region to update. </td></tr>
-    <tr><td class="paramname">height</td><td>Height of the incoming region to update. </td></tr>
-    <tr><td class="paramname">srcAlloc</td><td>The source data allocation. </td></tr>
-    <tr><td class="paramname">srcXoff</td><td>X offset in data of the source allocation. </td></tr>
-    <tr><td class="paramname">srcYoff</td><td>Y offset in data of the source allocation. </td></tr>
-    <tr><td class="paramname">srcMip</td><td>Mip level in the source allocation. </td></tr>
-    <tr><td class="paramname">srcFace</td><td>Cubemap face of the source allocation, ignored for allocations that aren't cubemaps. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac85f7ed88f38b35482c6d63b56d470fe"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimFaces" ref="ac85f7ed88f38b35482c6d63b56d470fe" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimFaces </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Query an allocation for the presence of more than one face.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t Returns 1 if more than one face is present, 0 otherwise. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ac42a07c079d6b3c6bb21975170d4e11c"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimLOD" ref="ac42a07c079d6b3c6bb21975170d4e11c" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimLOD </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Query an allocation for the presence of more than one LOD.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t Returns 1 if more than one LOD is present, 0 otherwise. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a3ca7f505a97d5b7f477bc65b9e77dafb"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimX" ref="a3ca7f505a97d5b7f477bc65b9e77dafb" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimX </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Query the dimension of an allocation.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The X dimension of the allocation. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ac889b866b465580eb313e5d2a9fcac3d"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimY" ref="ac889b866b465580eb313e5d2a9fcac3d" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimY </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Query the dimension of an allocation.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The Y dimension of the allocation. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="acd6f1a2b2443e6ea39e6154577645d2c"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimZ" ref="acd6f1a2b2443e6ea39e6154577645d2c" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimZ </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Query the dimension of an allocation.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The Z dimension of the allocation. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a6a3b6512bc269f6b369bdc54d12a45ff"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetElement" ref="a6a3b6512bc269f6b369bdc54d12a45ff" args="(rs_allocation a)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="structrs__element.html">rs_element</a> rsAllocationGetElement </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get the element object describing the allocation's layout </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">a</td><td>allocation to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>element describing allocation layout </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a05f7391230a92d239fdb619d791162b5"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationIoReceive" ref="a05f7391230a92d239fdb619d791162b5" args="(rs_allocation a)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const void rsAllocationIoReceive </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Receive a new set of contents from the queue. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">a</td><td>allocation to work on </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afe9ebb2f89c6366c59f5e05ee4849c0a"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationIoSend" ref="afe9ebb2f89c6366c59f5e05ee4849c0a" args="(rs_allocation a)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const void rsAllocationIoSend </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Send the contents of the Allocation to the queue. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">a</td><td>allocation to work on </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aadad7654929c451be299df125061c9ba"></a><!-- doxytag: member="rs_allocation.rsh::rsGetAllocation" ref="aadad7654929c451be299df125061c9ba" args="(const void *)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="structrs__allocation.html">rs_allocation</a> rsGetAllocation </td>
-          <td>(</td>
-          <td class="paramtype">const void *&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the Allocation for a given pointer. The pointer should point within a valid allocation. The results are undefined if the pointer is not from a valid allocation.</p>
-<p>This function is deprecated and will be removed in the SDK from a future release. </p>
-
-</div>
-</div>
-<a class="anchor" id="a56157b6ddef754b36833ca1f8e66aec2"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="a56157b6ddef754b36833ca1f8e66aec2" args="(rs_allocation a, uint32_t x)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const void* rsGetElementAt </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation. </p>
-
-</div>
-</div>
-<a class="anchor" id="aea4f2338fb36faf73021ff7179fa5930"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="aea4f2338fb36faf73021ff7179fa5930" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const void* rsGetElementAt </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4256e51301797517cafd5474d7d4b26f"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="a4256e51301797517cafd5474d7d4b26f" args="(rs_allocation a, uint32_t x, uint32_t y, uint32_t z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const void* rsGetElementAt </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a41f61be02113ee22c039ea51fdedb20e"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAtYuv_uchar_U" ref="a41f61be02113ee22c039ea51fdedb20e" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsGetElementAtYuv_uchar_U </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation.</p>
-<p>Coordinates are in the dimensions of the Y plane </p>
-
-</div>
-</div>
-<a class="anchor" id="af03cadb582fa80bbf7f39177d96df17e"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAtYuv_uchar_V" ref="af03cadb582fa80bbf7f39177d96df17e" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsGetElementAtYuv_uchar_V </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation.</p>
-<p>Coordinates are in the dimensions of the Y plane </p>
-
-</div>
-</div>
-<a class="anchor" id="ad7ffa1aa16511a75b4bc2c05bd0e0a75"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAtYuv_uchar_Y" ref="ad7ffa1aa16511a75b4bc2c05bd0e0a75" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsGetElementAtYuv_uchar_Y </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation. </p>
-
-</div>
-</div>
-<a class="anchor" id="a1ed04c0bfab4044b875bb31577b53407"></a><!-- doxytag: member="rs_allocation.rsh::rsSample" ref="a1ed04c0bfab4044b875bb31577b53407" args="(rs_allocation a, rs_sampler s, float location)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsSample </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>location</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">a</td><td>1D allocation to sample from </td></tr>
-    <tr><td class="paramname">s</td><td>sampler state </td></tr>
-    <tr><td class="paramname">location</td><td>to sample from</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">a</td><td>2D allocation to sample from </td></tr>
-    <tr><td class="paramname">s</td><td>sampler state </td></tr>
-    <tr><td class="paramname">location</td><td>to sample from </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aa9574fd5f1655f6e74b4872aace618bf"></a><!-- doxytag: member="rs_allocation.rsh::rsSample" ref="aa9574fd5f1655f6e74b4872aace618bf" args="(rs_allocation a, rs_sampler s, float location, float lod)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsSample </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>s</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>location</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>lod</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">a</td><td>1D allocation to sample from </td></tr>
-    <tr><td class="paramname">s</td><td>sampler state </td></tr>
-    <tr><td class="paramname">location</td><td>to sample from </td></tr>
-    <tr><td class="paramname">lod</td><td>mip level to sample from, for fractional values mip levels will be interpolated if RS_SAMPLER_LINEAR_MIP_LINEAR is used</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">a</td><td>2D allocation to sample from </td></tr>
-    <tr><td class="paramname">s</td><td>sampler state </td></tr>
-    <tr><td class="paramname">location</td><td>to sample from </td></tr>
-    <tr><td class="paramname">lod</td><td>mip level to sample from, for fractional values mip levels will be interpolated if RS_SAMPLER_LINEAR_MIP_LINEAR is used </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a36ef1e609e360a9a5a5ff5dce13b5100"></a><!-- doxytag: member="rs_allocation.rsh::rsSetElementAt" ref="a36ef1e609e360a9a5a5ff5dce13b5100" args="(rs_allocation a, void *ptr, uint32_t x)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetElementAt </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">void *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set single element of an allocation. </p>
-
-</div>
-</div>
-<a class="anchor" id="a351627f335b9a091a5152db7ac9134dc"></a><!-- doxytag: member="rs_allocation.rsh::rsSetElementAt" ref="a351627f335b9a091a5152db7ac9134dc" args="(rs_allocation a, void *ptr, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetElementAt </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">void *&#160;</td>
-          <td class="paramname"><em>ptr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__allocation_8rsh_source.html b/docs/html/reference/renderscript/rs__allocation_8rsh_source.html
deleted file mode 100644
index 6d925a8..0000000
--- a/docs/html/reference/renderscript/rs__allocation_8rsh_source.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__allocation_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ALLOCATION_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ALLOCATION_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="keyword">extern</span> <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> __attribute__((overloadable))
-<a name="l00035"></a>00035     <a class="code" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rsGetAllocation</a>(const <span class="keywordtype">void</span> *);
-<a name="l00036"></a>00036 
-<a name="l00042"></a>00042 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00043"></a>00043     <a class="code" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rsAllocationGetDimX</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a>);
-<a name="l00044"></a>00044 
-<a name="l00050"></a>00050 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00051"></a>00051     <a class="code" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rsAllocationGetDimY</a>(rs_allocation);
-<a name="l00052"></a>00052 
-<a name="l00058"></a>00058 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00059"></a>00059     <a class="code" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rsAllocationGetDimZ</a>(rs_allocation);
-<a name="l00060"></a>00060 
-<a name="l00066"></a>00066 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00067"></a>00067     <a class="code" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rsAllocationGetDimLOD</a>(rs_allocation);
-<a name="l00068"></a>00068 
-<a name="l00074"></a>00074 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00075"></a>00075     <a class="code" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rsAllocationGetDimFaces</a>(rs_allocation);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14))</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>
-<a name="l00092"></a>00092 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00093"></a>00093     <a class="code" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rsAllocationCopy1DRange</a>(rs_allocation dstAlloc,
-<a name="l00094"></a>00094                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstOff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip,
-<a name="l00095"></a>00095                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> count,
-<a name="l00096"></a>00096                             rs_allocation srcAlloc,
-<a name="l00097"></a>00097                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcOff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip);
-<a name="l00098"></a>00098 
-<a name="l00120"></a>00120 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00121"></a>00121     <a class="code" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rsAllocationCopy2DRange</a>(rs_allocation dstAlloc,
-<a name="l00122"></a>00122                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstXoff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstYoff,
-<a name="l00123"></a>00123                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip,
-<a name="l00124"></a>00124                             <a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229" title="Enum for selecting cube map faces.">rs_allocation_cubemap_face</a> dstFace,
-<a name="l00125"></a>00125                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> width, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> height,
-<a name="l00126"></a>00126                             rs_allocation srcAlloc,
-<a name="l00127"></a>00127                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcXoff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcYoff,
-<a name="l00128"></a>00128                             <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip,
-<a name="l00129"></a>00129                             <a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229" title="Enum for selecting cube map faces.">rs_allocation_cubemap_face</a> srcFace);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="preprocessor">#endif //defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14)</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span>
-<a name="l00136"></a>00136 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * __attribute__((overloadable))
-<a name="l00137"></a>00137     <a class="code" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x);
-<a name="l00141"></a>00141 extern const <span class="keywordtype">void</span> * __attribute__((overloadable))
-<a name="l00142"></a>00142     <a class="code" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00146"></a>00146 extern const <span class="keywordtype">void</span> * __attribute__((overloadable))
-<a name="l00147"></a>00147     <a class="code" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> z);
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 18))</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">    #define GET_ELEMENT_AT(T) \</span>
-<a name="l00152"></a>00152 <span class="preprocessor">    extern T __attribute__((overloadable)) \</span>
-<a name="l00153"></a>00153 <span class="preprocessor">            rsGetElementAt_##T(rs_allocation a, uint32_t x); \</span>
-<a name="l00154"></a>00154 <span class="preprocessor">    extern T __attribute__((overloadable)) \</span>
-<a name="l00155"></a>00155 <span class="preprocessor">            rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y);  \</span>
-<a name="l00156"></a>00156 <span class="preprocessor">    extern T __attribute__((overloadable)) \</span>
-<a name="l00157"></a>00157 <span class="preprocessor">            rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y, uint32_t z);</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span><span class="preprocessor">    #define GET_ELEMENT_AT(T) \</span>
-<a name="l00160"></a>00160 <span class="preprocessor">    static inline T __attribute__((overloadable)) \</span>
-<a name="l00161"></a>00161 <span class="preprocessor">            rsGetElementAt_##T(rs_allocation a, uint32_t x) {  \</span>
-<a name="l00162"></a>00162 <span class="preprocessor">        return ((T *)rsGetElementAt(a, x))[0]; \</span>
-<a name="l00163"></a>00163 <span class="preprocessor">    } \</span>
-<a name="l00164"></a>00164 <span class="preprocessor">    static inline T __attribute__((overloadable)) \</span>
-<a name="l00165"></a>00165 <span class="preprocessor">            rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y) {  \</span>
-<a name="l00166"></a>00166 <span class="preprocessor">        return ((T *)rsGetElementAt(a, x, y))[0]; \</span>
-<a name="l00167"></a>00167 <span class="preprocessor">    } \</span>
-<a name="l00168"></a>00168 <span class="preprocessor">    static inline T __attribute__((overloadable)) \</span>
-<a name="l00169"></a>00169 <span class="preprocessor">            rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y, uint32_t z) {  \</span>
-<a name="l00170"></a>00170 <span class="preprocessor">        return ((T *)rsGetElementAt(a, x, y, z))[0]; \</span>
-<a name="l00171"></a>00171 <span class="preprocessor">    }</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>
-<a name="l00174"></a>00174 GET_ELEMENT_AT(<span class="keywordtype">char</span>)
-<a name="l00175"></a>00175 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a>)
-<a name="l00176"></a>00176 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a>)
-<a name="l00177"></a>00177 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a>)
-<a name="l00178"></a>00178 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>)
-<a name="l00179"></a>00179 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>)
-<a name="l00180"></a>00180 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a>)
-<a name="l00181"></a>00181 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>)
-<a name="l00182"></a>00182 GET_ELEMENT_AT(<span class="keywordtype">short</span>)
-<a name="l00183"></a>00183 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a>)
-<a name="l00184"></a>00184 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a>)
-<a name="l00185"></a>00185 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a>)
-<a name="l00186"></a>00186 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>)
-<a name="l00187"></a>00187 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>)
-<a name="l00188"></a>00188 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a>)
-<a name="l00189"></a>00189 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a>)
-<a name="l00190"></a>00190 GET_ELEMENT_AT(<span class="keywordtype">int</span>)
-<a name="l00191"></a>00191 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a>)
-<a name="l00192"></a>00192 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a>)
-<a name="l00193"></a>00193 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a>)
-<a name="l00194"></a>00194 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)
-<a name="l00195"></a>00195 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a>)
-<a name="l00196"></a>00196 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a>)
-<a name="l00197"></a>00197 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a>)
-<a name="l00198"></a>00198 GET_ELEMENT_AT(<span class="keywordtype">long</span>)
-<a name="l00199"></a>00199 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>)
-<a name="l00200"></a>00200 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a>)
-<a name="l00201"></a>00201 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a>)
-<a name="l00202"></a>00202 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>)
-<a name="l00203"></a>00203 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>)
-<a name="l00204"></a>00204 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a>)
-<a name="l00205"></a>00205 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a>)
-<a name="l00206"></a>00206 GET_ELEMENT_AT(<span class="keywordtype">float</span>)
-<a name="l00207"></a>00207 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>)
-<a name="l00208"></a>00208 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>)
-<a name="l00209"></a>00209 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>)
-<a name="l00210"></a>00210 GET_ELEMENT_AT(<span class="keywordtype">double</span>)
-<a name="l00211"></a>00211 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a>)
-<a name="l00212"></a>00212 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a>)
-<a name="l00213"></a>00213 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a>)
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="preprocessor">#undef GET_ELEMENT_AT</span>
-<a name="l00216"></a>00216 <span class="preprocessor"></span>
-<a name="l00217"></a>00217 <span class="comment">// Jelly Bean</span>
-<a name="l00218"></a>00218 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span>
-<a name="l00224"></a>00224 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00225"></a>00225     <a class="code" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rsAllocationIoSend</a>(rs_allocation a);
-<a name="l00226"></a>00226 
-<a name="l00231"></a>00231 extern const <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00232"></a>00232     <a class="code" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rsAllocationIoReceive</a>(rs_allocation a);
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 
-<a name="l00240"></a>00240 extern <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> __attribute__((overloadable))
-<a name="l00241"></a>00241     <a class="code" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rsAllocationGetElement</a>(rs_allocation a);
-<a name="l00242"></a>00242 
-<a name="l00249"></a>00249 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00250"></a>00250     <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <span class="keywordtype">float</span> location);
-<a name="l00260"></a>00260 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00261"></a>00261     <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <span class="keywordtype">float</span> location, <span class="keywordtype">float</span> lod);
-<a name="l00262"></a>00262 
-<a name="l00269"></a>00269 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00270"></a>00270     <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> location);
-<a name="l00271"></a>00271 
-<a name="l00281"></a>00281 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00282"></a>00282     <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> location, <span class="keywordtype">float</span> lod);
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 <span class="preprocessor">#endif // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00285"></a>00285 <span class="preprocessor"></span>
-<a name="l00286"></a>00286 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 18))</span>
-<a name="l00287"></a>00287 <span class="preprocessor"></span>
-<a name="l00291"></a>00291 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00292"></a>00292     <a class="code" href="rs__allocation_8rsh.html#a36ef1e609e360a9a5a5ff5dce13b5100">rsSetElementAt</a>(rs_allocation a, <span class="keywordtype">void</span>* ptr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x);
-<a name="l00293"></a>00293 
-<a name="l00297"></a>00297 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00298"></a>00298     <a class="code" href="rs__allocation_8rsh.html#a36ef1e609e360a9a5a5ff5dce13b5100">rsSetElementAt</a>(rs_allocation a, <span class="keywordtype">void</span>* ptr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 <span class="preprocessor">#define SET_ELEMENT_AT(T)                                               \</span>
-<a name="l00301"></a>00301 <span class="preprocessor">    extern void __attribute__((overloadable))                           \</span>
-<a name="l00302"></a>00302 <span class="preprocessor">    rsSetElementAt_##T(rs_allocation a, T val, uint32_t x);             \</span>
-<a name="l00303"></a>00303 <span class="preprocessor">    extern void __attribute__((overloadable))                           \</span>
-<a name="l00304"></a>00304 <span class="preprocessor">    rsSetElementAt_##T(rs_allocation a, T val, uint32_t x, uint32_t y); \</span>
-<a name="l00305"></a>00305 <span class="preprocessor">    extern void __attribute__((overloadable))                           \</span>
-<a name="l00306"></a>00306 <span class="preprocessor">    rsSetElementAt_##T(rs_allocation a, T val, uint32_t x, uint32_t y, uint32_t z);</span>
-<a name="l00307"></a>00307 <span class="preprocessor"></span>
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 SET_ELEMENT_AT(<span class="keywordtype">char</span>)
-<a name="l00310"></a>00310 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a>)
-<a name="l00311"></a>00311 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a>)
-<a name="l00312"></a>00312 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a>)
-<a name="l00313"></a>00313 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>)
-<a name="l00314"></a>00314 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>)
-<a name="l00315"></a>00315 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a>)
-<a name="l00316"></a>00316 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>)
-<a name="l00317"></a>00317 SET_ELEMENT_AT(<span class="keywordtype">short</span>)
-<a name="l00318"></a>00318 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a>)
-<a name="l00319"></a>00319 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a>)
-<a name="l00320"></a>00320 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a>)
-<a name="l00321"></a>00321 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>)
-<a name="l00322"></a>00322 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>)
-<a name="l00323"></a>00323 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a>)
-<a name="l00324"></a>00324 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a>)
-<a name="l00325"></a>00325 SET_ELEMENT_AT(<span class="keywordtype">int</span>)
-<a name="l00326"></a>00326 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a>)
-<a name="l00327"></a>00327 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a>)
-<a name="l00328"></a>00328 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a>)
-<a name="l00329"></a>00329 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)
-<a name="l00330"></a>00330 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a>)
-<a name="l00331"></a>00331 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a>)
-<a name="l00332"></a>00332 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a>)
-<a name="l00333"></a>00333 SET_ELEMENT_AT(<span class="keywordtype">long</span>)
-<a name="l00334"></a>00334 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>)
-<a name="l00335"></a>00335 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a>)
-<a name="l00336"></a>00336 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a>)
-<a name="l00337"></a>00337 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>)
-<a name="l00338"></a>00338 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>)
-<a name="l00339"></a>00339 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a>)
-<a name="l00340"></a>00340 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a>)
-<a name="l00341"></a>00341 SET_ELEMENT_AT(<span class="keywordtype">float</span>)
-<a name="l00342"></a>00342 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>)
-<a name="l00343"></a>00343 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>)
-<a name="l00344"></a>00344 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>)
-<a name="l00345"></a>00345 SET_ELEMENT_AT(<span class="keywordtype">double</span>)
-<a name="l00346"></a>00346 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a>)
-<a name="l00347"></a>00347 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a>)
-<a name="l00348"></a>00348 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a>)
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350 <span class="preprocessor">#undef SET_ELEMENT_AT</span>
-<a name="l00351"></a>00351 <span class="preprocessor"></span>
-<a name="l00352"></a>00352 
-<a name="l00356"></a>00356 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable))
-<a name="l00357"></a>00357     <a class="code" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rsGetElementAtYuv_uchar_Y</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00358"></a>00358 
-<a name="l00364"></a>00364 extern const <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable))
-<a name="l00365"></a>00365     <a class="code" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rsGetElementAtYuv_uchar_U</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00366"></a>00366 
-<a name="l00372"></a>00372 extern const <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable))
-<a name="l00373"></a>00373     <a class="code" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rsGetElementAtYuv_uchar_V</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 <span class="preprocessor">#endif // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 18))</span>
-<a name="l00376"></a>00376 <span class="preprocessor"></span>
-<a name="l00377"></a>00377 <span class="preprocessor">#endif</span>
-<a name="l00378"></a>00378 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__atomic_8rsh.html b/docs/html/reference/renderscript/rs__atomic_8rsh.html
deleted file mode 100644
index 94c16ef..0000000
--- a/docs/html/reference/renderscript/rs__atomic_8rsh.html
+++ /dev/null
@@ -1,757 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rsAtomicInc</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a9c7a2b449852ba9d3297747ec3ca06e3">rsAtomicInc</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rsAtomicDec</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a77902e5015557fa7336a7926ebdccdae">rsAtomicDec</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rsAtomicAdd</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ab206947a5a724f02cb1ab36dd7df82d7">rsAtomicAdd</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rsAtomicSub</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ae5770ea0b22cb47e517b3391763c14a5">rsAtomicSub</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rsAtomicAnd</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a9d4e93fa4b55b49c75d4d1bd7708cf41">rsAtomicAnd</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rsAtomicOr</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a611cde98a711ba690e1c07ddb502ce97">rsAtomicOr</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rsAtomicXor</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ab9fe2263cd7814fc5292c6af81ed69eb">rsAtomicXor</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rsAtomicMin</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a8de83596fd23f119ab8620a8dad223b1">rsAtomicMin</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rsAtomicMax</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a6d4cb5118131a8f1e73b704c093401aa">rsAtomicMax</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rsAtomicCas</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> compareValue, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> newValue)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#aa46bb0a2933a93bed2858585a088b173">rsAtomicCas</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> compareValue, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> newValue)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Atomic routines. </p>
-
-<p>Definition in file <a class="el" href="rs__atomic_8rsh_source.html">rs_atomic.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ab46665eff81030200f86db9c2181072a"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAdd" ref="ab46665eff81030200f86db9c2181072a" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicAdd </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic add a value to the value at addr. addr[0] += value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to add to the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ab206947a5a724f02cb1ab36dd7df82d7"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAdd" ref="ab206947a5a724f02cb1ab36dd7df82d7" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicAdd </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic add a value to the value at addr. addr[0] += value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to add to the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a7fdf5633662dd5b0898ad5a149e3c8ad"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAnd" ref="a7fdf5633662dd5b0898ad5a149e3c8ad" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicAnd </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise and a value from the value at addr. addr[0] &amp;= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to and with the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9d4e93fa4b55b49c75d4d1bd7708cf41"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAnd" ref="a9d4e93fa4b55b49c75d4d1bd7708cf41" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicAnd </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise and a value from the value at addr. addr[0] &amp;= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to and with the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a205d66a8eb29eee8968f886e488b4402"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicCas" ref="a205d66a8eb29eee8968f886e488b4402" args="(volatile int32_t *addr, int32_t compareValue, int32_t newValue)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicCas </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>compareValue</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>newValue</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compare-and-set operation with a full memory barrier.</p>
-<p>If the value at addr matches compareValue then newValue is written.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>The address to compare and replace if the compare passes. </td></tr>
-    <tr><td class="paramname">compareValue</td><td>The value to test addr[0] against. </td></tr>
-    <tr><td class="paramname">newValue</td><td>The value to write if the test passes.</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="aa46bb0a2933a93bed2858585a088b173"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicCas" ref="aa46bb0a2933a93bed2858585a088b173" args="(volatile uint32_t *addr, uint32_t compareValue, uint32_t newValue)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicCas </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>compareValue</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>newValue</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compare-and-set operation with a full memory barrier.</p>
-<p>If the value at addr matches compareValue then newValue is written.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>The address to compare and replace if the compare passes. </td></tr>
-    <tr><td class="paramname">compareValue</td><td>The value to test addr[0] against. </td></tr>
-    <tr><td class="paramname">newValue</td><td>The value to write if the test passes.</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a16a69784a343d7c11bf6bd7fec9686ca"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicDec" ref="a16a69784a343d7c11bf6bd7fec9686ca" args="(volatile int32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicDec </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to decrement</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a77902e5015557fa7336a7926ebdccdae"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicDec" ref="a77902e5015557fa7336a7926ebdccdae" args="(volatile uint32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicDec </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to decrement</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a619e7a489500a650569a76ccd93e105f"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicInc" ref="a619e7a489500a650569a76ccd93e105f" args="(volatile int32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicInc </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic add one to the value at addr. Equal to rsAtomicAdd(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to increment</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9c7a2b449852ba9d3297747ec3ca06e3"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicInc" ref="a9c7a2b449852ba9d3297747ec3ca06e3" args="(volatile uint32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicInc </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic add one to the value at addr. Equal to rsAtomicAdd(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to increment</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a1d49d69d14956152fcde34efe9cdff87"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMax" ref="a1d49d69d14956152fcde34efe9cdff87" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicMax </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the max of addr and value addr[0] = rsMax(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>comparison value</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a6d4cb5118131a8f1e73b704c093401aa"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMax" ref="a6d4cb5118131a8f1e73b704c093401aa" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicMax </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the max of addr and value addr[0] = rsMin(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>comparison value</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9f3cddc86f1075ca194a762fb8a3330a"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMin" ref="a9f3cddc86f1075ca194a762fb8a3330a" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicMin </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the min of addr and value addr[0] = rsMin(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>comparison value</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a8de83596fd23f119ab8620a8dad223b1"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMin" ref="a8de83596fd23f119ab8620a8dad223b1" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicMin </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the min of addr and value addr[0] = rsMin(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>comparison value</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a477f6eb17c4806bb715bfd975b6369cd"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicOr" ref="a477f6eb17c4806bb715bfd975b6369cd" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicOr </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise or a value from the value at addr. addr[0] |= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to or with the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a611cde98a711ba690e1c07ddb502ce97"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicOr" ref="a611cde98a711ba690e1c07ddb502ce97" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicOr </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise or a value from the value at addr. addr[0] |= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to or with the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a800dced6abbf09716391f35bc488900b"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicSub" ref="a800dced6abbf09716391f35bc488900b" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicSub </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Subtract a value from the value at addr. addr[0] -= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to subtract from the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ae5770ea0b22cb47e517b3391763c14a5"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicSub" ref="ae5770ea0b22cb47e517b3391763c14a5" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicSub </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Subtract a value from the value at addr. addr[0] -= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to subtract from the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a5590505ea65c53b3bb26fa48a6b9c313"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicXor" ref="a5590505ea65c53b3bb26fa48a6b9c313" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicXor </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise xor a value from the value at addr. addr[0] ^= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to xor with the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ab9fe2263cd7814fc5292c6af81ed69eb"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicXor" ref="ab9fe2263cd7814fc5292c6af81ed69eb" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicXor </td>
-          <td>(</td>
-          <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *&#160;</td>
-          <td class="paramname"><em>addr</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise xor a value from the value at addr. addr[0] ^= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
-    <tr><td class="paramname">value</td><td>Amount to xor with the value at addr</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__atomic_8rsh_source.html b/docs/html/reference/renderscript/rs__atomic_8rsh_source.html
deleted file mode 100644
index 2136df4..0000000
--- a/docs/html/reference/renderscript/rs__atomic_8rsh_source.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__atomic_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ATOMIC_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ATOMIC_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14))</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00037"></a>00037     <a class="code" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rsAtomicInc</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr);
-<a name="l00046"></a>00046 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00047"></a>00047     <a class="code" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rsAtomicInc</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr);
-<a name="l00048"></a>00048 
-<a name="l00056"></a>00056 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00057"></a>00057     <a class="code" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rsAtomicDec</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr);
-<a name="l00065"></a>00065 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00066"></a>00066     <a class="code" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rsAtomicDec</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr);
-<a name="l00067"></a>00067 
-<a name="l00076"></a>00076 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00077"></a>00077     <a class="code" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rsAtomicAdd</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00086"></a>00086 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00087"></a>00087     <a class="code" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rsAtomicAdd</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00088"></a>00088 
-<a name="l00097"></a>00097 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00098"></a>00098     <a class="code" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rsAtomicSub</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00107"></a>00107 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00108"></a>00108     <a class="code" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rsAtomicSub</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00109"></a>00109 
-<a name="l00118"></a>00118 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00119"></a>00119     <a class="code" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rsAtomicAnd</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00128"></a>00128 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00129"></a>00129     <a class="code" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rsAtomicAnd</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00130"></a>00130 
-<a name="l00139"></a>00139 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00140"></a>00140     <a class="code" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rsAtomicOr</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00149"></a>00149 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00150"></a>00150     <a class="code" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rsAtomicOr</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00151"></a>00151 
-<a name="l00160"></a>00160 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00161"></a>00161     <a class="code" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rsAtomicXor</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00170"></a>00170 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00171"></a>00171     <a class="code" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rsAtomicXor</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00172"></a>00172 
-<a name="l00182"></a>00182 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00183"></a>00183     <a class="code" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rsAtomicMin</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00193"></a>00193 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00194"></a>00194     <a class="code" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rsAtomicMin</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00195"></a>00195 
-<a name="l00205"></a>00205 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00206"></a>00206     <a class="code" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rsAtomicMax</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00216"></a>00216 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00217"></a>00217     <a class="code" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rsAtomicMax</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00218"></a>00218 
-<a name="l00230"></a>00230 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00231"></a>00231     <a class="code" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rsAtomicCas</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> compareValue, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> newValue);
-<a name="l00232"></a>00232 
-<a name="l00244"></a>00244 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00245"></a>00245     <a class="code" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rsAtomicCas</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> compareValue, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> newValue);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 <span class="preprocessor">#endif //defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14)</span>
-<a name="l00248"></a>00248 <span class="preprocessor"></span>
-<a name="l00249"></a>00249 <span class="preprocessor">#endif</span>
-<a name="l00250"></a>00250 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__cl_8rsh.html b/docs/html/reference/renderscript/rs__cl_8rsh.html
deleted file mode 100644
index 2a781b6..0000000
--- a/docs/html/reference/renderscript/rs__cl_8rsh.html
+++ /dev/null
@@ -1,2384 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a67421c4b17df15a1c726d912770e5ca4">convert_char2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a833bb5476683ec5692feaf0cd5dcdd80">convert_uchar2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a83e89db1940f3190fbec5bd823a99fc5">convert_short2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6862ea6ddfba8a59796bc681a544fb4f">convert_ushort2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9d2e4b8f0f25a7ccaed05248edc21f06">convert_int2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a01ff256469203ba33ba0f220b54e70d1">convert_uint2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1ad62d449c1e3548573c2f9c1a5cb13a">convert_float2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">acospi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">asinpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a> (float y, float x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">atanpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">atan2pi</a> (float y, float x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">cospi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">exp10</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a> (float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a> (float a, float b, float c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a> (float v, float *iptr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a84b546baf72a871a5ba688d434d6ce2b">fract</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a> (float v, int *iptr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a> (float x, int y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">lgamma</a> (float x, int *y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">log2</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a> (float a, float b, float c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a> (float x, float *iret)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">pown</a> (float v, int p)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">powr</a> (float v, float p)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rootn</a> (float v, int n)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rsqrt</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">sincos</a> (float v, float *cosptr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">sinpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">tanpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">abs</a> (char v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">clz</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">min</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v1, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v2)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">max</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v1, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v2)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a> (float amount, float low, float high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a> (float radians)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a> (float start, float stop, float amount)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">radians</a> (float degrees)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a> (float edge, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">sign</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">cross</a> (<a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> lhs, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a> (float lhs, float rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">distance</a> (float lhs, float rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">normalize</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">half_recip</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">half_sqrt</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">half_rsqrt</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">fast_length</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">fast_distance</a> (float lhs, float rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">fast_normalize</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">native_exp2</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">native_exp</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">native_exp10</a> (float v)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Basic math functions. </p>
-
-<p>Definition in file <a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a1ed0afedda2068ad1f9ad14ef3449e50"></a><!-- doxytag: member="rs_cl.rsh::abs" ref="a1ed0afedda2068ad1f9ad14ef3449e50" args="(char v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> abs </td>
-          <td>(</td>
-          <td class="paramtype">char&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the absolute value of a value.</p>
-<p>Supports 1,2,3,4 components of char, short, int. </p>
-
-</div>
-</div>
-<a class="anchor" id="a07648648c7f857cfd1479821d4389751"></a><!-- doxytag: member="rs_cl.rsh::acos" ref="a07648648c7f857cfd1479821d4389751" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float acos </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse cosine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a6575106413ec72448439ef67f1309424"></a><!-- doxytag: member="rs_cl.rsh::acosh" ref="a6575106413ec72448439ef67f1309424" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float acosh </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse hyperbolic cosine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a2c9092eb07e9df891935e93469e70d4e"></a><!-- doxytag: member="rs_cl.rsh::acospi" ref="a2c9092eb07e9df891935e93469e70d4e" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float acospi </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse cosine divided by PI.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a78b9d0583bd0699e2eac30d2a136817a"></a><!-- doxytag: member="rs_cl.rsh::asin" ref="a78b9d0583bd0699e2eac30d2a136817a" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float asin </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse sine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a4e3fe465ed5541af53192c59c80af1a0"></a><!-- doxytag: member="rs_cl.rsh::asinh" ref="a4e3fe465ed5541af53192c59c80af1a0" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float asinh </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse hyperbolic sine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a812eb4521e65a451161417f9898384f7"></a><!-- doxytag: member="rs_cl.rsh::asinpi" ref="a812eb4521e65a451161417f9898384f7" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float asinpi </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse sine divided by PI.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="ab790c3a7df8fcbeab77f6c0e3b4dcada"></a><!-- doxytag: member="rs_cl.rsh::atan" ref="ab790c3a7df8fcbeab77f6c0e3b4dcada" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float atan </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="aaf4b636b09041878e1542054c73d81e9"></a><!-- doxytag: member="rs_cl.rsh::atan2" ref="aaf4b636b09041878e1542054c73d81e9" args="(float y, float x)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float atan2 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent of y / x.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">y</td><td></td></tr>
-    <tr><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a89ec5f6a2f64a0f9e97438fbd41aaace"></a><!-- doxytag: member="rs_cl.rsh::atan2pi" ref="a89ec5f6a2f64a0f9e97438fbd41aaace" args="(float y, float x)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float atan2pi </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent of y / x, divided by PI.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">y</td><td></td></tr>
-    <tr><td class="paramname">x</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a83bdf415cc561ff6237a124273d9fb0d"></a><!-- doxytag: member="rs_cl.rsh::atanh" ref="a83bdf415cc561ff6237a124273d9fb0d" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float atanh </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse hyperbolic tangent.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a5052e31ce616d35aee25a3a83f6fc117"></a><!-- doxytag: member="rs_cl.rsh::atanpi" ref="a5052e31ce616d35aee25a3a83f6fc117" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float atanpi </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent divided by PI.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="ae9d1787b55c2587478a24d96573225df"></a><!-- doxytag: member="rs_cl.rsh::cbrt" ref="ae9d1787b55c2587478a24d96573225df" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float cbrt </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the cube root.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa8fc6daff743a1b635ccbf9af83fe4e4"></a><!-- doxytag: member="rs_cl.rsh::ceil" ref="aa8fc6daff743a1b635ccbf9af83fe4e4" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float ceil </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the smallest integer not less than a value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="afae5eac13e35acd0f47d7e3c601e16ed"></a><!-- doxytag: member="rs_cl.rsh::clamp" ref="afae5eac13e35acd0f47d7e3c601e16ed" args="(float amount, float low, float high)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float clamp </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>amount</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>low</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>high</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Clamp a value to a specified high and low bound.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">amount</td><td>value to be clamped. Supports 1,2,3,4 components </td></tr>
-    <tr><td class="paramname">low</td><td>Lower bound, must be scalar or matching vector. </td></tr>
-    <tr><td class="paramname">high</td><td>High bound, must match type of low </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a8a0f94dce3caa2a50cbf2d9f4bc674ac"></a><!-- doxytag: member="rs_cl.rsh::clz" ref="a8a0f94dce3caa2a50cbf2d9f4bc674ac" args="(uchar v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> clz </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the number of leading 0-bits in a value.</p>
-<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int. </p>
-
-</div>
-</div>
-<a class="anchor" id="a67421c4b17df15a1c726d912770e5ca4"></a><!-- doxytag: member="rs_cl.rsh::convert_char2" ref="a67421c4b17df15a1c726d912770e5ca4" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a> convert_char2 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert to char.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a1ad62d449c1e3548573c2f9c1a5cb13a"></a><!-- doxytag: member="rs_cl.rsh::convert_float2" ref="a1ad62d449c1e3548573c2f9c1a5cb13a" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> convert_float2 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert to float.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9d2e4b8f0f25a7ccaed05248edc21f06"></a><!-- doxytag: member="rs_cl.rsh::convert_int2" ref="a9d2e4b8f0f25a7ccaed05248edc21f06" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a> convert_int2 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert to int.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a83e89db1940f3190fbec5bd823a99fc5"></a><!-- doxytag: member="rs_cl.rsh::convert_short2" ref="a83e89db1940f3190fbec5bd823a99fc5" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a> convert_short2 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert to short.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a833bb5476683ec5692feaf0cd5dcdd80"></a><!-- doxytag: member="rs_cl.rsh::convert_uchar2" ref="a833bb5476683ec5692feaf0cd5dcdd80" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> convert_uchar2 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert to unsigned char.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a01ff256469203ba33ba0f220b54e70d1"></a><!-- doxytag: member="rs_cl.rsh::convert_uint2" ref="a01ff256469203ba33ba0f220b54e70d1" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a> convert_uint2 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert to unsigned int.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6862ea6ddfba8a59796bc681a544fb4f"></a><!-- doxytag: member="rs_cl.rsh::convert_ushort2" ref="a6862ea6ddfba8a59796bc681a544fb4f" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a> convert_ushort2 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert to unsigned short.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a29f2602d95aa7b3950e2b77b3e268f7e"></a><!-- doxytag: member="rs_cl.rsh::copysign" ref="a29f2602d95aa7b3950e2b77b3e268f7e" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float copysign </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Copy the sign bit from y to x.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x</td><td></td></tr>
-    <tr><td class="paramname">y</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a8eec7aeb4b0c46b06cbcd1a3ac3e6f05"></a><!-- doxytag: member="rs_cl.rsh::cos" ref="a8eec7aeb4b0c46b06cbcd1a3ac3e6f05" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float cos </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the cosine.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac8d88d83182afd591401eaed101d9670"></a><!-- doxytag: member="rs_cl.rsh::cosh" ref="ac8d88d83182afd591401eaed101d9670" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float cosh </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the hypebolic cosine.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a258d2c828fd46eae2867373884d834a9"></a><!-- doxytag: member="rs_cl.rsh::cospi" ref="a258d2c828fd46eae2867373884d834a9" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float cospi </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the cosine of the value * PI.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="add745d593bc2b23285bd10e52a204e25"></a><!-- doxytag: member="rs_cl.rsh::cross" ref="add745d593bc2b23285bd10e52a204e25" args="(float3 lhs, float3 rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> cross </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>&#160;</td>
-          <td class="paramname"><em>lhs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the cross product of two vectors.</p>
-<p>Supports 3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a0276b63d6905fa802032f1490a24515b"></a><!-- doxytag: member="rs_cl.rsh::degrees" ref="a0276b63d6905fa802032f1490a24515b" args="(float radians)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float degrees </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>radians</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from radians to degrees.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a412bf215ae838c65079560bbefefaca7"></a><!-- doxytag: member="rs_cl.rsh::distance" ref="a412bf215ae838c65079560bbefefaca7" args="(float lhs, float rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float distance </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>lhs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the distance between two points.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aa26d85eac3067e9769b33b6914b180f2"></a><!-- doxytag: member="rs_cl.rsh::dot" ref="aa26d85eac3067e9769b33b6914b180f2" args="(float lhs, float rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float dot </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>lhs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the dot product of two vectors.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a139f102df651c25c26dd35d549173f57"></a><!-- doxytag: member="rs_cl.rsh::erf" ref="a139f102df651c25c26dd35d549173f57" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float erf </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the error function.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a2e24dc8594e758b64c340153f67a533c"></a><!-- doxytag: member="rs_cl.rsh::erfc" ref="a2e24dc8594e758b64c340153f67a533c" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float erfc </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the complementary error function.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6d9aac64c2686961ca8f30e3c34fef36"></a><!-- doxytag: member="rs_cl.rsh::exp" ref="a6d9aac64c2686961ca8f30e3c34fef36" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float exp </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return e ^ value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0225ff40d79f78260293e776c6a77422"></a><!-- doxytag: member="rs_cl.rsh::exp10" ref="a0225ff40d79f78260293e776c6a77422" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float exp10 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return 10 ^ value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a39bca19ee2b1aa95144e58eb4a1e4f88"></a><!-- doxytag: member="rs_cl.rsh::exp2" ref="a39bca19ee2b1aa95144e58eb4a1e4f88" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float exp2 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return 2 ^ value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a7996044b67be921a5e58e2fe76af66e2"></a><!-- doxytag: member="rs_cl.rsh::expm1" ref="a7996044b67be921a5e58e2fe76af66e2" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float expm1 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return (e ^ value) - 1.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad6e897f1acae252ec0901e3b122992ea"></a><!-- doxytag: member="rs_cl.rsh::fabs" ref="ad6e897f1acae252ec0901e3b122992ea" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fabs </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the absolute value of a value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4fcbdb9099e7d653a951cb344ba3c3c9"></a><!-- doxytag: member="rs_cl.rsh::fast_distance" ref="a4fcbdb9099e7d653a951cb344ba3c3c9" args="(float lhs, float rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fast_distance </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>lhs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the approximate distance between two points.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a7c8f2f987044a360b5f616a80a74a4d5"></a><!-- doxytag: member="rs_cl.rsh::fast_length" ref="a7c8f2f987044a360b5f616a80a74a4d5" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fast_length </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the approximate length of a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a3878bee2879351f518be68e015d76a35"></a><!-- doxytag: member="rs_cl.rsh::fast_normalize" ref="a3878bee2879351f518be68e015d76a35" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fast_normalize </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Approximately normalize a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ae7a7bac0f4e244594078f87b42c8716a"></a><!-- doxytag: member="rs_cl.rsh::fdim" ref="ae7a7bac0f4e244594078f87b42c8716a" args="(float, float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fdim </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the positive difference between two values.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type. </p>
-
-</div>
-</div>
-<a class="anchor" id="aae2da38a7246378dff8014ec407a30c3"></a><!-- doxytag: member="rs_cl.rsh::floor" ref="aae2da38a7246378dff8014ec407a30c3" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float floor </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the smallest integer not greater than a value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac42909daec463fe449743e70baf8360d"></a><!-- doxytag: member="rs_cl.rsh::fma" ref="ac42909daec463fe449743e70baf8360d" args="(float a, float b, float c)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fma </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>b</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>c</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return a*b + c.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a60f2072d8a746e7fe05cd46dea0fefcc"></a><!-- doxytag: member="rs_cl.rsh::fmax" ref="a60f2072d8a746e7fe05cd46dea0fefcc" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fmax </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return (x &lt; y ? y : x)</p>
-<p>Supports float, float2, float3, float4. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x,:</td><td>may be float, float2, float3, float4 </td></tr>
-    <tr><td class="paramname">y,:</td><td>may be float or vector. If vector must match type of x. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1fd9d57c6c992866bf5161be2cf4c447"></a><!-- doxytag: member="rs_cl.rsh::fmin" ref="a1fd9d57c6c992866bf5161be2cf4c447" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fmin </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return (x &gt; y ? y : x)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x,:</td><td>may be float, float2, float3, float4 </td></tr>
-    <tr><td class="paramname">y,:</td><td>may be float or vector. If vector must match type of x. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a31d5e179730ae44e1dbc74c1535f392e"></a><!-- doxytag: member="rs_cl.rsh::fmod" ref="a31d5e179730ae44e1dbc74c1535f392e" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fmod </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the remainder from x / y</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9374786a1bbe3d2dd886cfad642bfec6"></a><!-- doxytag: member="rs_cl.rsh::fract" ref="a9374786a1bbe3d2dd886cfad642bfec6" args="(float v, float *iptr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float fract </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>iptr</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return fractional part of v</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">iptr</td><td>iptr[0] will be set to the floor of the input value. Supports float, float2, float3, float4. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a84b546baf72a871a5ba688d434d6ce2b"></a><!-- doxytag: member="rs_cl.rsh::fract" ref="a84b546baf72a871a5ba688d434d6ce2b" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> fract </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td><code> [inline, static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return fractional part of v</p>
-<p>Supports float, float2, float3, float4. </p>
-
-<p>Definition at line <a class="el" href="rs__cl_8rsh_source.html#l00485">485</a> of file <a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a778635fffed3cee8ab0800482ba53a30"></a><!-- doxytag: member="rs_cl.rsh::frexp" ref="a778635fffed3cee8ab0800482ba53a30" args="(float v, int *iptr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float frexp </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>iptr</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the mantissa and place the exponent into iptr[0]</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">v</td><td>Supports float, float2, float3, float4. </td></tr>
-    <tr><td class="paramname">iptr</td><td>Must have the same vector size as v. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a49050a8e32c95f60df4eaba9d7dfdca6"></a><!-- doxytag: member="rs_cl.rsh::half_recip" ref="a49050a8e32c95f60df4eaba9d7dfdca6" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float half_recip </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the approximate reciprocal of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a0925ceb22d33dcbb45914350ffa2edea"></a><!-- doxytag: member="rs_cl.rsh::half_rsqrt" ref="a0925ceb22d33dcbb45914350ffa2edea" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float half_rsqrt </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the approximate value of (1 / sqrt(value)).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a26e2c17b20ee4c98b78c365d390e4fb8"></a><!-- doxytag: member="rs_cl.rsh::half_sqrt" ref="a26e2c17b20ee4c98b78c365d390e4fb8" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float half_sqrt </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the approximate square root of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a147f38d6e41f45de9b5e7c6f3dcac010"></a><!-- doxytag: member="rs_cl.rsh::hypot" ref="a147f38d6e41f45de9b5e7c6f3dcac010" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float hypot </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return sqrt(x*x + y*y)</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="aad9a8beba52acb77b1efeba432e6cc2c"></a><!-- doxytag: member="rs_cl.rsh::ilogb" ref="aad9a8beba52acb77b1efeba432e6cc2c" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int ilogb </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the integer exponent of a value</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a013bc1dcda984cbc608e123ed38491e6"></a><!-- doxytag: member="rs_cl.rsh::ldexp" ref="a013bc1dcda984cbc608e123ed38491e6" args="(float x, int y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float ldexp </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return (x * 2^y)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x</td><td>Supports 1,2,3,4 components </td></tr>
-    <tr><td class="paramname">y</td><td>Supports single component or matching vector. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a902d4d2fab31ba8f9631b1f681e99baa"></a><!-- doxytag: member="rs_cl.rsh::length" ref="a902d4d2fab31ba8f9631b1f681e99baa" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float length </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the length of a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a3ff36f9b21927d6b4b58616e48fddcb4"></a><!-- doxytag: member="rs_cl.rsh::lgamma" ref="a3ff36f9b21927d6b4b58616e48fddcb4" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float lgamma </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the log gamma</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a735f4e14e33c50348ef41220f9210bcc"></a><!-- doxytag: member="rs_cl.rsh::lgamma" ref="a735f4e14e33c50348ef41220f9210bcc" args="(float x, int *y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float lgamma </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the log gamma and sign</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x</td><td>Supports 1,2,3,4 components </td></tr>
-    <tr><td class="paramname">y</td><td>Supports matching vector. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a3ff85f5f4b206ecf9ec9d128d7d18a08"></a><!-- doxytag: member="rs_cl.rsh::log" ref="a3ff85f5f4b206ecf9ec9d128d7d18a08" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float log </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the natural logarithm</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="af5c1bdba2a13aa2e2b0722287f6a919f"></a><!-- doxytag: member="rs_cl.rsh::log10" ref="af5c1bdba2a13aa2e2b0722287f6a919f" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float log10 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the base 10 logarithm</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ae10541ede49062ef7f977712c4878c1f"></a><!-- doxytag: member="rs_cl.rsh::log1p" ref="ae10541ede49062ef7f977712c4878c1f" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float log1p </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the natural logarithm of (v + 1.0f)</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aab1c4f06daf6f2a50fd73f0c28929213"></a><!-- doxytag: member="rs_cl.rsh::log2" ref="aab1c4f06daf6f2a50fd73f0c28929213" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float log2 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the base 2 logarithm</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a28742d6ce2f20a61f16ecc08ed499871"></a><!-- doxytag: member="rs_cl.rsh::logb" ref="a28742d6ce2f20a61f16ecc08ed499871" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float logb </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the exponent of the value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a4f9086698f1eb466ba2dccf7e331cdc3"></a><!-- doxytag: member="rs_cl.rsh::mad" ref="a4f9086698f1eb466ba2dccf7e331cdc3" args="(float a, float b, float c)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float mad </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>a</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>b</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>c</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute (a * b) + c</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a616bf7a90d8d3c73a48d2c395d9dc4ea"></a><!-- doxytag: member="rs_cl.rsh::max" ref="a616bf7a90d8d3c73a48d2c395d9dc4ea" args="(uchar v1, uchar v2)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> max </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>v1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>v2</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the maximum of two values.</p>
-<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5f61ca44b3ad4b11365b0c4137a22658"></a><!-- doxytag: member="rs_cl.rsh::min" ref="a5f61ca44b3ad4b11365b0c4137a22658" args="(uchar v1, uchar v2)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> min </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>v1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>v2</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the minimum of two values.</p>
-<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a254612a612ff7539b01a1478e03d8697"></a><!-- doxytag: member="rs_cl.rsh::mix" ref="a254612a612ff7539b01a1478e03d8697" args="(float start, float stop, float amount)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float mix </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>start</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>stop</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>amount</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>return start + ((stop - start) * amount);</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a841633bcdcaeb6a514d9c6460f0adf2d"></a><!-- doxytag: member="rs_cl.rsh::modf" ref="a841633bcdcaeb6a514d9c6460f0adf2d" args="(float x, float *iret)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float modf </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>iret</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the integral and fractional components of a number. Supports 1,2,3,4 components</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x</td><td>Source value </td></tr>
-    <tr><td class="paramname">iret</td><td>iret[0] will be set to the integral portion of the number. </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The floating point portion of the value. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a45d8176823a05b891313f3d96decf491"></a><!-- doxytag: member="rs_cl.rsh::native_exp" ref="a45d8176823a05b891313f3d96decf491" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float native_exp </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Fast approximate exp valid for inputs -86.f to 86.f Max 8192 ulps of error</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a601ee3d2bf769f1cdc39a886f7a6c986"></a><!-- doxytag: member="rs_cl.rsh::native_exp10" ref="a601ee3d2bf769f1cdc39a886f7a6c986" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float native_exp10 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Fast approximate exp10 valid for inputs -37.f to 37.f Max 8192 ulps of error</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ab354691ecd844549b27ef9202e17f7ac"></a><!-- doxytag: member="rs_cl.rsh::native_exp2" ref="ab354691ecd844549b27ef9202e17f7ac" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float native_exp2 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Fast approximate exp2 valid for inputs -125.f to 125.f Max 8192 ulps of error</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="adb11df05fb9985595af0a7bd882bdeac"></a><!-- doxytag: member="rs_cl.rsh::nextafter" ref="adb11df05fb9985595af0a7bd882bdeac" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float nextafter </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the next floating point number from x towards y.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a69c2a56f743593439d5ae5e3ec8e517f"></a><!-- doxytag: member="rs_cl.rsh::normalize" ref="a69c2a56f743593439d5ae5e3ec8e517f" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float normalize </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Normalize a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9243de1d67fcc847a89f95748d664b19"></a><!-- doxytag: member="rs_cl.rsh::pow" ref="a9243de1d67fcc847a89f95748d664b19" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float pow </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return x ^ y.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type. </p>
-
-</div>
-</div>
-<a class="anchor" id="a67d1fe795e092003f687f3cc6d3c407a"></a><!-- doxytag: member="rs_cl.rsh::pown" ref="a67d1fe795e092003f687f3cc6d3c407a" args="(float v, int p)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float pown </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>p</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return (v ^ p).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a316c30ba3e6bc11673bfd34bb4746d24"></a><!-- doxytag: member="rs_cl.rsh::powr" ref="a316c30ba3e6bc11673bfd34bb4746d24" args="(float v, float p)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float powr </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>p</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return (v ^ p). </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">v</td><td>must be greater than 0.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aceb63a0da6393b8ac2ed229bae6232d6"></a><!-- doxytag: member="rs_cl.rsh::radians" ref="aceb63a0da6393b8ac2ed229bae6232d6" args="(float degrees)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float radians </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>degrees</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Convert from degrees to radians.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a5188ac0e3af95b0956c6abeafb74fda9"></a><!-- doxytag: member="rs_cl.rsh::remainder" ref="a5188ac0e3af95b0956c6abeafb74fda9" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float remainder </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return round x/y to the nearest integer then compute the remander.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="adb0ffe344ae56ca7fc9083c1f2943e55"></a><!-- doxytag: member="rs_cl.rsh::rint" ref="adb0ffe344ae56ca7fc9083c1f2943e55" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rint </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Round to the nearest integral value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a2776b517528b8185a6bb50753af0f6cf"></a><!-- doxytag: member="rs_cl.rsh::rootn" ref="a2776b517528b8185a6bb50753af0f6cf" args="(float v, int n)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rootn </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>n</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the Nth root of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aff4846ab5b947550814d5414a2c3626f"></a><!-- doxytag: member="rs_cl.rsh::round" ref="aff4846ab5b947550814d5414a2c3626f" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float round </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Round to the nearest integral value. Half values are rounded away from zero.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a8a3992b97cb199b1c8d598996b600988"></a><!-- doxytag: member="rs_cl.rsh::rsqrt" ref="a8a3992b97cb199b1c8d598996b600988" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rsqrt </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return (1 / sqrt(value)).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9fe423cc7d4c6d767f8a608d2ee76657"></a><!-- doxytag: member="rs_cl.rsh::sign" ref="a9fe423cc7d4c6d767f8a608d2ee76657" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float sign </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the sign of a value.</p>
-<p>if (v &lt; 0) return -1.f; else if (v &gt; 0) return 1.f; else return 0.f;</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a8c8cd526b44eb55aede77cf659f24306"></a><!-- doxytag: member="rs_cl.rsh::sin" ref="a8c8cd526b44eb55aede77cf659f24306" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float sin </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the sine of a value specified in radians.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">v</td><td>The incoming value in radians Supports 1,2,3,4 components </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a892c91a30bbc713aa77105d8e9e25881"></a><!-- doxytag: member="rs_cl.rsh::sincos" ref="a892c91a30bbc713aa77105d8e9e25881" args="(float v, float *cosptr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float sincos </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>cosptr</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the sine and cosine of a value.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>sine </dd></dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
-    <tr><td class="paramname">*cosptr</td><td>cosptr[0] will be set to the cosine value.</td></tr>
-  </table>
-  </dd>
-</dl>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ae686e0cc567f7ee2b0a84706aa486e4a"></a><!-- doxytag: member="rs_cl.rsh::sinh" ref="ae686e0cc567f7ee2b0a84706aa486e4a" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float sinh </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the hyperbolic sine of a value specified in radians.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9ca027af0acf3ff22d91cd9489766976"></a><!-- doxytag: member="rs_cl.rsh::sinpi" ref="a9ca027af0acf3ff22d91cd9489766976" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float sinpi </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the sin(v * PI).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a92da0faef80c4d8f66e954c8c169a729"></a><!-- doxytag: member="rs_cl.rsh::sqrt" ref="a92da0faef80c4d8f66e954c8c169a729" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float sqrt </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the square root of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9f40337dfee48d1881b87b35aa8133dd"></a><!-- doxytag: member="rs_cl.rsh::step" ref="a9f40337dfee48d1881b87b35aa8133dd" args="(float edge, float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float step </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>edge</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>if (v &lt; edge) return 0.f; else return 1.f;</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="af12e245af8ff9bb72b5000e7c26cd8fe"></a><!-- doxytag: member="rs_cl.rsh::tan" ref="af12e245af8ff9bb72b5000e7c26cd8fe" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float tan </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the tangent of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="abc36e89ddb87ea78451d1c5921ddbd8d"></a><!-- doxytag: member="rs_cl.rsh::tanh" ref="abc36e89ddb87ea78451d1c5921ddbd8d" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float tanh </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return the hyperbolic tangent of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aee96c8910a7d8b0082574813b6b68b9a"></a><!-- doxytag: member="rs_cl.rsh::tanpi" ref="aee96c8910a7d8b0082574813b6b68b9a" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float tanpi </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return tan(v * PI)</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ab9f4cbfd2470420ee302f28cf3de6dd0"></a><!-- doxytag: member="rs_cl.rsh::tgamma" ref="ab9f4cbfd2470420ee302f28cf3de6dd0" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float tgamma </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Compute the gamma function of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ad1a7c65693231219db1babeae1c41f15"></a><!-- doxytag: member="rs_cl.rsh::trunc" ref="ad1a7c65693231219db1babeae1c41f15" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float trunc </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Round to integral using truncation.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__cl_8rsh_source.html b/docs/html/reference/renderscript/rs__cl_8rsh_source.html
deleted file mode 100644
index ae5f70e..0000000
--- a/docs/html/reference/renderscript/rs__cl_8rsh_source.html
+++ /dev/null
@@ -1,602 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__cl_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011-2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_CL_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_CL_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// Conversions</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#define CVT_FUNC_2(typeout, typein)                             \</span>
-<a name="l00028"></a>00028 <span class="preprocessor">_RS_RUNTIME typeout##2 __attribute__((overloadable))            \</span>
-<a name="l00029"></a>00029 <span class="preprocessor">        convert_##typeout##2(typein##2 v);                      \</span>
-<a name="l00030"></a>00030 <span class="preprocessor">_RS_RUNTIME typeout##3 __attribute__((overloadable))            \</span>
-<a name="l00031"></a>00031 <span class="preprocessor">        convert_##typeout##3(typein##3 v);                      \</span>
-<a name="l00032"></a>00032 <span class="preprocessor">_RS_RUNTIME typeout##4 __attribute__((overloadable))            \</span>
-<a name="l00033"></a>00033 <span class="preprocessor">        convert_##typeout##4(typein##4 v);</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#define CVT_FUNC(type)  CVT_FUNC_2(type, uchar)     \</span>
-<a name="l00037"></a>00037 <span class="preprocessor">                        CVT_FUNC_2(type, char)      \</span>
-<a name="l00038"></a>00038 <span class="preprocessor">                        CVT_FUNC_2(type, ushort)    \</span>
-<a name="l00039"></a>00039 <span class="preprocessor">                        CVT_FUNC_2(type, short)     \</span>
-<a name="l00040"></a>00040 <span class="preprocessor">                        CVT_FUNC_2(type, uint)      \</span>
-<a name="l00041"></a>00041 <span class="preprocessor">                        CVT_FUNC_2(type, int)       \</span>
-<a name="l00042"></a>00042 <span class="preprocessor">                        CVT_FUNC_2(type, float)</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 CVT_FUNC(<span class="keywordtype">char</span>)
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 
-<a name="l00056"></a>00056 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>)
-<a name="l00057"></a>00057 
-<a name="l00063"></a>00063 CVT_FUNC(<span class="keywordtype">short</span>)
-<a name="l00064"></a>00064 
-<a name="l00070"></a>00070 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>)
-<a name="l00071"></a>00071 
-<a name="l00077"></a>00077 CVT_FUNC(<span class="keywordtype">int</span>)
-<a name="l00078"></a>00078 
-<a name="l00084"></a>00084 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)
-<a name="l00085"></a>00085 
-<a name="l00091"></a>00091 CVT_FUNC(<span class="keywordtype">float</span>)
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="comment">// Float ops, 6.11.2</span>
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="preprocessor">#ifdef DOXYGEN</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 <span class="preprocessor">#define FN_FUNC_FN(fnc)</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define F_FUNC_FN(fnc)</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define IN_FUNC_FN(fnc)</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN(fnc)</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define F_FUNC_FN_FN(fnc)</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_F(fnc)</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_IN(fnc)</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_I(fnc)</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_PFN(fnc)</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_PIN(fnc)</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN_FN(fnc)</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN_F(fnc)</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_F_F(fnc)</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN_PIN(fnc)</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span>
-<a name="l00112"></a>00112 <span class="preprocessor">#else</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span>
-<a name="l00114"></a>00114 <span class="preprocessor">#define FN_FUNC_FN(fnc)                                         \</span>
-<a name="l00115"></a>00115 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v); \</span>
-<a name="l00116"></a>00116 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v); \</span>
-<a name="l00117"></a>00117 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v);</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>
-<a name="l00119"></a>00119 <span class="preprocessor">#define F_FUNC_FN(fnc)                                          \</span>
-<a name="l00120"></a>00120 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float2 v);  \</span>
-<a name="l00121"></a>00121 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float3 v);  \</span>
-<a name="l00122"></a>00122 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float4 v);</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span>
-<a name="l00124"></a>00124 <span class="preprocessor">#define IN_FUNC_FN(fnc)                                         \</span>
-<a name="l00125"></a>00125 <span class="preprocessor">_RS_RUNTIME int2 __attribute__((overloadable)) fnc(float2 v);   \</span>
-<a name="l00126"></a>00126 <span class="preprocessor">_RS_RUNTIME int3 __attribute__((overloadable)) fnc(float3 v);   \</span>
-<a name="l00127"></a>00127 <span class="preprocessor">_RS_RUNTIME int4 __attribute__((overloadable)) fnc(float4 v);</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>
-<a name="l00129"></a>00129 <span class="preprocessor">#define FN_FUNC_FN_FN(fnc)                                                  \</span>
-<a name="l00130"></a>00130 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2); \</span>
-<a name="l00131"></a>00131 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float3 v2); \</span>
-<a name="l00132"></a>00132 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2);</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span>
-<a name="l00134"></a>00134 <span class="preprocessor">#define F_FUNC_FN_FN(fnc)                                                   \</span>
-<a name="l00135"></a>00135 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float2 v1, float2 v2);  \</span>
-<a name="l00136"></a>00136 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float3 v1, float3 v2);  \</span>
-<a name="l00137"></a>00137 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float4 v1, float4 v2);</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>
-<a name="l00139"></a>00139 <span class="preprocessor">#define FN_FUNC_FN_F(fnc)                                                   \</span>
-<a name="l00140"></a>00140 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float v2);  \</span>
-<a name="l00141"></a>00141 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float v2);  \</span>
-<a name="l00142"></a>00142 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float v2);</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00144"></a>00144 <span class="preprocessor">#define FN_FUNC_FN_IN(fnc)                                                  \</span>
-<a name="l00145"></a>00145 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 v2);   \</span>
-<a name="l00146"></a>00146 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 v2);   \</span>
-<a name="l00147"></a>00147 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 v2);   \</span>
-<a name="l00148"></a>00148 <span class="preprocessor"></span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_I(fnc)                                                   \</span>
-<a name="l00150"></a>00150 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int v2);    \</span>
-<a name="l00151"></a>00151 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int v2);    \</span>
-<a name="l00152"></a>00152 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int v2);</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span>
-<a name="l00154"></a>00154 <span class="preprocessor">#define FN_FUNC_FN_PFN(fnc)                         \</span>
-<a name="l00155"></a>00155 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable))    \</span>
-<a name="l00156"></a>00156 <span class="preprocessor">        fnc(float2 v1, float2 *v2);                 \</span>
-<a name="l00157"></a>00157 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable))    \</span>
-<a name="l00158"></a>00158 <span class="preprocessor">        fnc(float3 v1, float3 *v2);                 \</span>
-<a name="l00159"></a>00159 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable))    \</span>
-<a name="l00160"></a>00160 <span class="preprocessor">        fnc(float4 v1, float4 *v2);</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span>
-<a name="l00162"></a>00162 <span class="preprocessor">#define FN_FUNC_FN_PIN(fnc)                                                 \</span>
-<a name="l00163"></a>00163 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 *v2);  \</span>
-<a name="l00164"></a>00164 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 *v2);  \</span>
-<a name="l00165"></a>00165 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 *v2);</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span>
-<a name="l00167"></a>00167 <span class="preprocessor">#define FN_FUNC_FN_FN_FN(fnc)                       \</span>
-<a name="l00168"></a>00168 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable))    \</span>
-<a name="l00169"></a>00169 <span class="preprocessor">        fnc(float2 v1, float2 v2, float2 v3);       \</span>
-<a name="l00170"></a>00170 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable))    \</span>
-<a name="l00171"></a>00171 <span class="preprocessor">        fnc(float3 v1, float3 v2, float3 v3);       \</span>
-<a name="l00172"></a>00172 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable))    \</span>
-<a name="l00173"></a>00173 <span class="preprocessor">        fnc(float4 v1, float4 v2, float4 v3);</span>
-<a name="l00174"></a>00174 <span class="preprocessor"></span>
-<a name="l00175"></a>00175 <span class="preprocessor">#define FN_FUNC_FN_FN_F(fnc)                        \</span>
-<a name="l00176"></a>00176 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable))    \</span>
-<a name="l00177"></a>00177 <span class="preprocessor">        fnc(float2 v1, float2 v2, float v3);        \</span>
-<a name="l00178"></a>00178 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable))    \</span>
-<a name="l00179"></a>00179 <span class="preprocessor">        fnc(float3 v1, float3 v2, float v3);        \</span>
-<a name="l00180"></a>00180 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable))    \</span>
-<a name="l00181"></a>00181 <span class="preprocessor">        fnc(float4 v1, float4 v2, float v3);</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>
-<a name="l00183"></a>00183 <span class="preprocessor">#define FN_FUNC_FN_F_F(fnc)                         \</span>
-<a name="l00184"></a>00184 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable))    \</span>
-<a name="l00185"></a>00185 <span class="preprocessor">        fnc(float2 v1, float v2, float v3);         \</span>
-<a name="l00186"></a>00186 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable))    \</span>
-<a name="l00187"></a>00187 <span class="preprocessor">        fnc(float3 v1, float v2, float v3);         \</span>
-<a name="l00188"></a>00188 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable))    \</span>
-<a name="l00189"></a>00189 <span class="preprocessor">        fnc(float4 v1, float v2, float v3);</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>
-<a name="l00191"></a>00191 <span class="preprocessor">#define FN_FUNC_FN_FN_PIN(fnc)                      \</span>
-<a name="l00192"></a>00192 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable))    \</span>
-<a name="l00193"></a>00193 <span class="preprocessor">        fnc(float2 v1, float2 v2, int2 *v3);        \</span>
-<a name="l00194"></a>00194 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable))    \</span>
-<a name="l00195"></a>00195 <span class="preprocessor">        fnc(float3 v1, float3 v2, int3 *v3);        \</span>
-<a name="l00196"></a>00196 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable))    \</span>
-<a name="l00197"></a>00197 <span class="preprocessor">        fnc(float4 v1, float4 v2, int4 *v3);</span>
-<a name="l00198"></a>00198 <span class="preprocessor"></span>
-<a name="l00199"></a>00199 <span class="preprocessor">#endif  // DOXYGEN</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>
-<a name="l00201"></a>00201 
-<a name="l00207"></a>00207 <span class="keyword">extern</span> <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>(<span class="keywordtype">float</span>);
-<a name="l00208"></a>00208 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>)
-<a name="l00209"></a>00209 
-<a name="l00215"></a>00215 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a>(<span class="keywordtype">float</span>);
-<a name="l00216"></a>00216 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a>)
-<a name="l00217"></a>00217 
-<a name="l00223"></a>00223 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">acospi</a>(<span class="keywordtype">float</span> v);
-<a name="l00224"></a>00224 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">acospi</a>)
-<a name="l00225"></a>00225 
-<a name="l00231"></a>00231 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a>(<span class="keywordtype">float</span>);
-<a name="l00232"></a>00232 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a>)
-<a name="l00233"></a>00233 
-<a name="l00239"></a>00239 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a>(<span class="keywordtype">float</span>);
-<a name="l00240"></a>00240 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a>)
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 
-<a name="l00248"></a>00248 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">asinpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00249"></a>00249 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">asinpi</a>)
-<a name="l00250"></a>00250 
-<a name="l00256"></a>00256 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a>(<span class="keywordtype">float</span>);
-<a name="l00257"></a>00257 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a>)
-<a name="l00258"></a>00258 
-<a name="l00268"></a>00268 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a>(<span class="keywordtype">float</span> y, <span class="keywordtype">float</span> x);
-<a name="l00269"></a>00269 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a>)
-<a name="l00270"></a>00270 
-<a name="l00276"></a>00276 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a>(<span class="keywordtype">float</span>);
-<a name="l00277"></a>00277 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a>)
-<a name="l00278"></a>00278 
-<a name="l00284"></a>00284 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">atanpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00285"></a>00285 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">atanpi</a>)
-<a name="l00286"></a>00286 
-<a name="l00296"></a>00296 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">atan2pi</a>(<span class="keywordtype">float</span> y, <span class="keywordtype">float</span> x);
-<a name="l00297"></a>00297 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">atan2pi</a>)
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 
-<a name="l00305"></a>00305 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a>(<span class="keywordtype">float</span>);
-<a name="l00306"></a>00306 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a>)
-<a name="l00307"></a>00307 
-<a name="l00313"></a>00313 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a>(<span class="keywordtype">float</span>);
-<a name="l00314"></a>00314 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a>)
-<a name="l00315"></a>00315 
-<a name="l00325"></a>00325 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00326"></a>00326 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a>)
-<a name="l00327"></a>00327 
-<a name="l00333"></a>00333 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>(<span class="keywordtype">float</span>);
-<a name="l00334"></a>00334 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>)
-<a name="l00335"></a>00335 
-<a name="l00341"></a>00341 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a>(<span class="keywordtype">float</span>);
-<a name="l00342"></a>00342 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a>)
-<a name="l00343"></a>00343 
-<a name="l00349"></a>00349 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">cospi</a>(<span class="keywordtype">float</span> v);
-<a name="l00350"></a>00350 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">cospi</a>)
-<a name="l00351"></a>00351 
-<a name="l00357"></a>00357 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a>(<span class="keywordtype">float</span>);
-<a name="l00358"></a>00358 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a>)
-<a name="l00359"></a>00359 
-<a name="l00365"></a>00365 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a>(<span class="keywordtype">float</span>);
-<a name="l00366"></a>00366 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a>)
-<a name="l00367"></a>00367 
-<a name="l00373"></a>00373 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a>(<span class="keywordtype">float</span>);
-<a name="l00374"></a>00374 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a>)
-<a name="l00375"></a>00375 
-<a name="l00381"></a>00381 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a>(<span class="keywordtype">float</span>);
-<a name="l00382"></a>00382 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a>)
-<a name="l00383"></a>00383 
-<a name="l00390"></a>00390 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00391"></a>00391 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a>)
-<a name="l00392"></a>00392 
-<a name="l00398"></a>00398 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">exp10</a>(<span class="keywordtype">float</span> v);
-<a name="l00399"></a>00399 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">exp10</a>)
-<a name="l00400"></a>00400 
-<a name="l00406"></a>00406 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a>(<span class="keywordtype">float</span>);
-<a name="l00407"></a>00407 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a>)
-<a name="l00408"></a>00408 
-<a name="l00414"></a>00414 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a>(<span class="keywordtype">float</span>);
-<a name="l00415"></a>00415 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a>)
-<a name="l00416"></a>00416 
-<a name="l00423"></a>00423 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a>(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00424"></a>00424 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a>)
-<a name="l00425"></a>00425 
-<a name="l00431"></a>00431 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a>(<span class="keywordtype">float</span>);
-<a name="l00432"></a>00432 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a>)
-<a name="l00433"></a>00433 
-<a name="l00439"></a>00439 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a>(<span class="keywordtype">float</span> a, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> c);
-<a name="l00440"></a>00440 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a>)
-<a name="l00441"></a>00441 
-<a name="l00449"></a>00449 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00450"></a>00450 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a>);
-<a name="l00451"></a>00451 FN_FUNC_FN_F(fmax);
-<a name="l00452"></a>00452 
-<a name="l00459"></a>00459 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00460"></a>00460 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a>);
-<a name="l00461"></a>00461 FN_FUNC_FN_F(fmin);
-<a name="l00462"></a>00462 
-<a name="l00468"></a>00468 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00469"></a>00469 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a>)
-<a name="l00470"></a>00470 
-<a name="l00477"></a>00477 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> *iptr);
-<a name="l00478"></a>00478 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>)
-<a name="l00479"></a>00479 
-<a name="l00485"></a><a class="code" href="rs__cl_8rsh.html#a84b546baf72a871a5ba688d434d6ce2b">00485</a> static inline <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<span class="keywordtype">float</span> v) {
-<a name="l00486"></a>00486     <span class="keywordtype">float</span> unused;
-<a name="l00487"></a>00487     <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &amp;unused);
-<a name="l00488"></a>00488 }
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490 <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> v) {
-<a name="l00491"></a>00491     <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> unused;
-<a name="l00492"></a>00492     <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &amp;unused);
-<a name="l00493"></a>00493 }
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495 <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> v) {
-<a name="l00496"></a>00496     <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> unused;
-<a name="l00497"></a>00497     <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &amp;unused);
-<a name="l00498"></a>00498 }
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500 <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> v) {
-<a name="l00501"></a>00501     <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> unused;
-<a name="l00502"></a>00502     <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &amp;unused);
-<a name="l00503"></a>00503 }
-<a name="l00504"></a>00504 
-<a name="l00511"></a>00511 <span class="keyword">extern</span> <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> *iptr);
-<a name="l00512"></a>00512 FN_FUNC_FN_PIN(<a class="code" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a>)
-<a name="l00513"></a>00513 
-<a name="l00519"></a>00519 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00520"></a>00520 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a>)
-<a name="l00521"></a>00521 
-<a name="l00527"></a>00527 extern <span class="keywordtype">int</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a>(<span class="keywordtype">float</span>);
-<a name="l00528"></a>00528 IN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a>)
-<a name="l00529"></a>00529 
-<a name="l00536"></a>00536 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">int</span> y);
-<a name="l00537"></a>00537 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>)
-<a name="l00538"></a>00538 FN_FUNC_FN_I(<a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>)
-<a name="l00539"></a>00539 
-<a name="l00545"></a>00545 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>(<span class="keywordtype">float</span>);
-<a name="l00546"></a>00546 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>)
-<a name="l00547"></a>00547 
-<a name="l00554"></a>00554 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">int</span>* y);
-<a name="l00555"></a>00555 FN_FUNC_FN_PIN(<a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>)
-<a name="l00556"></a>00556 
-<a name="l00562"></a>00562 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a>(<span class="keywordtype">float</span>);
-<a name="l00563"></a>00563 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a>)
-<a name="l00564"></a>00564 
-<a name="l00570"></a>00570 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a>(<span class="keywordtype">float</span>);
-<a name="l00571"></a>00571 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a>)
-<a name="l00572"></a>00572 
-<a name="l00578"></a>00578 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">log2</a>(<span class="keywordtype">float</span> v);
-<a name="l00579"></a>00579 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">log2</a>)
-<a name="l00580"></a>00580 
-<a name="l00586"></a>00586 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a>(<span class="keywordtype">float</span> v);
-<a name="l00587"></a>00587 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a>)
-<a name="l00588"></a>00588 
-<a name="l00594"></a>00594 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a>(<span class="keywordtype">float</span>);
-<a name="l00595"></a>00595 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a>)
-<a name="l00596"></a>00596 
-<a name="l00602"></a>00602 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a>(<span class="keywordtype">float</span> a, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> c);
-<a name="l00603"></a>00603 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a>)
-<a name="l00604"></a>00604 
-<a name="l00613"></a>00613 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> *iret);
-<a name="l00614"></a>00614 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a>);
-<a name="l00615"></a>00615 
-<a name="l00616"></a>00616 extern <span class="keywordtype">float</span> __attribute__((overloadable)) nan(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>);
-<a name="l00617"></a>00617 
-<a name="l00623"></a>00623 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00624"></a>00624 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a>)
-<a name="l00625"></a>00625 
-<a name="l00631"></a>00631 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">pown</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> p);
-<a name="l00632"></a>00632 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">pown</a>)
-<a name="l00633"></a>00633 
-<a name="l00640"></a>00640 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">powr</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> p);
-<a name="l00641"></a>00641 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">powr</a>)
-<a name="l00642"></a>00642 
-<a name="l00648"></a>00648 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00649"></a>00649 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a>)
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651 <span class="comment">// document once we know the precision of bionic</span>
-<a name="l00652"></a>00652 extern <span class="keywordtype">float</span> __attribute__((overloadable)) remquo(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">int</span> *);
-<a name="l00653"></a>00653 FN_FUNC_FN_FN_PIN(remquo)
-<a name="l00654"></a>00654 
-<a name="l00660"></a>00660 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a>(<span class="keywordtype">float</span>);
-<a name="l00661"></a>00661 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a>)
-<a name="l00662"></a>00662 
-<a name="l00668"></a>00668 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rootn</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> n);
-<a name="l00669"></a>00669 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rootn</a>)
-<a name="l00670"></a>00670 
-<a name="l00676"></a>00676 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a>(<span class="keywordtype">float</span>);
-<a name="l00677"></a>00677 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a>)
-<a name="l00678"></a>00678 
-<a name="l00684"></a>00684 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(<span class="keywordtype">float</span>);
-<a name="l00685"></a>00685 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>)
-<a name="l00686"></a>00686 
-<a name="l00692"></a>00692 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rsqrt</a>(<span class="keywordtype">float</span> v);
-<a name="l00693"></a>00693 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rsqrt</a>)
-<a name="l00694"></a>00694 
-<a name="l00701"></a>00701 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(<span class="keywordtype">float</span> v);
-<a name="l00702"></a>00702 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>)
-<a name="l00703"></a>00703 
-<a name="l00713"></a>00713 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">sincos</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> *cosptr);
-<a name="l00714"></a>00714 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">sincos</a>);
-<a name="l00715"></a>00715 
-<a name="l00721"></a>00721 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a>(<span class="keywordtype">float</span>);
-<a name="l00722"></a>00722 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a>)
-<a name="l00723"></a>00723 
-<a name="l00729"></a>00729 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">sinpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00730"></a>00730 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">sinpi</a>)
-<a name="l00731"></a>00731 
-<a name="l00738"></a>00738 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a>(<span class="keywordtype">float</span> v);
-<a name="l00739"></a>00739 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a>)
-<a name="l00740"></a>00740 
-<a name="l00747"></a>00747 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a>(<span class="keywordtype">float</span>);
-<a name="l00748"></a>00748 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a>)
-<a name="l00749"></a>00749 
-<a name="l00755"></a>00755 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">tanpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00756"></a>00756 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">tanpi</a>)
-<a name="l00757"></a>00757 
-<a name="l00763"></a>00763 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a>(<span class="keywordtype">float</span>);
-<a name="l00764"></a>00764 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a>)
-<a name="l00765"></a>00765 
-<a name="l00771"></a>00771 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a>(<span class="keywordtype">float</span>);
-<a name="l00772"></a>00772 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a>)
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774 <span class="preprocessor">#ifdef DOXYGEN</span>
-<a name="l00775"></a>00775 <span class="preprocessor"></span>
-<a name="l00776"></a>00776 <span class="preprocessor">#define XN_FUNC_YN(typeout, fnc, typein)                                \</span>
-<a name="l00777"></a>00777 <span class="preprocessor">extern typeout __attribute__((overloadable)) fnc(typein v);</span>
-<a name="l00778"></a>00778 <span class="preprocessor"></span>
-<a name="l00779"></a>00779 <span class="preprocessor">#define XN_FUNC_XN_XN_BODY(type, fnc, body)         \</span>
-<a name="l00780"></a>00780 <span class="preprocessor">_RS_RUNTIME type __attribute__((overloadable))      \</span>
-<a name="l00781"></a>00781 <span class="preprocessor">        fnc(type v1, type v2);</span>
-<a name="l00782"></a>00782 <span class="preprocessor"></span>
-<a name="l00783"></a>00783 <span class="preprocessor">#else</span>
-<a name="l00784"></a>00784 <span class="preprocessor"></span>
-<a name="l00785"></a>00785 <span class="preprocessor">#define XN_FUNC_YN(typeout, fnc, typein)                                \</span>
-<a name="l00786"></a>00786 <span class="preprocessor">extern typeout __attribute__((overloadable)) fnc(typein v);             \</span>
-<a name="l00787"></a>00787 <span class="preprocessor">_RS_RUNTIME typeout##2 __attribute__((overloadable)) fnc(typein##2 v);  \</span>
-<a name="l00788"></a>00788 <span class="preprocessor">_RS_RUNTIME typeout##3 __attribute__((overloadable)) fnc(typein##3 v);  \</span>
-<a name="l00789"></a>00789 <span class="preprocessor">_RS_RUNTIME typeout##4 __attribute__((overloadable)) fnc(typein##4 v);</span>
-<a name="l00790"></a>00790 <span class="preprocessor"></span>
-<a name="l00791"></a>00791 <span class="preprocessor">#define XN_FUNC_XN_XN_BODY(type, fnc, body)         \</span>
-<a name="l00792"></a>00792 <span class="preprocessor">_RS_RUNTIME type __attribute__((overloadable))      \</span>
-<a name="l00793"></a>00793 <span class="preprocessor">        fnc(type v1, type v2);                      \</span>
-<a name="l00794"></a>00794 <span class="preprocessor">_RS_RUNTIME type##2 __attribute__((overloadable))   \</span>
-<a name="l00795"></a>00795 <span class="preprocessor">        fnc(type##2 v1, type##2 v2);                \</span>
-<a name="l00796"></a>00796 <span class="preprocessor">_RS_RUNTIME type##3 __attribute__((overloadable))   \</span>
-<a name="l00797"></a>00797 <span class="preprocessor">        fnc(type##3 v1, type##3 v2);                \</span>
-<a name="l00798"></a>00798 <span class="preprocessor">_RS_RUNTIME type##4 __attribute__((overloadable))   \</span>
-<a name="l00799"></a>00799 <span class="preprocessor">        fnc(type##4 v1, type##4 v2);</span>
-<a name="l00800"></a>00800 <span class="preprocessor"></span>
-<a name="l00801"></a>00801 <span class="preprocessor">#endif  // DOXYGEN</span>
-<a name="l00802"></a>00802 <span class="preprocessor"></span>
-<a name="l00803"></a>00803 <span class="preprocessor">#define UIN_FUNC_IN(fnc)          \</span>
-<a name="l00804"></a>00804 <span class="preprocessor">XN_FUNC_YN(uchar, fnc, char)      \</span>
-<a name="l00805"></a>00805 <span class="preprocessor">XN_FUNC_YN(ushort, fnc, short)    \</span>
-<a name="l00806"></a>00806 <span class="preprocessor">XN_FUNC_YN(uint, fnc, int)</span>
-<a name="l00807"></a>00807 <span class="preprocessor"></span>
-<a name="l00808"></a>00808 <span class="preprocessor">#define IN_FUNC_IN(fnc)           \</span>
-<a name="l00809"></a>00809 <span class="preprocessor">XN_FUNC_YN(uchar, fnc, uchar)     \</span>
-<a name="l00810"></a>00810 <span class="preprocessor">XN_FUNC_YN(char, fnc, char)       \</span>
-<a name="l00811"></a>00811 <span class="preprocessor">XN_FUNC_YN(ushort, fnc, ushort)   \</span>
-<a name="l00812"></a>00812 <span class="preprocessor">XN_FUNC_YN(short, fnc, short)     \</span>
-<a name="l00813"></a>00813 <span class="preprocessor">XN_FUNC_YN(uint, fnc, uint)       \</span>
-<a name="l00814"></a>00814 <span class="preprocessor">XN_FUNC_YN(int, fnc, int)</span>
-<a name="l00815"></a>00815 <span class="preprocessor"></span>
-<a name="l00816"></a>00816 <span class="preprocessor">#define IN_FUNC_IN_IN_BODY(fnc, body)   \</span>
-<a name="l00817"></a>00817 <span class="preprocessor">XN_FUNC_XN_XN_BODY(uchar, fnc, body)    \</span>
-<a name="l00818"></a>00818 <span class="preprocessor">XN_FUNC_XN_XN_BODY(char, fnc, body)     \</span>
-<a name="l00819"></a>00819 <span class="preprocessor">XN_FUNC_XN_XN_BODY(ushort, fnc, body)   \</span>
-<a name="l00820"></a>00820 <span class="preprocessor">XN_FUNC_XN_XN_BODY(short, fnc, body)    \</span>
-<a name="l00821"></a>00821 <span class="preprocessor">XN_FUNC_XN_XN_BODY(uint, fnc, body)     \</span>
-<a name="l00822"></a>00822 <span class="preprocessor">XN_FUNC_XN_XN_BODY(int, fnc, body)      \</span>
-<a name="l00823"></a>00823 <span class="preprocessor">XN_FUNC_XN_XN_BODY(float, fnc, body)</span>
-<a name="l00824"></a>00824 <span class="preprocessor"></span>
-<a name="l00831"></a>00831 UIN_FUNC_IN(<a class="code" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">abs</a>)
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833 
-<a name="l00838"></a>00838 IN_FUNC_IN(<a class="code" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">clz</a>)
-<a name="l00839"></a>00839 
-<a name="l00845"></a>00845 IN_FUNC_IN_IN_BODY(<a class="code" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">min</a>, (v1 &lt; v2 ? v1 : v2))
-<a name="l00846"></a>00846 FN_FUNC_FN_F(min)
-<a name="l00847"></a>00847 
-<a name="l00853"></a>00853 IN_FUNC_IN_IN_BODY(<a class="code" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">max</a>, (v1 &gt; v2 ? v1 : v2))
-<a name="l00854"></a>00854 FN_FUNC_FN_F(max)
-<a name="l00855"></a>00855 
-<a name="l00863"></a>00863 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a>(<span class="keywordtype">float</span> amount, <span class="keywordtype">float</span> low, <span class="keywordtype">float</span> high);
-<a name="l00864"></a>00864 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a>)
-<a name="l00865"></a>00865 FN_FUNC_FN_F_F(<a class="code" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a>)
-<a name="l00866"></a>00866 
-<a name="l00872"></a>00872 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a>(<span class="keywordtype">float</span> <a class="code" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">radians</a>);
-<a name="l00873"></a>00873 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a>)
-<a name="l00874"></a>00874 
-<a name="l00880"></a>00880 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a>(<span class="keywordtype">float</span> start, <span class="keywordtype">float</span> stop, <span class="keywordtype">float</span> amount);
-<a name="l00881"></a>00881 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a>)
-<a name="l00882"></a>00882 FN_FUNC_FN_FN_F(<a class="code" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a>)
-<a name="l00883"></a>00883 
-<a name="l00889"></a>00889 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) radians(<span class="keywordtype">float</span> <a class="code" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a>);
-<a name="l00890"></a>00890 FN_FUNC_FN(radians)
-<a name="l00891"></a>00891 
-<a name="l00900"></a>00900 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a>(<span class="keywordtype">float</span> edge, <span class="keywordtype">float</span> v);
-<a name="l00901"></a>00901 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a>)
-<a name="l00902"></a>00902 FN_FUNC_FN_F(<a class="code" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a>)
-<a name="l00903"></a>00903 
-<a name="l00904"></a>00904 <span class="comment">// not implemented</span>
-<a name="l00905"></a>00905 extern <span class="keywordtype">float</span> __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00906"></a>00906 extern <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>, float2, float2);
-<a name="l00907"></a>00907 extern <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>, float3, float3);
-<a name="l00908"></a>00908 extern <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>, float4, float4);
-<a name="l00909"></a>00909 extern float2 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float2);
-<a name="l00910"></a>00910 extern float3 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float3);
-<a name="l00911"></a>00911 extern float4 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float4);
-<a name="l00912"></a>00912 
-<a name="l00922"></a>00922 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">sign</a>(<span class="keywordtype">float</span> v);
-<a name="l00923"></a>00923 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">sign</a>)
-<a name="l00924"></a>00924 
-<a name="l00930"></a>00930 _RS_RUNTIME float3 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">cross</a>(float3 lhs, float3 rhs);
-<a name="l00931"></a>00931 _RS_RUNTIME float4 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">cross</a>(float4 lhs, float4 rhs);
-<a name="l00932"></a>00932 
-<a name="l00938"></a>00938 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
-<a name="l00939"></a>00939 F_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>)
-<a name="l00940"></a>00940 
-<a name="l00946"></a>00946 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(<span class="keywordtype">float</span> v);
-<a name="l00947"></a>00947 F_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>)
-<a name="l00948"></a>00948 
-<a name="l00954"></a>00954 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">distance</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
-<a name="l00955"></a>00955 F_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">distance</a>)
-<a name="l00956"></a>00956 
-<a name="l00962"></a>00962 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">normalize</a>(<span class="keywordtype">float</span> v);
-<a name="l00963"></a>00963 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">normalize</a>)
-<a name="l00964"></a>00964 
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966 <span class="comment">// New approx API functions</span>
-<a name="l00967"></a>00967 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 17))</span>
-<a name="l00968"></a>00968 <span class="preprocessor"></span>
-<a name="l00974"></a>00974 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">half_recip</a>(<span class="keywordtype">float</span>);
-<a name="l00975"></a>00975 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">half_recip</a>)
-<a name="l00976"></a>00976 
-<a name="l00982"></a>00982 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">half_sqrt</a>(<span class="keywordtype">float</span>);
-<a name="l00983"></a>00983 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">half_sqrt</a>)
-<a name="l00984"></a>00984 
-<a name="l00990"></a>00990 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">half_rsqrt</a>(<span class="keywordtype">float</span> v);
-<a name="l00991"></a>00991 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">half_rsqrt</a>)
-<a name="l00992"></a>00992 
-<a name="l00998"></a>00998 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">fast_length</a>(<span class="keywordtype">float</span> v);
-<a name="l00999"></a>00999 F_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">fast_length</a>)
-<a name="l01000"></a>01000 
-<a name="l01006"></a>01006 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">fast_distance</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
-<a name="l01007"></a>01007 F_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">fast_distance</a>)
-<a name="l01008"></a>01008 
-<a name="l01014"></a>01014 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">fast_normalize</a>(<span class="keywordtype">float</span> v);
-<a name="l01015"></a>01015 F_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">fast_normalize</a>)
-<a name="l01016"></a>01016 
-<a name="l01017"></a>01017 <span class="preprocessor">#endif  // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 17))</span>
-<a name="l01018"></a>01018 <span class="preprocessor"></span>
-<a name="l01019"></a>01019 
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 18))</span>
-<a name="l01022"></a>01022 <span class="preprocessor"></span><span class="comment">// Fast native math functions.</span>
-<a name="l01023"></a>01023 
-<a name="l01024"></a>01024 
-<a name="l01032"></a>01032 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">native_exp2</a>(<span class="keywordtype">float</span> v);
-<a name="l01033"></a>01033 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">native_exp2</a>)
-<a name="l01034"></a>01034 
-<a name="l01042"></a>01042 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">native_exp</a>(<span class="keywordtype">float</span> v);
-<a name="l01043"></a>01043 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">native_exp</a>)
-<a name="l01044"></a>01044 
-<a name="l01052"></a>01052 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">native_exp10</a>(<span class="keywordtype">float</span> v);
-<a name="l01053"></a>01053 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">native_exp10</a>)
-<a name="l01054"></a>01054 
-<a name="l01055"></a>01055 
-<a name="l01056"></a>01056 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_log2(<span class="keywordtype">float</span> v);
-<a name="l01057"></a>01057 FN_FUNC_FN(native_log2)
-<a name="l01058"></a>01058 
-<a name="l01059"></a>01059 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_log(<span class="keywordtype">float</span> v);
-<a name="l01060"></a>01060 FN_FUNC_FN(native_log)
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_log10(<span class="keywordtype">float</span> v);
-<a name="l01063"></a>01063 FN_FUNC_FN(native_log10)
-<a name="l01064"></a>01064 
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_powr(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> y);
-<a name="l01067"></a>01067 FN_FUNC_FN_FN(native_powr)
-<a name="l01068"></a>01068 
-<a name="l01069"></a>01069 
-<a name="l01070"></a>01070 <span class="preprocessor">#endif  // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 18))</span>
-<a name="l01071"></a>01071 <span class="preprocessor"></span>
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073 <span class="preprocessor">#undef CVT_FUNC</span>
-<a name="l01074"></a>01074 <span class="preprocessor"></span><span class="preprocessor">#undef CVT_FUNC_2</span>
-<a name="l01075"></a>01075 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN</span>
-<a name="l01076"></a>01076 <span class="preprocessor"></span><span class="preprocessor">#undef F_FUNC_FN</span>
-<a name="l01077"></a>01077 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_FN</span>
-<a name="l01078"></a>01078 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN</span>
-<a name="l01079"></a>01079 <span class="preprocessor"></span><span class="preprocessor">#undef F_FUNC_FN_FN</span>
-<a name="l01080"></a>01080 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_F</span>
-<a name="l01081"></a>01081 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_IN</span>
-<a name="l01082"></a>01082 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_I</span>
-<a name="l01083"></a>01083 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_PFN</span>
-<a name="l01084"></a>01084 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_PIN</span>
-<a name="l01085"></a>01085 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_FN</span>
-<a name="l01086"></a>01086 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_F</span>
-<a name="l01087"></a>01087 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_F_F</span>
-<a name="l01088"></a>01088 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_PIN</span>
-<a name="l01089"></a>01089 <span class="preprocessor"></span><span class="preprocessor">#undef XN_FUNC_YN</span>
-<a name="l01090"></a>01090 <span class="preprocessor"></span><span class="preprocessor">#undef UIN_FUNC_IN</span>
-<a name="l01091"></a>01091 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_IN</span>
-<a name="l01092"></a>01092 <span class="preprocessor"></span><span class="preprocessor">#undef XN_FUNC_XN_XN_BODY</span>
-<a name="l01093"></a>01093 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_IN_IN_BODY</span>
-<a name="l01094"></a>01094 <span class="preprocessor"></span>
-<a name="l01095"></a>01095 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__core_8rsh.html b/docs/html/reference/renderscript/rs__core_8rsh.html
deleted file mode 100644
index 132488d..0000000
--- a/docs/html/reference/renderscript/rs__core_8rsh.html
+++ /dev/null
@@ -1,361 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#typedef-members">Typedefs</a> &#124;
-<a href="#enum-members">Enumerations</a> &#124;
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__allocation_8rsh_source.html">rs_allocation.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__atomic_8rsh_source.html">rs_atomic.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__debug_8rsh_source.html">rs_debug.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__element_8rsh_source.html">rs_element.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__matrix_8rsh_source.html">rs_matrix.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__object_8rsh_source.html">rs_object.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__sampler_8rsh_source.html">rs_sampler.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>&quot;</code><br/>
-</div><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__script__call.html">rs_script_call</a></td></tr>
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structrs__script__call.html">rs_script_call</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a></td></tr>
-<tr><td colspan="2"><h2><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> </td></tr>
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a> (int cmdID)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a508003cadad2d37d41e2de7e9226f859">rsSendToClient</a> (int cmdID, const void *data, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a> (int cmdID)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#afc93b00be08f58512a6ab6a87feb9515">rsSendToClientBlocking</a> (int cmdID, const void *data, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output, const void *usrData, <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a> usrDataLen, const <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a38c803ed805dd1362442977eae70c41d">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output, const void *usrData, <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a> usrDataLen)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a6c541fa49b6fb9b528c2a147eaf764da">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>todo-jsams </p>
-
-<p>Definition in file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
-</div><hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="ae8756b32e23445f287960b9d0ffb449c"></a><!-- doxytag: member="rs_core.rsh::rs_script_call_t" ref="ae8756b32e23445f287960b9d0ffb449c" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef struct <a class="el" href="structrs__script__call.html">rs_script_call</a>  <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Structure to provide extra information to a rsForEach call. Primarly used to restrict the call to a subset of cells in the allocation. </p>
-
-</div>
-</div>
-<hr/><h2>Enumeration Type Documentation</h2>
-<a class="anchor" id="ae1755c901e8acb42510ad10b4e104746"></a><!-- doxytag: member="rs_core.rsh::rs_for_each_strategy" ref="ae1755c901e8acb42510ad10b4e104746" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Launch order hint for rsForEach calls. This provides a hint to the system to determine in which order the root function of the target is called with each cell of the allocation.</p>
-<p>This is a hint and implementations may not obey the order. </p>
-
-<p>Definition at line <a class="el" href="rs__core_8rsh_source.html#l00096">96</a> of file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a64271d266928b06ebd82ec90b756eb23"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="a64271d266928b06ebd82ec90b756eb23" args="(rs_script script, rs_allocation input, rs_allocation output, const void *usrData, size_t usrDataLen, const rs_script_call_t *)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsForEach </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a>&#160;</td>
-          <td class="paramname"><em>script</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>input</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>output</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const void *&#160;</td>
-          <td class="paramname"><em>usrData</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a>&#160;</td>
-          <td class="paramname"><em>usrDataLen</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a> *&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Make a script to script call to launch work. One of the input or output is required to be a valid object. The input and output must be of the same dimensions. API 10-13</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">script</td><td>The target script to call </td></tr>
-    <tr><td class="paramname">input</td><td>The allocation to source data from </td></tr>
-    <tr><td class="paramname">output</td><td>the allocation to write date into </td></tr>
-    <tr><td class="paramname">usrData</td><td>The user definied params to pass to the root script. May be NULL. </td></tr>
-    <tr><td class="paramname">sc</td><td>Extra control infomation used to select a sub-region of the allocation to be processed or suggest a walking strategy. May be NULL. Make a script to script call to launch work. One of the input or output is required to be a valid object. The input and output must be of the same dimensions. API 14+</td></tr>
-    <tr><td class="paramname">script</td><td>The target script to call </td></tr>
-    <tr><td class="paramname">input</td><td>The allocation to source data from </td></tr>
-    <tr><td class="paramname">output</td><td>the allocation to write date into </td></tr>
-    <tr><td class="paramname">usrData</td><td>The user definied params to pass to the root script. May be NULL. </td></tr>
-    <tr><td class="paramname">usrDataLen</td><td>The size of the userData structure. This will be used to perform a shallow copy of the data if necessary. </td></tr>
-    <tr><td class="paramname">sc</td><td>Extra control infomation used to select a sub-region of the allocation to be processed or suggest a walking strategy. May be NULL. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a38c803ed805dd1362442977eae70c41d"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="a38c803ed805dd1362442977eae70c41d" args="(rs_script script, rs_allocation input, rs_allocation output, const void *usrData, size_t usrDataLen)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsForEach </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a>&#160;</td>
-          <td class="paramname"><em>script</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>input</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>output</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const void *&#160;</td>
-          <td class="paramname"><em>usrData</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a>&#160;</td>
-          <td class="paramname"><em>usrDataLen</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6c541fa49b6fb9b528c2a147eaf764da"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="a6c541fa49b6fb9b528c2a147eaf764da" args="(rs_script script, rs_allocation input, rs_allocation output)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsForEach </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a>&#160;</td>
-          <td class="paramname"><em>script</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>input</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>output</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a91cfbca99f87ef144bea2cdf1e8473ca"></a><!-- doxytag: member="rs_core.rsh::rsSendToClient" ref="a91cfbca99f87ef144bea2cdf1e8473ca" args="(int cmdID)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsSendToClient </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>cmdID</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Send a message back to the client. Will not block and returns true if the message was sendable and false if the fifo was full. A message ID is required. Data payload is optional. </p>
-
-</div>
-</div>
-<a class="anchor" id="a508003cadad2d37d41e2de7e9226f859"></a><!-- doxytag: member="rs_core.rsh::rsSendToClient" ref="a508003cadad2d37d41e2de7e9226f859" args="(int cmdID, const void *data, uint len)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsSendToClient </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>cmdID</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const void *&#160;</td>
-          <td class="paramname"><em>data</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>len</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6e4ff6388e8c6978ed17447214f2a2e2"></a><!-- doxytag: member="rs_core.rsh::rsSendToClientBlocking" ref="a6e4ff6388e8c6978ed17447214f2a2e2" args="(int cmdID)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSendToClientBlocking </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>cmdID</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Send a message back to the client, blocking until the message is queued. A message ID is required. Data payload is optional. </p>
-
-</div>
-</div>
-<a class="anchor" id="afc93b00be08f58512a6ab6a87feb9515"></a><!-- doxytag: member="rs_core.rsh::rsSendToClientBlocking" ref="afc93b00be08f58512a6ab6a87feb9515" args="(int cmdID, const void *data, uint len)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSendToClientBlocking </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>cmdID</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const void *&#160;</td>
-          <td class="paramname"><em>data</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>len</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__core_8rsh_source.html b/docs/html/reference/renderscript/rs__core_8rsh_source.html
deleted file mode 100644
index ddc870d..0000000
--- a/docs/html/reference/renderscript/rs__core_8rsh_source.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__core_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011-2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00046"></a>00046 <span class="preprocessor">#ifndef __RS_CORE_RSH__</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define __RS_CORE_RSH__</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#define _RS_RUNTIME extern</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include &quot;<a class="code" href="rs__types_8rsh.html">rs_types.rsh</a>&quot;</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include &quot;<a class="code" href="rs__allocation_8rsh.html" title="Allocation routines.">rs_allocation.rsh</a>&quot;</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include &quot;<a class="code" href="rs__atomic_8rsh.html" title="Atomic routines.">rs_atomic.rsh</a>&quot;</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include &quot;<a class="code" href="rs__cl_8rsh.html" title="Basic math functions.">rs_cl.rsh</a>&quot;</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include &quot;<a class="code" href="rs__debug_8rsh.html" title="Utility debugging routines.">rs_debug.rsh</a>&quot;</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include &quot;<a class="code" href="rs__element_8rsh.html" title="Element routines.">rs_element.rsh</a>&quot;</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include &quot;<a class="code" href="rs__math_8rsh.html">rs_math.rsh</a>&quot;</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include &quot;<a class="code" href="rs__matrix_8rsh.html" title="Matrix routines.">rs_matrix.rsh</a>&quot;</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include &quot;<a class="code" href="rs__object_8rsh.html" title="Object routines.">rs_object.rsh</a>&quot;</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include &quot;<a class="code" href="rs__quaternion_8rsh.html" title="Quaternion routines.">rs_quaternion.rsh</a>&quot;</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include &quot;<a class="code" href="rs__sampler_8rsh.html" title="Sampler routines.">rs_sampler.rsh</a>&quot;</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include &quot;<a class="code" href="rs__time_8rsh.html" title="RenderScript time routines.">rs_time.rsh</a>&quot;</span>
-<a name="l00063"></a>00063 
-<a name="l00069"></a>00069 <span class="keyword">extern</span> <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00070"></a>00070     <a class="code" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a>(<span class="keywordtype">int</span> cmdID);
-<a name="l00074"></a>00074 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00075"></a>00075     <a class="code" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a>(<span class="keywordtype">int</span> cmdID, const <span class="keywordtype">void</span> *data, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
-<a name="l00080"></a>00080 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00081"></a>00081     <a class="code" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a>(<span class="keywordtype">int</span> cmdID);
-<a name="l00085"></a>00085 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00086"></a>00086     <a class="code" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a>(<span class="keywordtype">int</span> cmdID, const <span class="keywordtype">void</span> *data, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 
-<a name="l00096"></a><a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">00096</a> enum <a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> {
-<a name="l00097"></a>00097     RS_FOR_EACH_STRATEGY_SERIAL = 0,
-<a name="l00098"></a>00098     RS_FOR_EACH_STRATEGY_DONT_CARE = 1,
-<a name="l00099"></a>00099     RS_FOR_EACH_STRATEGY_DST_LINEAR = 2,
-<a name="l00100"></a>00100     RS_FOR_EACH_STRATEGY_TILE_SMALL= 3,
-<a name="l00101"></a>00101     RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4,
-<a name="l00102"></a>00102     RS_FOR_EACH_STRATEGY_TILE_LARGE = 5
-<a name="l00103"></a>00103 };
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 
-<a name="l00110"></a><a class="code" href="structrs__script__call.html">00110</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structrs__script__call.html">rs_script_call</a> {
-<a name="l00111"></a>00111     <span class="keyword">enum</span> <a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> strategy;
-<a name="l00112"></a>00112     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> xStart;
-<a name="l00113"></a>00113     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> xEnd;
-<a name="l00114"></a>00114     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> yStart;
-<a name="l00115"></a>00115     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> yEnd;
-<a name="l00116"></a>00116     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> zStart;
-<a name="l00117"></a>00117     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> zEnd;
-<a name="l00118"></a>00118     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> arrayStart;
-<a name="l00119"></a>00119     <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> arrayEnd;
-<a name="l00120"></a>00120 } <a class="code" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a>;
-<a name="l00121"></a>00121 
-<a name="l00138"></a>00138 <span class="preprocessor">#if !defined(RS_VERSION) || (RS_VERSION &lt; 14)</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00140"></a>00140     <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input,
-<a name="l00141"></a>00141               <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output, const <span class="keywordtype">void</span> * usrData,
-<a name="l00142"></a>00142               const <a class="code" href="structrs__script__call.html">rs_script_call_t</a> *sc);
-<a name="l00146"></a>00146 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00147"></a>00147     <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input,
-<a name="l00148"></a>00148               <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output, const <span class="keywordtype">void</span> * usrData);
-<a name="l00149"></a>00149 <span class="preprocessor">#else</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span>
-<a name="l00169"></a>00169 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00170"></a>00170     <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output,
-<a name="l00171"></a>00171               const <span class="keywordtype">void</span> * usrData, <span class="keywordtype">size_t</span> usrDataLen, const <a class="code" href="structrs__script__call.html">rs_script_call_t</a> *);
-<a name="l00175"></a>00175 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00176"></a>00176     <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output,
-<a name="l00177"></a>00177               const <span class="keywordtype">void</span> * usrData, <span class="keywordtype">size_t</span> usrDataLen);
-<a name="l00181"></a>00181 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00182"></a>00182     <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output);
-<a name="l00183"></a>00183 <span class="preprocessor">#endif</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="preprocessor">#undef _RS_RUNTIME</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>
-<a name="l00189"></a>00189 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__debug_8rsh.html b/docs/html/reference/renderscript/rs__debug_8rsh.html
deleted file mode 100644
index cb7eb65..0000000
--- a/docs/html/reference/renderscript/rs__debug_8rsh.html
+++ /dev/null
@@ -1,662 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a> (const char *, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aebd4d3e687a397db1a817ca6d46aed29">rsDebug</a> (const char *, float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ab1731408774f01186aff59b89c47fe32">rsDebug</a> (const char *, float, float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a6bb20c16c9fcc613158ca8c6f0dd81bd">rsDebug</a> (const char *, float, float, float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a0a59285be7204bde7b199c77578b6a42">rsDebug</a> (const char *, double)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a47b07360e1df6885b3f2eb207408db2c">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aee885d367bb22f5c437dec486eafb75c">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ac611c53b945b0ced90fde98e3846be79">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ad8f8901db11563ddd7d655fed025047f">rsDebug</a> (const char *, int)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a490b0f6af3cc2e0280e97f2d2c2da228">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa75aa9faf7646ceeafeb19279416e9e8">rsDebug</a> (const char *, long)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa371f42b8d323a1a20d56461011fc664">rsDebug</a> (const char *, unsigned long)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ab5a58069a9d914e413f52b0f9bd62a00">rsDebug</a> (const char *, const void *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa8b0824fa7ebb7568475aa9fe59db2a7">rsDebug</a> (const char *, char)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ae15778f8dce1f1afb184223aa2ea16d7">rsDebug</a> (const char *, unsigned char)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a9ae73c92436ef2ebb3aa003dfe32b47e">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ad2ac07fa7f59cd1ec4c3e411a726e3bf">rsDebug</a> (const char *, short)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a914fe650bcd59de44d33fc4b72d6d494">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a52c6ade9360a550eb25c044ea2380f4b">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ad723b521df57125a4165812004f107c4">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Utility debugging routines. </p>
-<p>Routines intended to be used during application developement. These should not be used in shipping applications. All print a string and value pair to the standard log. </p>
-
-<p>Definition in file <a class="el" href="rs__debug_8rsh_source.html">rs_debug.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="aff35df661796c13fa9e616d1d387df0d"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aff35df661796c13fa9e616d1d387df0d" args="(const char *, float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aebd4d3e687a397db1a817ca6d46aed29"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aebd4d3e687a397db1a817ca6d46aed29" args="(const char *, float, float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ab1731408774f01186aff59b89c47fe32"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ab1731408774f01186aff59b89c47fe32" args="(const char *, float, float, float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6bb20c16c9fcc613158ca8c6f0dd81bd"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a6bb20c16c9fcc613158ca8c6f0dd81bd" args="(const char *, float, float, float, float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0a59285be7204bde7b199c77578b6a42"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a0a59285be7204bde7b199c77578b6a42" args="(const char *, double)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">double&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a47b07360e1df6885b3f2eb207408db2c"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a47b07360e1df6885b3f2eb207408db2c" args="(const char *, const rs_matrix4x4 *)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aee885d367bb22f5c437dec486eafb75c"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aee885d367bb22f5c437dec486eafb75c" args="(const char *, const rs_matrix3x3 *)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac611c53b945b0ced90fde98e3846be79"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ac611c53b945b0ced90fde98e3846be79" args="(const char *, const rs_matrix2x2 *)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad8f8901db11563ddd7d655fed025047f"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ad8f8901db11563ddd7d655fed025047f" args="(const char *, int)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a490b0f6af3cc2e0280e97f2d2c2da228"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a490b0f6af3cc2e0280e97f2d2c2da228" args="(const char *, uint)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa75aa9faf7646ceeafeb19279416e9e8"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa75aa9faf7646ceeafeb19279416e9e8" args="(const char *, long)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">long&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa371f42b8d323a1a20d56461011fc664"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa371f42b8d323a1a20d56461011fc664" args="(const char *, unsigned long)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned&#160;</td>
-          <td class="paramname"><em>long</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ab5a58069a9d914e413f52b0f9bd62a00"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ab5a58069a9d914e413f52b0f9bd62a00" args="(const char *, const void *)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const void *&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa8b0824fa7ebb7568475aa9fe59db2a7"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa8b0824fa7ebb7568475aa9fe59db2a7" args="(const char *, char)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae15778f8dce1f1afb184223aa2ea16d7"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ae15778f8dce1f1afb184223aa2ea16d7" args="(const char *, unsigned char)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">unsigned&#160;</td>
-          <td class="paramname"><em>char</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9ae73c92436ef2ebb3aa003dfe32b47e"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a9ae73c92436ef2ebb3aa003dfe32b47e" args="(const char *, uchar2)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad2ac07fa7f59cd1ec4c3e411a726e3bf"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ad2ac07fa7f59cd1ec4c3e411a726e3bf" args="(const char *, short)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">short&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a914fe650bcd59de44d33fc4b72d6d494"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a914fe650bcd59de44d33fc4b72d6d494" args="(const char *, ushort2)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a52c6ade9360a550eb25c044ea2380f4b"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a52c6ade9360a550eb25c044ea2380f4b" args="(const char *, long2)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad723b521df57125a4165812004f107c4"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ad723b521df57125a4165812004f107c4" args="(const char *, ulong2)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsDebug </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__debug_8rsh_source.html b/docs/html/reference/renderscript/rs__debug_8rsh_source.html
deleted file mode 100644
index cd5895d..0000000
--- a/docs/html/reference/renderscript/rs__debug_8rsh_source.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__debug_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef __RS_DEBUG_RSH__</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __RS_DEBUG_RSH__</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00029"></a>00029 
-<a name="l00033"></a>00033 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00034"></a>00034     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>);
-<a name="l00038"></a>00038 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00039"></a>00039     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00043"></a>00043 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00044"></a>00044     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00048"></a>00048 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00049"></a>00049     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00053"></a>00053 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00054"></a>00054     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>);
-<a name="l00058"></a>00058 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00059"></a>00059     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>);
-<a name="l00063"></a>00063 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00064"></a>00064     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>);
-<a name="l00068"></a>00068 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00069"></a>00069     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">double</span>);
-<a name="l00073"></a>00073 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00074"></a>00074     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *);
-<a name="l00078"></a>00078 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00079"></a>00079     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *);
-<a name="l00083"></a>00083 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00084"></a>00084     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *);
-<a name="l00088"></a>00088 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00089"></a>00089     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>);
-<a name="l00093"></a>00093 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00094"></a>00094     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>);
-<a name="l00098"></a>00098 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00099"></a>00099     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">long</span>);
-<a name="l00103"></a>00103 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00104"></a>00104     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);
-<a name="l00108"></a>00108 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00109"></a>00109     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">long</span> <span class="keywordtype">long</span>);
-<a name="l00113"></a>00113 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00114"></a>00114     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>);
-<a name="l00118"></a>00118 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00119"></a>00119     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <span class="keywordtype">void</span> *);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 17))</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span>
-<a name="l00125"></a>00125 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00126"></a>00126     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">char</span>);
-<a name="l00130"></a>00130 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00131"></a>00131     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a>);
-<a name="l00135"></a>00135 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00136"></a>00136     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a>);
-<a name="l00140"></a>00140 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00141"></a>00141     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a>);
-<a name="l00145"></a>00145 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00146"></a>00146     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>);
-<a name="l00150"></a>00150 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00151"></a>00151     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>);
-<a name="l00155"></a>00155 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00156"></a>00156     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a>);
-<a name="l00160"></a>00160 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00161"></a>00161     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>);
-<a name="l00165"></a>00165 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00166"></a>00166     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">short</span>);
-<a name="l00170"></a>00170 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00171"></a>00171     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a>);
-<a name="l00175"></a>00175 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00176"></a>00176     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a>);
-<a name="l00180"></a>00180 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00181"></a>00181     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a>);
-<a name="l00185"></a>00185 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00186"></a>00186     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>);
-<a name="l00190"></a>00190 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00191"></a>00191     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>);
-<a name="l00195"></a>00195 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00196"></a>00196     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a>);
-<a name="l00200"></a>00200 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00201"></a>00201     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a>);
-<a name="l00205"></a>00205 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00206"></a>00206     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a>);
-<a name="l00210"></a>00210 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00211"></a>00211     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a>);
-<a name="l00215"></a>00215 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00216"></a>00216     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a>);
-<a name="l00220"></a>00220 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00221"></a>00221     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a>);
-<a name="l00225"></a>00225 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00226"></a>00226     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a>);
-<a name="l00230"></a>00230 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00231"></a>00231     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a>);
-<a name="l00235"></a>00235 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00236"></a>00236     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>);
-<a name="l00240"></a>00240 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00241"></a>00241     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a>);
-<a name="l00245"></a>00245 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00246"></a>00246     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a>);
-<a name="l00250"></a>00250 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00251"></a>00251     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>);
-<a name="l00255"></a>00255 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00256"></a>00256     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a>);
-<a name="l00260"></a>00260 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00261"></a>00261     <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a>);
-<a name="l00262"></a>00262 <span class="preprocessor">#endif  // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 17))</span>
-<a name="l00263"></a>00263 <span class="preprocessor"></span>
-<a name="l00264"></a>00264 <span class="preprocessor">#define RS_DEBUG(a) rsDebug(#a, a)</span>
-<a name="l00265"></a>00265 <span class="preprocessor"></span><span class="preprocessor">#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)</span>
-<a name="l00266"></a>00266 <span class="preprocessor"></span>
-<a name="l00267"></a>00267 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__element_8rsh.html b/docs/html/reference/renderscript/rs__element_8rsh.html
deleted file mode 100644
index 201f71c..0000000
--- a/docs/html/reference/renderscript/rs__element_8rsh.html
+++ /dev/null
@@ -1,374 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rsElementGetSubElementCount</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rsElementGetSubElement</a> (<a class="el" href="structrs__element.html">rs_element</a>, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rsElementGetSubElementNameLength</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rsElementGetSubElementName</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index, char *name, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> nameLength)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rsElementGetSubElementArraySize</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rsElementGetSubElementOffsetBytes</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rsElementGetBytesSize</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rsElementGetDataType</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rsElementGetDataKind</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rsElementGetVectorSize</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Element routines. </p>
-
-<p>Definition in file <a class="el" href="rs__element_8rsh_source.html">rs_element.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ac54592168af5896d3fba5283af286f98"></a><!-- doxytag: member="rs_element.rsh::rsElementGetBytesSize" ref="ac54592168af5896d3fba5283af286f98" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetBytesSize </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the size of element in bytes</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>total size of the element in bytes </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="af072702a530e158093d69353072da5f9"></a><!-- doxytag: member="rs_element.rsh::rsElementGetDataKind" ref="af072702a530e158093d69353072da5f9" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a> rsElementGetDataKind </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the element's data kind</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>element's data size </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9a3569d242be363517ea2354d98cf382"></a><!-- doxytag: member="rs_element.rsh::rsElementGetDataType" ref="a9a3569d242be363517ea2354d98cf382" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a> rsElementGetDataType </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the element's data type</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>element's data type </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a8c690bce7d32be759fd787740c270c92"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElement" ref="a8c690bce7d32be759fd787740c270c92" args="(rs_element, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="structrs__element.html">rs_element</a> rsElementGetSubElement </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, this function will return the sub-element at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the sub-element to return </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>sub-element in this element at given index </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9c3140c18139db451279d9b221808eee"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementArraySize" ref="a9c3140c18139db451279d9b221808eee" args="(rs_element e, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementArraySize </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, some sub-elements could be statically sized arrays. This function will return the array size for sub-element at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the sub-element </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>array size of sub-element in this element at given index </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a2ecab064ea2b720bc3af27b523388f31"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementCount" ref="a2ecab064ea2b720bc3af27b523388f31" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementCount </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Elements could be simple, such as an int or a float, or a structure with multiple sub elements, such as a collection of floats, float2, float4. This function returns zero for simple elements or the number of sub-elements otherwise.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of sub-elements in this element </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a3c1446166c43aa6ba3d5359f6c982f02"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementName" ref="a3c1446166c43aa6ba3d5359f6c982f02" args="(rs_element e, uint32_t index, char *name, uint32_t nameLength)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementName </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char *&#160;</td>
-          <td class="paramname"><em>name</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>nameLength</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, this function will return the sub-element name at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the sub-element </td></tr>
-    <tr><td class="paramname">name</td><td>array to store the name into </td></tr>
-    <tr><td class="paramname">nameLength</td><td>length of the provided name array </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of characters actually written, excluding the null terminator </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a94834eb1d91b50a5df3cbe161c22e37d"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementNameLength" ref="a94834eb1d91b50a5df3cbe161c22e37d" args="(rs_element e, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementNameLength </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, this function will return the length of sub-element name at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the sub-element to return </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>length of the sub-element name including the null terminator (size of buffer needed to write the name) </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a840d53f1e91bb6887b40a4d8983c53ed"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementOffsetBytes" ref="a840d53f1e91bb6887b40a4d8983c53ed" args="(rs_element e, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementOffsetBytes </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This function specifies the location of a sub-element within the element</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the sub-element </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>offset in bytes of sub-element in this element at given index </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a727997de25ae43c07dffcfd484928d53"></a><!-- doxytag: member="rs_element.rsh::rsElementGetVectorSize" ref="a727997de25ae43c07dffcfd484928d53" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetVectorSize </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>e</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the element's vector size</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">e</td><td>element to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>length of the element vector (for float2, float3, etc.) </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__element_8rsh_source.html b/docs/html/reference/renderscript/rs__element_8rsh_source.html
deleted file mode 100644
index 1d2601e..0000000
--- a/docs/html/reference/renderscript/rs__element_8rsh_source.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__element_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ELEMENT_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ELEMENT_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// New API&#39;s</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00039"></a>00039     <a class="code" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rsElementGetSubElementCount</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> e);
-<a name="l00040"></a>00040 
-<a name="l00049"></a>00049 extern <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> __attribute__((overloadable))
-<a name="l00050"></a>00050     <a class="code" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rsElementGetSubElement</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a>, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00051"></a>00051 
-<a name="l00061"></a>00061 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00062"></a>00062     <a class="code" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rsElementGetSubElementNameLength</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00063"></a>00063 
-<a name="l00075"></a>00075 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00076"></a>00076     <a class="code" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rsElementGetSubElementName</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index, <span class="keywordtype">char</span> *name, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> nameLength);
-<a name="l00077"></a>00077 
-<a name="l00088"></a>00088 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00089"></a>00089     <a class="code" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rsElementGetSubElementArraySize</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00090"></a>00090 
-<a name="l00100"></a>00100 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00101"></a>00101     <a class="code" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rsElementGetSubElementOffsetBytes</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00102"></a>00102 
-<a name="l00109"></a>00109 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00110"></a>00110     <a class="code" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rsElementGetBytesSize</a>(rs_element e);
-<a name="l00111"></a>00111 
-<a name="l00118"></a>00118 extern <a class="code" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647" title="Enumeration for possible element data types.">rs_data_type</a> __attribute__((overloadable))
-<a name="l00119"></a>00119     <a class="code" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rsElementGetDataType</a>(rs_element e);
-<a name="l00120"></a>00120 
-<a name="l00127"></a>00127 extern <a class="code" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a" title="Enumeration for possible element data kind.">rs_data_kind</a> __attribute__((overloadable))
-<a name="l00128"></a>00128     <a class="code" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rsElementGetDataKind</a>(rs_element e);
-<a name="l00129"></a>00129 
-<a name="l00137"></a>00137 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00138"></a>00138     <a class="code" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rsElementGetVectorSize</a>(rs_element e);
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="preprocessor">#endif // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span>
-<a name="l00142"></a>00142 <span class="preprocessor">#endif // __RS_ELEMENT_RSH__</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__graphics_8rsh.html b/docs/html/reference/renderscript/rs__graphics_8rsh.html
deleted file mode 100644
index de62965..0000000
--- a/docs/html/reference/renderscript/rs__graphics_8rsh.html
+++ /dev/null
@@ -1,1435 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_graphics.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">rs_graphics.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><code>#include &quot;<a class="el" href="rs__mesh_8rsh_source.html">rs_mesh.rsh</a>&quot;</code><br/>
-<code>#include &quot;<a class="el" href="rs__program_8rsh_source.html">rs_program.rsh</a>&quot;</code><br/>
-</div><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rsgBindProgramFragment</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> pf)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rsgBindProgramStore</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rsgBindProgramVertex</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> pv)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rsgBindProgramRaster</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> pr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rsgBindSampler</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__sampler.html">rs_sampler</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rsgBindTexture</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rsgProgramVertexLoadProjectionMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *proj)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rsgProgramVertexLoadModelMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *model)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rsgProgramVertexLoadTextureMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *tex)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rsgProgramVertexGetProjectionMatrix</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *proj)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rsgProgramFragmentConstantColor</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> pf, float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a46208900d16287fde91a5d14ebc830dc">rsgBindConstant</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> ps, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__allocation.html">rs_allocation</a> c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a516131032d384bae5be9afa19a257033">rsgBindConstant</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> pv, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__allocation.html">rs_allocation</a> c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rsgGetWidth</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rsgGetHeight</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> alloc)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rsgDrawRect</a> (float x1, float y1, float x2, float y2, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rsgDrawQuad</a> (float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rsgDrawQuadTexCoords</a> (float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rsgDrawSpriteScreenspace</a> (float x, float y, float z, float w, float h)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a621abfc693fed028b5dc74826453142d">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ab2704a6d16e3d7983524d0a8413c1b8a">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> start, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rsgClearColor</a> (float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rsgClearDepth</a> (float value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a> (const char *, int x, int y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ac5e84fd253b4b1d2b0e11a7a0a7df945">rsgDrawText</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, int x, int y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rsgBindFont</a> (<a class="el" href="structrs__font.html">rs_font</a> font)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rsgFontColor</a> (float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a> (const char *, int *left, int *right, int *top, int *bottom)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a2abb920283b1dafa9059de488143a870">rsgMeasureText</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, int *left, int *right, int *top, int *bottom)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> mesh, float *minX, float *minY, float *minZ, float *maxX, float *maxY, float *maxZ)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static __inline__ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a6058b6b6c8b94f96f03dc8bca6a2090b">rsgMeshComputeBoundingBox</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> mesh, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMin, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMax)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Renderscript graphics API. </p>
-<p>A set of graphics functions used by Renderscript. </p>
-
-<p>Definition in file <a class="el" href="rs__graphics_8rsh_source.html">rs_graphics.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a647228d8e15da6ad67a97701d920dcac"></a><!-- doxytag: member="rs_graphics.rsh::rsgAllocationSyncAll" ref="a647228d8e15da6ad67a97701d920dcac" args="(rs_allocation alloc)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgAllocationSyncAll </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>alloc</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Sync the contents of an allocation from its SCRIPT memory space to its HW memory spaces.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">alloc</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a46208900d16287fde91a5d14ebc830dc"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindConstant" ref="a46208900d16287fde91a5d14ebc830dc" args="(rs_program_fragment ps, uint slot, rs_allocation c)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindConstant </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>&#160;</td>
-          <td class="paramname"><em>ps</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>slot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>c</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Allocation object to a ProgramFragment. The Allocation must be a valid constant input for the Program.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program object </td></tr>
-    <tr><td class="paramname">slot</td><td>index of the constant buffer on the program </td></tr>
-    <tr><td class="paramname">c</td><td>constants to bind </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a516131032d384bae5be9afa19a257033"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindConstant" ref="a516131032d384bae5be9afa19a257033" args="(rs_program_vertex pv, uint slot, rs_allocation c)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindConstant </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a>&#160;</td>
-          <td class="paramname"><em>pv</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>slot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>c</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Allocation object to a ProgramVertex. The Allocation must be a valid constant input for the Program.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">pv</td><td>program object </td></tr>
-    <tr><td class="paramname">slot</td><td>index of the constant buffer on the program </td></tr>
-    <tr><td class="paramname">c</td><td>constants to bind </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ae89effef281e92e2940055883ea366d4"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindFont" ref="ae89effef281e92e2940055883ea366d4" args="(rs_font font)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindFont </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a>&#160;</td>
-          <td class="paramname"><em>font</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Binds the font object to be used for all subsequent font rendering calls </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">font</td><td>object to bind </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a9f8deb600729a83c39c5bcaba2152b9c"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramFragment" ref="a9f8deb600729a83c39c5bcaba2152b9c" args="(rs_program_fragment pf)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindProgramFragment </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>&#160;</td>
-          <td class="paramname"><em>pf</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramFragment to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">pf</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a391eb5535544f6312c724b910da6ec35"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramRaster" ref="a391eb5535544f6312c724b910da6ec35" args="(rs_program_raster pr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindProgramRaster </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a>&#160;</td>
-          <td class="paramname"><em>pr</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramRaster to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">pr</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a34dfa6eddd7454fc1865222c5a022315"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramStore" ref="a34dfa6eddd7454fc1865222c5a022315" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindProgramStore </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramStore to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a894e26d0d05d3ef99be65ddf98dd901c"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramVertex" ref="a894e26d0d05d3ef99be65ddf98dd901c" args="(rs_program_vertex pv)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindProgramVertex </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a>&#160;</td>
-          <td class="paramname"><em>pv</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramVertex to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">pv</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a4ade6c5acbf6acaa1c29a1aecc6e87d3"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindSampler" ref="a4ade6c5acbf6acaa1c29a1aecc6e87d3" args="(rs_program_fragment, uint slot, rs_sampler)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindSampler </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>slot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Sampler object to a ProgramFragment. The sampler will operate on the texture bound at the matching slot.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">slot</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1694eb5489bd3a444da921dbf16aeeb5"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindTexture" ref="a1694eb5489bd3a444da921dbf16aeeb5" args="(rs_program_fragment, uint slot, rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgBindTexture </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>slot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname">&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Allocation object to a ProgramFragment. The Allocation must be a valid texture for the Program. The sampling of the texture will be controled by the Sampler bound at the matching slot.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">slot</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a147674fed92745fbb5c64a6300ca3c49"></a><!-- doxytag: member="rs_graphics.rsh::rsgClearColor" ref="a147674fed92745fbb5c64a6300ca3c49" args="(float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgClearColor </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>g</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>b</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>a</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Clears the rendering surface to the specified color.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">r</td><td></td></tr>
-    <tr><td class="paramname">g</td><td></td></tr>
-    <tr><td class="paramname">b</td><td></td></tr>
-    <tr><td class="paramname">a</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a4bedb06e8facd587e3eacd746fe3e727"></a><!-- doxytag: member="rs_graphics.rsh::rsgClearDepth" ref="a4bedb06e8facd587e3eacd746fe3e727" args="(float value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgClearDepth </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>value</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Clears the depth suface to the specified value. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6f8b87c994810908fbe5e01f8f63f9af"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="a6f8b87c994810908fbe5e01f8f63f9af" args="(rs_mesh ism)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawMesh </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>ism</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Draw a mesh using the current context state. The whole mesh is rendered.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ism</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a621abfc693fed028b5dc74826453142d"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="a621abfc693fed028b5dc74826453142d" args="(rs_mesh ism, uint primitiveIndex)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawMesh </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>ism</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>primitiveIndex</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Draw part of a mesh using the current context state. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ism</td><td>mesh object to render </td></tr>
-    <tr><td class="paramname">primitiveIndex</td><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ab2704a6d16e3d7983524d0a8413c1b8a"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="ab2704a6d16e3d7983524d0a8413c1b8a" args="(rs_mesh ism, uint primitiveIndex, uint start, uint len)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawMesh </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>ism</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>primitiveIndex</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>start</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>len</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Draw specified index range of part of a mesh using the current context state. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ism</td><td>mesh object to render </td></tr>
-    <tr><td class="paramname">primitiveIndex</td><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw. </td></tr>
-    <tr><td class="paramname">start</td><td>starting index in the range </td></tr>
-    <tr><td class="paramname">len</td><td>number of indices to draw </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ad6953da0349e58547b08b8ce174ed3fc"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawQuad" ref="ad6953da0349e58547b08b8ce174ed3fc" args="(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawQuad </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x4</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y4</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z4</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Low performance utility function for drawing a simple quad. Not intended for drawing large quantities of geometry.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x1</td><td></td></tr>
-    <tr><td class="paramname">y1</td><td></td></tr>
-    <tr><td class="paramname">z1</td><td></td></tr>
-    <tr><td class="paramname">x2</td><td></td></tr>
-    <tr><td class="paramname">y2</td><td></td></tr>
-    <tr><td class="paramname">z2</td><td></td></tr>
-    <tr><td class="paramname">x3</td><td></td></tr>
-    <tr><td class="paramname">y3</td><td></td></tr>
-    <tr><td class="paramname">z3</td><td></td></tr>
-    <tr><td class="paramname">x4</td><td></td></tr>
-    <tr><td class="paramname">y4</td><td></td></tr>
-    <tr><td class="paramname">z4</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afb98a59bb9f878f0a09459567c269e64"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawQuadTexCoords" ref="afb98a59bb9f878f0a09459567c269e64" args="(float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawQuadTexCoords </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>u1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>u2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>u3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v3</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x4</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y4</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z4</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>u4</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v4</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Low performance utility function for drawing a textured quad. Not intended for drawing large quantities of geometry.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x1</td><td></td></tr>
-    <tr><td class="paramname">y1</td><td></td></tr>
-    <tr><td class="paramname">z1</td><td></td></tr>
-    <tr><td class="paramname">u1</td><td></td></tr>
-    <tr><td class="paramname">v1</td><td></td></tr>
-    <tr><td class="paramname">x2</td><td></td></tr>
-    <tr><td class="paramname">y2</td><td></td></tr>
-    <tr><td class="paramname">z2</td><td></td></tr>
-    <tr><td class="paramname">u2</td><td></td></tr>
-    <tr><td class="paramname">v2</td><td></td></tr>
-    <tr><td class="paramname">x3</td><td></td></tr>
-    <tr><td class="paramname">y3</td><td></td></tr>
-    <tr><td class="paramname">z3</td><td></td></tr>
-    <tr><td class="paramname">u3</td><td></td></tr>
-    <tr><td class="paramname">v3</td><td></td></tr>
-    <tr><td class="paramname">x4</td><td></td></tr>
-    <tr><td class="paramname">y4</td><td></td></tr>
-    <tr><td class="paramname">z4</td><td></td></tr>
-    <tr><td class="paramname">u4</td><td></td></tr>
-    <tr><td class="paramname">v4</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a80c51849bf12ec6c699c23c3fa3e6208"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawRect" ref="a80c51849bf12ec6c699c23c3fa3e6208" args="(float x1, float y1, float x2, float y2, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawRect </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y2</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Low performance utility function for drawing a simple rectangle. Not intended for drawing large quantities of geometry.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x1</td><td></td></tr>
-    <tr><td class="paramname">y1</td><td></td></tr>
-    <tr><td class="paramname">x2</td><td></td></tr>
-    <tr><td class="paramname">y2</td><td></td></tr>
-    <tr><td class="paramname">z</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a07d15127330fa1dff6c99b0d7d14e65e"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawSpriteScreenspace" ref="a07d15127330fa1dff6c99b0d7d14e65e" args="(float x, float y, float z, float w, float h)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawSpriteScreenspace </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>w</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>h</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Low performance function for drawing rectangles in screenspace. This function uses the default passthough ProgramVertex. Any bound ProgramVertex is ignored. This function has considerable overhead and should not be used for drawing in shipping applications.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">x</td><td></td></tr>
-    <tr><td class="paramname">y</td><td></td></tr>
-    <tr><td class="paramname">z</td><td></td></tr>
-    <tr><td class="paramname">w</td><td></td></tr>
-    <tr><td class="paramname">h</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afaec82492762e62cad1ff53ada479b14"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawText" ref="afaec82492762e62cad1ff53ada479b14" args="(const char *, int x, int y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawText </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Draws text given a string and location </p>
-
-</div>
-</div>
-<a class="anchor" id="ac5e84fd253b4b1d2b0e11a7a0a7df945"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawText" ref="ac5e84fd253b4b1d2b0e11a7a0a7df945" args="(rs_allocation, int x, int y)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgDrawText </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="abda8c344092ed6310c7a8f353a6df876"></a><!-- doxytag: member="rs_graphics.rsh::rsgFontColor" ref="abda8c344092ed6310c7a8f353a6df876" args="(float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgFontColor </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>g</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>b</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>a</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Sets the font color for all subsequent rendering calls </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">r</td><td>red component </td></tr>
-    <tr><td class="paramname">g</td><td>green component </td></tr>
-    <tr><td class="paramname">b</td><td>blue component </td></tr>
-    <tr><td class="paramname">a</td><td>alpha component </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a7e6565cd5d5e44f442a8bf8ba68f4681"></a><!-- doxytag: member="rs_graphics.rsh::rsgGetHeight" ref="a7e6565cd5d5e44f442a8bf8ba68f4681" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsgGetHeight </td>
-          <td>(</td>
-          <td class="paramtype">void&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get the height of the current rendering surface.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a67f4ed1ca4bba27d5c952ada89cd0717"></a><!-- doxytag: member="rs_graphics.rsh::rsgGetWidth" ref="a67f4ed1ca4bba27d5c952ada89cd0717" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsgGetWidth </td>
-          <td>(</td>
-          <td class="paramtype">void&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get the width of the current rendering surface.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a5c599f4ea989f3d0616cbf8e983688c4"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeasureText" ref="a5c599f4ea989f3d0616cbf8e983688c4" args="(const char *, int *left, int *right, int *top, int *bottom)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgMeasureText </td>
-          <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>left</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>right</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>top</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>bottom</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the bounding box of the text relative to (0, 0) Any of left, right, top, bottom could be NULL </p>
-
-</div>
-</div>
-<a class="anchor" id="a2abb920283b1dafa9059de488143a870"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeasureText" ref="a2abb920283b1dafa9059de488143a870" args="(rs_allocation, int *left, int *right, int *top, int *bottom)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgMeasureText </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname">, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>left</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>right</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>top</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int *&#160;</td>
-          <td class="paramname"><em>bottom</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0978c54902dd1d60180f8dbb0b781105"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeshComputeBoundingBox" ref="a0978c54902dd1d60180f8dbb0b781105" args="(rs_mesh mesh, float *minX, float *minY, float *minZ, float *maxX, float *maxY, float *maxZ)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgMeshComputeBoundingBox </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>minX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>minY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>minZ</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>maxX</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>maxY</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float *&#160;</td>
-          <td class="paramname"><em>maxZ</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Computes an axis aligned bounding box of a mesh object </p>
-
-</div>
-</div>
-<a class="anchor" id="a6058b6b6c8b94f96f03dc8bca6a2090b"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeshComputeBoundingBox" ref="a6058b6b6c8b94f96f03dc8bca6a2090b" args="(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static __inline__ void rsgMeshComputeBoundingBox </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *&#160;</td>
-          <td class="paramname"><em>bBoxMin</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *&#160;</td>
-          <td class="paramname"><em>bBoxMax</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-<p>Definition at line <a class="el" href="rs__graphics_8rsh_source.html#l00409">409</a> of file <a class="el" href="rs__graphics_8rsh_source.html">rs_graphics.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a35ac8c3759e25047e6a458c15520c887"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramFragmentConstantColor" ref="a35ac8c3759e25047e6a458c15520c887" args="(rs_program_fragment pf, float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgProgramFragmentConstantColor </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>&#160;</td>
-          <td class="paramname"><em>pf</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>g</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>b</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>a</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the constant color for a fixed function emulation program.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">pf</td><td></td></tr>
-    <tr><td class="paramname">r</td><td></td></tr>
-    <tr><td class="paramname">g</td><td></td></tr>
-    <tr><td class="paramname">b</td><td></td></tr>
-    <tr><td class="paramname">a</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a2b767d209b36ffcd2e0fc0cf6f4c5706"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexGetProjectionMatrix" ref="a2b767d209b36ffcd2e0fc0cf6f4c5706" args="(rs_matrix4x4 *proj)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgProgramVertexGetProjectionMatrix </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>proj</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get the projection matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">proj</td><td>matrix to store the current projection matrix into </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a976b8594cccb4b94d7ce520b44d884e3"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadModelMatrix" ref="a976b8594cccb4b94d7ce520b44d884e3" args="(const rs_matrix4x4 *model)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgProgramVertexLoadModelMatrix </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>model</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load the model matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">model</td><td>model matrix </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a83a87d8efa3f26ed3f8fb25e49f29059"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadProjectionMatrix" ref="a83a87d8efa3f26ed3f8fb25e49f29059" args="(const rs_matrix4x4 *proj)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgProgramVertexLoadProjectionMatrix </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>proj</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load the projection matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">proj</td><td>projection matrix </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a377b7b394c4bf0881532b1241d4be168"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadTextureMatrix" ref="a377b7b394c4bf0881532b1241d4be168" args="(const rs_matrix4x4 *tex)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsgProgramVertexLoadTextureMatrix </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>tex</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load the texture matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">tex</td><td>texture matrix </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__graphics_8rsh_source.html b/docs/html/reference/renderscript/rs__graphics_8rsh_source.html
deleted file mode 100644
index 9f673bd..0000000
--- a/docs/html/reference/renderscript/rs__graphics_8rsh_source.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_graphics.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_graphics.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__graphics_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011-2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_GRAPHICS_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_GRAPHICS_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include &quot;<a class="code" href="rs__mesh_8rsh.html" title="Mesh routines.">rs_mesh.rsh</a>&quot;</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include &quot;<a class="code" href="rs__program_8rsh.html" title="Program object routines.">rs_program.rsh</a>&quot;</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14))</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00036"></a>00036     rsgBindColorTarget(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> colorTarget, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot);
-<a name="l00037"></a>00037 
-<a name="l00042"></a>00042 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00043"></a>00043     rsgClearColorTarget(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot);
-<a name="l00044"></a>00044 
-<a name="l00049"></a>00049 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00050"></a>00050     rsgBindDepthTarget(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> depthTarget);
-<a name="l00051"></a>00051 
-<a name="l00055"></a>00055 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00056"></a>00056     rsgClearDepthTarget(<span class="keywordtype">void</span>);
-<a name="l00057"></a>00057 
-<a name="l00062"></a>00062 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00063"></a>00063     rsgClearAllRenderTargets(<span class="keywordtype">void</span>);
-<a name="l00064"></a>00064 
-<a name="l00068"></a>00068 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
-<a name="l00069"></a>00069     rsgFinish(<span class="keywordtype">void</span>);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#endif //defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14)</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span>
-<a name="l00078"></a>00078 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00079"></a>00079     <a class="code" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rsgBindProgramFragment</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a> pf);
-<a name="l00080"></a>00080 
-<a name="l00086"></a>00086 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00087"></a>00087     <a class="code" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rsgBindProgramStore</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00088"></a>00088 
-<a name="l00094"></a>00094 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00095"></a>00095     <a class="code" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rsgBindProgramVertex</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> pv);
-<a name="l00096"></a>00096 
-<a name="l00102"></a>00102 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00103"></a>00103     <a class="code" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rsgBindProgramRaster</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a> pr);
-<a name="l00104"></a>00104 
-<a name="l00111"></a>00111 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00112"></a>00112     <a class="code" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rsgBindSampler</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a>, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a>);
-<a name="l00113"></a>00113 
-<a name="l00122"></a>00122 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00123"></a>00123     <a class="code" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rsgBindTexture</a>(rs_program_fragment, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a>);
-<a name="l00124"></a>00124 
-<a name="l00131"></a>00131 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00132"></a>00132     <a class="code" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rsgProgramVertexLoadProjectionMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *proj);
-<a name="l00139"></a>00139 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00140"></a>00140     <a class="code" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rsgProgramVertexLoadModelMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *model);
-<a name="l00147"></a>00147 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00148"></a>00148     <a class="code" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rsgProgramVertexLoadTextureMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *tex);
-<a name="l00155"></a>00155 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00156"></a>00156     <a class="code" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rsgProgramVertexGetProjectionMatrix</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *proj);
-<a name="l00157"></a>00157 
-<a name="l00167"></a>00167 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00168"></a>00168     <a class="code" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rsgProgramFragmentConstantColor</a>(rs_program_fragment pf, <span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00169"></a>00169 
-<a name="l00178"></a>00178 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00179"></a>00179     <a class="code" href="rs__graphics_8rsh.html#a46208900d16287fde91a5d14ebc830dc">rsgBindConstant</a>(rs_program_fragment ps, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, rs_allocation c);
-<a name="l00180"></a>00180 
-<a name="l00189"></a>00189 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00190"></a>00190     <a class="code" href="rs__graphics_8rsh.html#a46208900d16287fde91a5d14ebc830dc">rsgBindConstant</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> pv, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, rs_allocation c);
-<a name="l00191"></a>00191 
-<a name="l00197"></a>00197 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
-<a name="l00198"></a>00198     <a class="code" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rsgGetWidth</a>(<span class="keywordtype">void</span>);
-<a name="l00199"></a>00199 
-<a name="l00205"></a>00205 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
-<a name="l00206"></a>00206     <a class="code" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rsgGetHeight</a>(<span class="keywordtype">void</span>);
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 
-<a name="l00215"></a>00215 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00216"></a>00216     <a class="code" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a>(rs_allocation alloc);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14))</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span>
-<a name="l00227"></a>00227 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00228"></a>00228     <a class="code" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a>(rs_allocation alloc,
-<a name="l00229"></a>00229                          rs_allocation_usage_type source);
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 <span class="preprocessor">#endif //defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14)</span>
-<a name="l00232"></a>00232 <span class="preprocessor"></span>
-<a name="l00243"></a>00243 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00244"></a>00244     <a class="code" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rsgDrawRect</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z);
-<a name="l00245"></a>00245 
-<a name="l00263"></a>00263 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00264"></a>00264     <a class="code" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rsgDrawQuad</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> z1,
-<a name="l00265"></a>00265                 <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z2,
-<a name="l00266"></a>00266                 <span class="keywordtype">float</span> x3, <span class="keywordtype">float</span> y3, <span class="keywordtype">float</span> z3,
-<a name="l00267"></a>00267                 <span class="keywordtype">float</span> x4, <span class="keywordtype">float</span> y4, <span class="keywordtype">float</span> z4);
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 
-<a name="l00295"></a>00295 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00296"></a>00296     <a class="code" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rsgDrawQuadTexCoords</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> z1, <span class="keywordtype">float</span> u1, <span class="keywordtype">float</span> v1,
-<a name="l00297"></a>00297                          <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z2, <span class="keywordtype">float</span> u2, <span class="keywordtype">float</span> v2,
-<a name="l00298"></a>00298                          <span class="keywordtype">float</span> x3, <span class="keywordtype">float</span> y3, <span class="keywordtype">float</span> z3, <span class="keywordtype">float</span> u3, <span class="keywordtype">float</span> v3,
-<a name="l00299"></a>00299                          <span class="keywordtype">float</span> x4, <span class="keywordtype">float</span> y4, <span class="keywordtype">float</span> z4, <span class="keywordtype">float</span> u4, <span class="keywordtype">float</span> v4);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 
-<a name="l00314"></a>00314 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00315"></a>00315     <a class="code" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rsgDrawSpriteScreenspace</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z, <span class="keywordtype">float</span> w, <span class="keywordtype">float</span> h);
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00318"></a>00318     rsgDrawPath(<a class="code" href="structrs__path.html" title="Opaque handle to a Renderscript Path object.">rs_path</a> p);
-<a name="l00319"></a>00319 
-<a name="l00326"></a>00326 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00327"></a>00327     <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism);
-<a name="l00334"></a>00334 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00335"></a>00335     <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex);
-<a name="l00344"></a>00344 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00345"></a>00345     <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> start, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
-<a name="l00346"></a>00346 
-<a name="l00355"></a>00355 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00356"></a>00356     <a class="code" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rsgClearColor</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00357"></a>00357 
-<a name="l00361"></a>00361 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00362"></a>00362     <a class="code" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rsgClearDepth</a>(<span class="keywordtype">float</span> value);
-<a name="l00366"></a>00366 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00367"></a>00367     <a class="code" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-<a name="l00371"></a>00371 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00372"></a>00372     <a class="code" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a>(rs_allocation, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-<a name="l00377"></a>00377 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00378"></a>00378     <a class="code" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rsgBindFont</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a> font);
-<a name="l00386"></a>00386 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00387"></a>00387     <a class="code" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rsgFontColor</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00392"></a>00392 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00393"></a>00393     <a class="code" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span> *left, <span class="keywordtype">int</span> *right, <span class="keywordtype">int</span> *top, <span class="keywordtype">int</span> *bottom);
-<a name="l00397"></a>00397 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00398"></a>00398     <a class="code" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a>(rs_allocation, <span class="keywordtype">int</span> *left, <span class="keywordtype">int</span> *right, <span class="keywordtype">int</span> *top, <span class="keywordtype">int</span> *bottom);
-<a name="l00402"></a>00402 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00403"></a>00403     <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> mesh, <span class="keywordtype">float</span> *minX, <span class="keywordtype">float</span> *minY, <span class="keywordtype">float</span> *minZ,
-<a name="l00404"></a>00404                                                 <span class="keywordtype">float</span> *maxX, <span class="keywordtype">float</span> *maxY, <span class="keywordtype">float</span> *maxZ);
-<a name="l00408"></a>00408 __inline__ static <span class="keywordtype">void</span> __attribute__((overloadable, always_inline))
-<a name="l00409"></a><a class="code" href="rs__graphics_8rsh.html#a6058b6b6c8b94f96f03dc8bca6a2090b">00409</a> <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> mesh, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMin, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMax) {
-<a name="l00410"></a>00410     <span class="keywordtype">float</span> x1, y1, z1, x2, y2, z2;
-<a name="l00411"></a>00411     <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(mesh, &amp;x1, &amp;y1, &amp;z1, &amp;x2, &amp;y2, &amp;z2);
-<a name="l00412"></a>00412     bBoxMin-&gt;x = x1;
-<a name="l00413"></a>00413     bBoxMin-&gt;y = y1;
-<a name="l00414"></a>00414     bBoxMin-&gt;z = z1;
-<a name="l00415"></a>00415     bBoxMax-&gt;x = x2;
-<a name="l00416"></a>00416     bBoxMax-&gt;y = y2;
-<a name="l00417"></a>00417     bBoxMax-&gt;z = z2;
-<a name="l00418"></a>00418 }
-<a name="l00419"></a>00419 
-<a name="l00420"></a>00420 <span class="preprocessor">#endif</span>
-<a name="l00421"></a>00421 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__math_8rsh.html b/docs/html/reference/renderscript/rs__math_8rsh.html
deleted file mode 100644
index 7379f54..0000000
--- a/docs/html/reference/renderscript/rs__math_8rsh.html
+++ /dev/null
@@ -1,679 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a> (int max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a01edf1cf3cdaecb1629761b69148e189">rsRand</a> (int min_value, int max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a03e898d810ac44158e7461b2b2b1c356">rsRand</a> (float max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a84b2e7468314873b3aa02969e310d9e4">rsRand</a> (float min_value, float max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rsFrac</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> amount, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> low, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ad5732b8b1f1d0d53d605a7dc6908dc85">rsClamp</a> (int amount, int low, int high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#af5e17f571b13c3391d860eac172be1c6">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> amount, <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> low, <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a40eddbf6c2462eada177a581a49bd3c6">rsClamp</a> (short amount, short low, short high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a2845f16757fe9eb7204bfb6f94d7fcc6">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> amount, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> low, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a33122202f10764687e2d3ab1a8c27062">rsClamp</a> (char amount, char low, char high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static __inline__ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rsExtractFrustumPlanes</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *viewProj, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static __inline__ bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rsIsSphereInFrustum</a> (<a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *sphere, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a> (float r, float g, float b)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a1f1107cf778cf1f614edfb5b8ac436a0">rsPackColorTo8888</a> (float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ac30a8c020eade2b57fd5966cb7c8665e">rsPackColorTo8888</a> (<a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> color)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rsUnpackColor8888</a> (<a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> c)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>todo-jsams </p>
-
-<p>Definition in file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a5de277f7518a61646c3d74f3a0b9e893"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a5de277f7518a61646c3d74f3a0b9e893" args="(uint amount, uint low, uint high)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsClamp </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>amount</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>low</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td>
-          <td class="paramname"><em>high</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Clamp the value amount between low and high.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">amount</td><td>The value to clamp </td></tr>
-    <tr><td class="paramname">low</td><td></td></tr>
-    <tr><td class="paramname">high</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ad5732b8b1f1d0d53d605a7dc6908dc85"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="ad5732b8b1f1d0d53d605a7dc6908dc85" args="(int amount, int low, int high)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int rsClamp </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>amount</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>low</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>high</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af5e17f571b13c3391d860eac172be1c6"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="af5e17f571b13c3391d860eac172be1c6" args="(ushort amount, ushort low, ushort high)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> rsClamp </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>&#160;</td>
-          <td class="paramname"><em>amount</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>&#160;</td>
-          <td class="paramname"><em>low</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>&#160;</td>
-          <td class="paramname"><em>high</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a40eddbf6c2462eada177a581a49bd3c6"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a40eddbf6c2462eada177a581a49bd3c6" args="(short amount, short low, short high)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">short rsClamp </td>
-          <td>(</td>
-          <td class="paramtype">short&#160;</td>
-          <td class="paramname"><em>amount</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">short&#160;</td>
-          <td class="paramname"><em>low</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">short&#160;</td>
-          <td class="paramname"><em>high</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a2845f16757fe9eb7204bfb6f94d7fcc6"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a2845f16757fe9eb7204bfb6f94d7fcc6" args="(uchar amount, uchar low, uchar high)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsClamp </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>amount</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>low</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td>
-          <td class="paramname"><em>high</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a33122202f10764687e2d3ab1a8c27062"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a33122202f10764687e2d3ab1a8c27062" args="(char amount, char low, char high)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">char rsClamp </td>
-          <td>(</td>
-          <td class="paramtype">char&#160;</td>
-          <td class="paramname"><em>amount</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char&#160;</td>
-          <td class="paramname"><em>low</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char&#160;</td>
-          <td class="paramname"><em>high</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a191f9c687c56322c18b7d71491602122"></a><!-- doxytag: member="rs_math.rsh::rsExtractFrustumPlanes" ref="a191f9c687c56322c18b7d71491602122" args="(const rs_matrix4x4 *viewProj, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static __inline__ void rsExtractFrustumPlanes </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>viewProj</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>left</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>right</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>top</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>bottom</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>near</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>far</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Computes 6 frustum planes from the view projection matrix </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">viewProj</td><td>matrix to extract planes from </td></tr>
-    <tr><td class="paramname">left</td><td>plane </td></tr>
-    <tr><td class="paramname">right</td><td>plane </td></tr>
-    <tr><td class="paramname">top</td><td>plane </td></tr>
-    <tr><td class="paramname">bottom</td><td>plane </td></tr>
-    <tr><td class="paramname">near</td><td>plane </td></tr>
-    <tr><td class="paramname">far</td><td>plane </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__math_8rsh_source.html#l00102">102</a> of file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac4f127e78da0849321c7f6db14f9e989"></a><!-- doxytag: member="rs_math.rsh::rsFrac" ref="ac4f127e78da0849321c7f6db14f9e989" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rsFrac </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the fractional part of a float </p>
-
-</div>
-</div>
-<a class="anchor" id="a7bbeaf44838e08e68d5cf3e3d7b0818c"></a><!-- doxytag: member="rs_math.rsh::rsIsSphereInFrustum" ref="a7bbeaf44838e08e68d5cf3e3d7b0818c" args="(float4 *sphere, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static __inline__ bool rsIsSphereInFrustum </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>sphere</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>left</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>right</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>top</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>bottom</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>near</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *&#160;</td>
-          <td class="paramname"><em>far</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Checks if a sphere is withing the 6 frustum planes </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">sphere</td><td>float4 representing the sphere </td></tr>
-    <tr><td class="paramname">left</td><td>plane </td></tr>
-    <tr><td class="paramname">right</td><td>plane </td></tr>
-    <tr><td class="paramname">top</td><td>plane </td></tr>
-    <tr><td class="paramname">bottom</td><td>plane </td></tr>
-    <tr><td class="paramname">near</td><td>plane </td></tr>
-    <tr><td class="paramname">far</td><td>plane </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__math_8rsh_source.html#l00162">162</a> of file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5e20d326a6e2532d19a493b01f948c17"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="a5e20d326a6e2532d19a493b01f948c17" args="(float r, float g, float b)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>g</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>b</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Pack floating point (0-1) RGB values into a uchar4. The alpha component is set to 255 (1.0).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">r</td><td></td></tr>
-    <tr><td class="paramname">g</td><td></td></tr>
-    <tr><td class="paramname">b</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a1f1107cf778cf1f614edfb5b8ac436a0"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="a1f1107cf778cf1f614edfb5b8ac436a0" args="(float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>r</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>g</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>b</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>a</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Pack floating point (0-1) RGBA values into a uchar4.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">r</td><td></td></tr>
-    <tr><td class="paramname">g</td><td></td></tr>
-    <tr><td class="paramname">b</td><td></td></tr>
-    <tr><td class="paramname">a</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ac30a8c020eade2b57fd5966cb7c8665e"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="ac30a8c020eade2b57fd5966cb7c8665e" args="(float3 color)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>&#160;</td>
-          <td class="paramname"><em>color</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Pack floating point (0-1) RGB values into a uchar4. The alpha component is set to 255 (1.0).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">color</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4</dd></dl>
-<p>Pack floating point (0-1) RGBA values into a uchar4.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">color</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ad9106e5aae5b1248870f21061f36a1c9"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="ad9106e5aae5b1248870f21061f36a1c9" args="(int max_value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int rsRand </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>max_value</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Return a random value between 0 (or min_value) and max_malue. </p>
-
-</div>
-</div>
-<a class="anchor" id="a01edf1cf3cdaecb1629761b69148e189"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a01edf1cf3cdaecb1629761b69148e189" args="(int min_value, int max_value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">int rsRand </td>
-          <td>(</td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>min_value</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&#160;</td>
-          <td class="paramname"><em>max_value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a03e898d810ac44158e7461b2b2b1c356"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a03e898d810ac44158e7461b2b2b1c356" args="(float max_value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rsRand </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>max_value</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a84b2e7468314873b3aa02969e310d9e4"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a84b2e7468314873b3aa02969e310d9e4" args="(float min_value, float max_value)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rsRand </td>
-          <td>(</td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>min_value</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>max_value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a48bb0c2e7b1f2b62b2a8970c7d709eca"></a><!-- doxytag: member="rs_math.rsh::rsUnpackColor8888" ref="a48bb0c2e7b1f2b62b2a8970c7d709eca" args="(uchar4 c)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsUnpackColor8888 </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>&#160;</td>
-          <td class="paramname"><em>c</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Unpack a uchar4 color to float4. The resulting float range will be (0-1).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">c</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>float4 </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__math_8rsh_source.html b/docs/html/reference/renderscript/rs__math_8rsh_source.html
deleted file mode 100644
index 513ce48..0000000
--- a/docs/html/reference/renderscript/rs__math_8rsh_source.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__math_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __RS_MATH_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MATH_RSH__</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00027"></a>00027 
-<a name="l00031"></a>00031 <span class="keyword">extern</span> <span class="keywordtype">int</span> __attribute__((overloadable))
-<a name="l00032"></a>00032     <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">int</span> max_value);
-<a name="l00036"></a>00036 extern <span class="keywordtype">int</span> __attribute__((overloadable))
-<a name="l00037"></a>00037     <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">int</span> min_value, <span class="keywordtype">int</span> max_value);
-<a name="l00041"></a>00041 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00042"></a>00042     <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">float</span> max_value);
-<a name="l00046"></a>00046 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00047"></a>00047     <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">float</span> min_value, <span class="keywordtype">float</span> max_value);
-<a name="l00048"></a>00048 
-<a name="l00052"></a>00052 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00053"></a>00053     <a class="code" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rsFrac</a>(<span class="keywordtype">float</span>);
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 
-<a name="l00057"></a>00057 <span class="comment">// int ops</span>
-<a name="l00059"></a>00059 <span class="comment"></span>
-<a name="l00067"></a>00067 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> amount, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> low, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> high);
-<a name="l00068"></a>00068 
-<a name="l00072"></a>00072 _RS_RUNTIME <span class="keywordtype">int</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<span class="keywordtype">int</span> amount, <span class="keywordtype">int</span> low, <span class="keywordtype">int</span> high);
-<a name="l00076"></a>00076 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> amount, <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> low, <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> high);
-<a name="l00080"></a>00080 _RS_RUNTIME <span class="keywordtype">short</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<span class="keywordtype">short</span> amount, <span class="keywordtype">short</span> low, <span class="keywordtype">short</span> high);
-<a name="l00084"></a>00084 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> amount, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> low, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> high);
-<a name="l00088"></a>00088 _RS_RUNTIME <span class="keywordtype">char</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<span class="keywordtype">char</span> amount, <span class="keywordtype">char</span> low, <span class="keywordtype">char</span> high);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 
-<a name="l00101"></a>00101 __inline__ static <span class="keywordtype">void</span> __attribute__((overloadable, always_inline))
-<a name="l00102"></a><a class="code" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">00102</a> <a class="code" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rsExtractFrustumPlanes</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *viewProj,
-<a name="l00103"></a>00103                          <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right,
-<a name="l00104"></a>00104                          <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom,
-<a name="l00105"></a>00105                          <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far) {
-<a name="l00106"></a>00106     <span class="comment">// x y z w = a b c d in the plane equation</span>
-<a name="l00107"></a>00107     left-&gt;x = viewProj-&gt;m[3] + viewProj-&gt;m[0];
-<a name="l00108"></a>00108     left-&gt;y = viewProj-&gt;m[7] + viewProj-&gt;m[4];
-<a name="l00109"></a>00109     left-&gt;z = viewProj-&gt;m[11] + viewProj-&gt;m[8];
-<a name="l00110"></a>00110     left-&gt;w = viewProj-&gt;m[15] + viewProj-&gt;m[12];
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112     right-&gt;x = viewProj-&gt;m[3] - viewProj-&gt;m[0];
-<a name="l00113"></a>00113     right-&gt;y = viewProj-&gt;m[7] - viewProj-&gt;m[4];
-<a name="l00114"></a>00114     right-&gt;z = viewProj-&gt;m[11] - viewProj-&gt;m[8];
-<a name="l00115"></a>00115     right-&gt;w = viewProj-&gt;m[15] - viewProj-&gt;m[12];
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117     top-&gt;x = viewProj-&gt;m[3] - viewProj-&gt;m[1];
-<a name="l00118"></a>00118     top-&gt;y = viewProj-&gt;m[7] - viewProj-&gt;m[5];
-<a name="l00119"></a>00119     top-&gt;z = viewProj-&gt;m[11] - viewProj-&gt;m[9];
-<a name="l00120"></a>00120     top-&gt;w = viewProj-&gt;m[15] - viewProj-&gt;m[13];
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     bottom-&gt;x = viewProj-&gt;m[3] + viewProj-&gt;m[1];
-<a name="l00123"></a>00123     bottom-&gt;y = viewProj-&gt;m[7] + viewProj-&gt;m[5];
-<a name="l00124"></a>00124     bottom-&gt;z = viewProj-&gt;m[11] + viewProj-&gt;m[9];
-<a name="l00125"></a>00125     bottom-&gt;w = viewProj-&gt;m[15] + viewProj-&gt;m[13];
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     near-&gt;x = viewProj-&gt;m[3] + viewProj-&gt;m[2];
-<a name="l00128"></a>00128     near-&gt;y = viewProj-&gt;m[7] + viewProj-&gt;m[6];
-<a name="l00129"></a>00129     near-&gt;z = viewProj-&gt;m[11] + viewProj-&gt;m[10];
-<a name="l00130"></a>00130     near-&gt;w = viewProj-&gt;m[15] + viewProj-&gt;m[14];
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     far-&gt;x = viewProj-&gt;m[3] - viewProj-&gt;m[2];
-<a name="l00133"></a>00133     far-&gt;y = viewProj-&gt;m[7] - viewProj-&gt;m[6];
-<a name="l00134"></a>00134     far-&gt;z = viewProj-&gt;m[11] - viewProj-&gt;m[10];
-<a name="l00135"></a>00135     far-&gt;w = viewProj-&gt;m[15] - viewProj-&gt;m[14];
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137     <span class="keywordtype">float</span> len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(left-&gt;xyz);
-<a name="l00138"></a>00138     *left /= len;
-<a name="l00139"></a>00139     len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(right-&gt;xyz);
-<a name="l00140"></a>00140     *right /= len;
-<a name="l00141"></a>00141     len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(top-&gt;xyz);
-<a name="l00142"></a>00142     *top /= len;
-<a name="l00143"></a>00143     len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(bottom-&gt;xyz);
-<a name="l00144"></a>00144     *bottom /= len;
-<a name="l00145"></a>00145     len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(near-&gt;xyz);
-<a name="l00146"></a>00146     *near /= len;
-<a name="l00147"></a>00147     len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(far-&gt;xyz);
-<a name="l00148"></a>00148     *far /= len;
-<a name="l00149"></a>00149 }
-<a name="l00150"></a>00150 
-<a name="l00161"></a>00161 __inline__ <span class="keyword">static</span> <span class="keywordtype">bool</span> __attribute__((overloadable, always_inline))
-<a name="l00162"></a><a class="code" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">00162</a> <a class="code" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rsIsSphereInFrustum</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *sphere,
-<a name="l00163"></a>00163                       <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right,
-<a name="l00164"></a>00164                       <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom,
-<a name="l00165"></a>00165                       <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far) {
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     <span class="keywordtype">float</span> distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(left-&gt;xyz, sphere-&gt;xyz) + left-&gt;w;
-<a name="l00168"></a>00168     <span class="keywordflow">if</span> (distToCenter &lt; -sphere-&gt;w) {
-<a name="l00169"></a>00169         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00170"></a>00170     }
-<a name="l00171"></a>00171     distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(right-&gt;xyz, sphere-&gt;xyz) + right-&gt;w;
-<a name="l00172"></a>00172     <span class="keywordflow">if</span> (distToCenter &lt; -sphere-&gt;w) {
-<a name="l00173"></a>00173         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175     distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(top-&gt;xyz, sphere-&gt;xyz) + top-&gt;w;
-<a name="l00176"></a>00176     <span class="keywordflow">if</span> (distToCenter &lt; -sphere-&gt;w) {
-<a name="l00177"></a>00177         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00178"></a>00178     }
-<a name="l00179"></a>00179     distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(bottom-&gt;xyz, sphere-&gt;xyz) + bottom-&gt;w;
-<a name="l00180"></a>00180     <span class="keywordflow">if</span> (distToCenter &lt; -sphere-&gt;w) {
-<a name="l00181"></a>00181         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183     distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(near-&gt;xyz, sphere-&gt;xyz) + near-&gt;w;
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> (distToCenter &lt; -sphere-&gt;w) {
-<a name="l00185"></a>00185         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00186"></a>00186     }
-<a name="l00187"></a>00187     distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(far-&gt;xyz, sphere-&gt;xyz) + far-&gt;w;
-<a name="l00188"></a>00188     <span class="keywordflow">if</span> (distToCenter &lt; -sphere-&gt;w) {
-<a name="l00189"></a>00189         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00190"></a>00190     }
-<a name="l00191"></a>00191     <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00192"></a>00192 }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 
-<a name="l00205"></a>00205 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b);
-<a name="l00206"></a>00206 
-<a name="l00217"></a>00217 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00218"></a>00218 
-<a name="l00227"></a>00227 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> color);
-<a name="l00228"></a>00228 
-<a name="l00236"></a>00236 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> color);
-<a name="l00237"></a>00237 
-<a name="l00245"></a>00245 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="code" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rsUnpackColor8888</a>(<a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> c);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) rsYuvToRGBA_uchar4(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> y, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> u, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v);
-<a name="l00248"></a>00248 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) rsYuvToRGBA_float4(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> y, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> u, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v);
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__matrix_8rsh.html b/docs/html/reference/renderscript/rs__matrix_8rsh.html
deleted file mode 100644
index 3b8e047..0000000
--- a/docs/html/reference/renderscript/rs__matrix_8rsh.html
+++ /dev/null
@@ -1,1579 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>frameworks/rs/scriptc/rs_matrix.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">frameworks/rs/scriptc/rs_matrix.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a08a247cdf2e70e78310bf04f9ecd5144">rsMatrixSet</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#af9707d7be5945bf55ed53683624176ff">rsMatrixSet</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#acfebfc7b97e7282b78cd9c65b791932a">rsMatrixGet</a> (const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a683b4537b98103c50cc66780dfe8cd69">rsMatrixGet</a> (const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5b31e83553efa947db2198674d5db043">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad2954a5ac11d2370227296be89e92471">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const float *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aef942535c5d56072125dcf5244970ea2">rsMatrixLoad</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const float *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aa327089f7ad9161d7372094163147005">rsMatrixLoad</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const float *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5239a3f5f2becd20507d0aa56638ba03">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a06176acb38405937cb94c835a712a3b3">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a3a3d0f0053720fb4afb3a3eb32e42a82">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a654e5abe095770979d740f7b55382bd0">rsMatrixLoad</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5f3697805c794c9c9f2f8cfdde4b9a44">rsMatrixLoad</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rsMatrixLoadRotate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rsMatrixLoadScale</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rsMatrixLoadTranslate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *lhs, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a78872343ea6a5c1a846160ccdc4add52">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *lhs, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ae0dd4755c28fc896626ebf5dc784130f">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *lhs, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ae0b03aeec17ec8b9c5e75f8efb1bdc53">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ab1973ad3efa0ab2d53f466dd9fb190bb">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rsMatrixRotate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rsMatrixScale</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rsMatrixLoadOrtho</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float left, float right, float bottom, float top, float near, float far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rsMatrixLoadFrustum</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float left, float right, float bottom, float top, float near, float far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rsMatrixLoadPerspective</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float fovy, float aspect, float near, float far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a47b6abbf32ffaf77bb13d96c3f05779f">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a716bc2d29b80eb25388aba3ba8845aef">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rsMatrixInverse</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rsMatrixInverseTranspose</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac52acb31a705f6c68af8bddea0e79969">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a49164dd4d4e85b212196028b1fd89dc1">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Matrix functions. </p>
-<p>These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4. They are particularly useful for graphical transformations and are compatible with OpenGL.</p>
-<p>A few general notes:</p>
-<ul>
-<li>We use a zero-based index for rows and columns. E.g. the last element of a <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> is found at (3, 3).</li>
-</ul>
-<ul>
-<li>RenderScript uses column-based vectors. Transforming a vector is done by postmultiplying the vector, e.g. <em>(matrix * vector)</em>, as provided by <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</li>
-</ul>
-<ul>
-<li>To create a transformation matrix that performs two transformations at once, multiply the two source matrices, with the first transformation as the right argument. E.g. to create a transformation matrix that applies the transformation <em>s1</em> followed by <em>s2</em>, call rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1). This derives from <em>s2 * (s1 * v)</em>, which is <em>(s2 * s1) * v</em>.</li>
-</ul>
-<ul>
-<li>We have two style of functions to create transformation matrices: rsMatrixLoad<em>Transformation</em> and rsMatrix<em>Transformation</em>. The former style simply stores the transformation matrix in the first argument. The latter modifies a pre-existing transformation matrix so that the new transformation happens first. E.g. if you call <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a> on a matrix that already does a scaling, the resulting matrix when applied to a vector will first do the translation then the scaling. </li>
-</ul>
-
-<p>Definition in file <a class="el" href="rs__matrix_8rsh_source.html">rs_matrix.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="af26fdbf8b8f0ed5d1b53f62b2aef5110"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="af26fdbf8b8f0ed5d1b53f62b2aef5110" args="(const rs_matrix4x4 *m, uint32_t col, uint32_t row)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>col</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>row</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns one element of a matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to extract the element from. </td></tr>
-    <tr><td class="paramname">col</td><td>The zero-based column of the element to be extracted. </td></tr>
-    <tr><td class="paramname">row</td><td>The zero-based row of the element to extracted.</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="warning"><dt><b>Warning:</b></dt><dd>The order of the column and row parameters may be unexpected.</dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>float </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="acfebfc7b97e7282b78cd9c65b791932a"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="acfebfc7b97e7282b78cd9c65b791932a" args="(const rs_matrix3x3 *m, uint32_t col, uint32_t row)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>col</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>row</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a683b4537b98103c50cc66780dfe8cd69"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="a683b4537b98103c50cc66780dfe8cd69" args="(const rs_matrix2x2 *m, uint32_t col, uint32_t row)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>col</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>row</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a00b6a334ba5ac94d84850f22ec9f4de5"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixInverse" ref="a00b6a334ba5ac94d84850f22ec9f4de5" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsMatrixInverse </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Inverts a matrix in place.</p>
-<p>Returns true if the matrix was successfully inversed.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to invert. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac05080d52da2d99a759ef34fa0655e82"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixInverseTranspose" ref="ac05080d52da2d99a759ef34fa0655e82" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsMatrixInverseTranspose </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Inverts and transpose a matrix in place.</p>
-<p>The matrix is first inverted then transposed. Returns true if the matrix was successfully inverted.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac380c4117e047da494a74f0dad20fab3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="ac380c4117e047da494a74f0dad20fab3" args="(rs_matrix4x4 *m, const float *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const float *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the elements of a matrix from an array of floats.</p>
-<p>The array of floats should be in row-major order, i.e. the element a <em>row 0, column 0</em> should be first, followed by the element at <em>row 0, column 1</em>, etc.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">v</td><td>The array of values to set the matrix to. These arrays should be 4, 9, or 16 floats long, depending on the matrix size. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aef942535c5d56072125dcf5244970ea2"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="aef942535c5d56072125dcf5244970ea2" args="(rs_matrix3x3 *m, const float *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const float *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa327089f7ad9161d7372094163147005"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="aa327089f7ad9161d7372094163147005" args="(rs_matrix2x2 *m, const float *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const float *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5239a3f5f2becd20507d0aa56638ba03"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a5239a3f5f2becd20507d0aa56638ba03" args="(rs_matrix4x4 *m, const rs_matrix4x4 *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the elements of a matrix from another matrix.</p>
-<p>If the source matrix is smaller than the destination, the rest of the destination is filled with elements of the identity matrix. E.g. loading a <a class="el" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> into a <a class="el" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> will give:</p>
- <table>
- <tr><td>m00</td><td>m01</td><td>0.0</td><td>0.0</td></tr>
- <tr><td>m10</td><td>m11</td><td>0.0</td><td>0.0</td></tr>
- <tr><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td></tr>
- <tr><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td></tr>
- </table><dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">v</td><td>The source matrix. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a06176acb38405937cb94c835a712a3b3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a06176acb38405937cb94c835a712a3b3" args="(rs_matrix4x4 *m, const rs_matrix3x3 *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a3a3d0f0053720fb4afb3a3eb32e42a82"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a3a3d0f0053720fb4afb3a3eb32e42a82" args="(rs_matrix4x4 *m, const rs_matrix2x2 *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a654e5abe095770979d740f7b55382bd0"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a654e5abe095770979d740f7b55382bd0" args="(rs_matrix3x3 *m, const rs_matrix3x3 *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5f3697805c794c9c9f2f8cfdde4b9a44"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a5f3697805c794c9c9f2f8cfdde4b9a44" args="(rs_matrix2x2 *m, const rs_matrix2x2 *v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoad </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad25760aaf01e95d0055237afab41bbb3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadFrustum" ref="ad25760aaf01e95d0055237afab41bbb3" args="(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadFrustum </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>left</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>right</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>bottom</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>top</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>near</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>far</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load a frustum projection matrix.</p>
-<p>Constructs a frustum projection matrix, transforming the box identified by the six clipping planes <em>left, right, bottom, top, near, far</em>.</p>
-<p>To apply this projection to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf">https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf</a></p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">left</td><td></td></tr>
-    <tr><td class="paramname">right</td><td></td></tr>
-    <tr><td class="paramname">bottom</td><td></td></tr>
-    <tr><td class="paramname">top</td><td></td></tr>
-    <tr><td class="paramname">near</td><td></td></tr>
-    <tr><td class="paramname">far</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a0ffd9de971cf10d0a663ff565be8d3cc"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="a0ffd9de971cf10d0a663ff565be8d3cc" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadIdentity </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the elements of a matrix to the identity matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a5b31e83553efa947db2198674d5db043"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="a5b31e83553efa947db2198674d5db043" args="(rs_matrix3x3 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadIdentity </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad2954a5ac11d2370227296be89e92471"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="ad2954a5ac11d2370227296be89e92471" args="(rs_matrix2x2 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadIdentity </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a79f14c4c0f5ecc1bbd0bf54da8b653ef"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="a79f14c4c0f5ecc1bbd0bf54da8b653ef" args="(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>lhs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply two matrices.</p>
-<p>Sets <em>m</em> to the matrix product of <em>lhs * rhs</em>.</p>
-<p>To combine two 4x4 transformaton matrices, multiply the second transformation matrix by the first transformation matrix. E.g. to create a transformation matrix that applies the transformation <em>s1</em> followed by <em>s2</em>, call rsMatrixLoadMultiply(&amp;combined, &amp;s2, &amp;s1).</p>
-<dl class="warning"><dt><b>Warning:</b></dt><dd>As of version 21, storing the result back into right matrix is not supported and will result in undefined behavior. Use rsMatrixMulitply instead. E.g. instead of doing rsMatrixLoadMultiply (&amp;m2r, &amp;m2r, &amp;m2l), use rsMatrixMultiply (&amp;m2r, &amp;m2l). rsMatrixLoadMultiply (&amp;m2l, &amp;m2r, &amp;m2l) works as expected.</dd></dl>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">lhs</td><td>The left matrix of the product. </td></tr>
-    <tr><td class="paramname">rhs</td><td>The right matrix of the product. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a78872343ea6a5c1a846160ccdc4add52"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="a78872343ea6a5c1a846160ccdc4add52" args="(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>lhs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae0dd4755c28fc896626ebf5dc784130f"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="ae0dd4755c28fc896626ebf5dc784130f" args="(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>lhs</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4c59884a0e534dbbcdc5655842732d43"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadOrtho" ref="a4c59884a0e534dbbcdc5655842732d43" args="(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadOrtho </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>left</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>right</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>bottom</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>top</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>near</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>far</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load an orthographic projection matrix.</p>
-<p>Constructs an orthographic projection matrix, transforming the box identified by the six clipping planes <em>left, right, bottom, top, near, far</em> into a unit cube with a corner at <em>(-1, -1, -1)</em> and the opposite at <em>(1, 1, 1)</em>.</p>
-<p>To apply this projection to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="https://en.wikipedia.org/wiki/Orthographic_projection">https://en.wikipedia.org/wiki/Orthographic_projection</a> and <a href="https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf">https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf</a></p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">left</td><td></td></tr>
-    <tr><td class="paramname">right</td><td></td></tr>
-    <tr><td class="paramname">bottom</td><td></td></tr>
-    <tr><td class="paramname">top</td><td></td></tr>
-    <tr><td class="paramname">near</td><td></td></tr>
-    <tr><td class="paramname">far</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aa404c34d7478f2921f7415d2da95d02b"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadPerspective" ref="aa404c34d7478f2921f7415d2da95d02b" args="(rs_matrix4x4 *m, float fovy, float aspect, float near, float far)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadPerspective </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>fovy</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>aspect</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>near</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>far</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load a perspective projection matrix.</p>
-<p>Constructs a perspective projection matrix, assuming a symmetrical field of view.</p>
-<p>To apply this projection to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf">https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf</a></p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">fovy</td><td>Field of view, in degrees along the Y axis. </td></tr>
-    <tr><td class="paramname">aspect</td><td>Ratio of x / y. </td></tr>
-    <tr><td class="paramname">near</td><td>The near clipping plane. </td></tr>
-    <tr><td class="paramname">far</td><td>The far clipping plane. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a268032f3ac6d766b1d7fe72a6cb50464"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadRotate" ref="a268032f3ac6d766b1d7fe72a6cb50464" args="(rs_matrix4x4 *m, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadRotate </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>rot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load a rotation matrix.</p>
-<p>This function creates a rotation matrix. The axis of rotation is the <em>(x, y, z)</em> vector.</p>
-<p>To rotate a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="http://en.wikipedia.org/wiki/Rotation_matrix">http://en.wikipedia.org/wiki/Rotation_matrix</a> .</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">rot</td><td>How much rotation to do, in degrees. </td></tr>
-    <tr><td class="paramname">x</td><td>The x component of the vector that is the axis of rotation. </td></tr>
-    <tr><td class="paramname">y</td><td>The y component of the vector that is the axis of rotation. </td></tr>
-    <tr><td class="paramname">z</td><td>The z component of the vector that is the axis of rotation. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="acaf51d1f9ad5041ce01fbf8b7c5923fd"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadScale" ref="acaf51d1f9ad5041ce01fbf8b7c5923fd" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadScale </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load a scale matrix.</p>
-<p>This function creates a scaling matrix, where each component of a vector is multiplied by a number. This number can be negative.</p>
-<p>To scale a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">x</td><td>The multiple to scale the x components by. </td></tr>
-    <tr><td class="paramname">y</td><td>The multiple to scale the y components by. </td></tr>
-    <tr><td class="paramname">z</td><td>The multiple to scale the z components by. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1b521c8a3d1260fa732cbf0a71af0e74"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadTranslate" ref="a1b521c8a3d1260fa732cbf0a71af0e74" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixLoadTranslate </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Load a translation matrix.</p>
-<p>This function creates a translation matrix, where a number is added to each element of a vector.</p>
-<p>To translate a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
-    <tr><td class="paramname">x</td><td>The number to add to each x component. </td></tr>
-    <tr><td class="paramname">y</td><td>The number to add to each y component. </td></tr>
-    <tr><td class="paramname">z</td><td>The number to add to each z component. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a97953ab2606900a839e5816c619abe66"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a97953ab2606900a839e5816c619abe66" args="(rs_matrix4x4 *m, const rs_matrix4x4 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply a matrix into another one.</p>
-<p>Sets <em>m</em> to the matrix product <em>m * rhs</em>.</p>
-<p>When combining two 4x4 transformation matrices using this function, the resulting matrix will correspond to performing the <em>rhs</em> transformation first followed by the original <em>m</em> transformation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The left matrix of the product and the matrix to be set. </td></tr>
-    <tr><td class="paramname">rhs</td><td>The right matrix of the product. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ae0b03aeec17ec8b9c5e75f8efb1bdc53"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="ae0b03aeec17ec8b9c5e75f8efb1bdc53" args="(rs_matrix3x3 *m, const rs_matrix3x3 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ab1973ad3efa0ab2d53f466dd9fb190bb"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="ab1973ad3efa0ab2d53f466dd9fb190bb" args="(rs_matrix2x2 *m, const rs_matrix2x2 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a47b6abbf32ffaf77bb13d96c3f05779f"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a47b6abbf32ffaf77bb13d96c3f05779f" args="(rs_matrix4x4 *m, float4 in)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsMatrixMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>&#160;</td>
-          <td class="paramname"><em>in</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply a vector by a matrix.</p>
-<p>Returns the post-multiplication of the vector by the matrix, ie. <em>m * in</em>.</p>
-<p>When multiplying a <em>float3</em> to a <em><a class="el" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a></em>, the vector is expanded with (1).</p>
-<p>When multiplying a <em>float2</em> to a <em><a class="el" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a></em>, the vector is expanded with (0, 1).</p>
-<p>When multiplying a <em>float2</em> to a <em><a class="el" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a></em>, the vector is expanded with (0).</p>
-<p>This function is available in API version 10-13. Starting with API 14, the function takes a const matrix as the first argument.</p>
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a716bc2d29b80eb25388aba3ba8845aef"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a716bc2d29b80eb25388aba3ba8845aef" args="(rs_matrix3x3 *m, float3 in)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> rsMatrixMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>&#160;</td>
-          <td class="paramname"><em>in</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4d9a8bb7c3f5d67b14fa349bdd531d13"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a4d9a8bb7c3f5d67b14fa349bdd531d13" args="(rs_matrix2x2 *m, float2 in)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> rsMatrixMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>&#160;</td>
-          <td class="paramname"><em>in</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad5ed05ca4880397fb29615e3c6798de1"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixRotate" ref="ad5ed05ca4880397fb29615e3c6798de1" args="(rs_matrix4x4 *m, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixRotate </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>rot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply the matrix <em>m</em> with a rotation matrix.</p>
-<p>This function modifies a transformation matrix to first do a rotation. The axis of rotation is the <em>(x, y, z)</em> vector.</p>
-<p>To apply this combined transformation to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
-    <tr><td class="paramname">rot</td><td>How much rotation to do, in degrees. </td></tr>
-    <tr><td class="paramname">x</td><td>The x component of the vector that is the axis of rotation. </td></tr>
-    <tr><td class="paramname">y</td><td>The y component of the vector that is the axis of rotation. </td></tr>
-    <tr><td class="paramname">z</td><td>The z component of the vector that is the axis of rotation. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a94cc6b22bd1a6c07a9a1c1d21afb392c"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixScale" ref="a94cc6b22bd1a6c07a9a1c1d21afb392c" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixScale </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply the matrix <em>m</em> with a scaling matrix.</p>
-<p>This function modifies a transformation matrix to first do a scaling. When scaling, each component of a vector is multiplied by a number. This number can be negative.</p>
-<p>To apply this combined transformation to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
-    <tr><td class="paramname">x</td><td>The multiple to scale the x components by. </td></tr>
-    <tr><td class="paramname">y</td><td>The multiple to scale the y components by. </td></tr>
-    <tr><td class="paramname">z</td><td>The multiple to scale the z components by. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aca88832ed720e301780152c60884393e"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="aca88832ed720e301780152c60884393e" args="(rs_matrix4x4 *m, uint32_t col, uint32_t row, float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>col</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>row</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set an element of a matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix that will be modified. </td></tr>
-    <tr><td class="paramname">col</td><td>The zero-based column of the element to be set. </td></tr>
-    <tr><td class="paramname">row</td><td>The zero-based row of the element to be set. </td></tr>
-    <tr><td class="paramname">v</td><td>The value to set.</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="warning"><dt><b>Warning:</b></dt><dd>The order of the column and row parameters may be unexpected.</dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a08a247cdf2e70e78310bf04f9ecd5144"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="a08a247cdf2e70e78310bf04f9ecd5144" args="(rs_matrix3x3 *m, uint32_t col, uint32_t row, float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>col</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>row</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af9707d7be5945bf55ed53683624176ff"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="af9707d7be5945bf55ed53683624176ff" args="(rs_matrix2x2 *m, uint32_t col, uint32_t row, float v)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>col</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>row</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>v</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4df5f9b5bb6044f3c3426f2f58b94405"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranslate" ref="a4df5f9b5bb6044f3c3426f2f58b94405" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixTranslate </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply the matrix <em>m</em> with a translation matrix.</p>
-<p>This function modifies a transformation matrix to first do a translation. When translating, a number is added to each component of a vector.</p>
-<p>To apply this combined transformation to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
-    <tr><td class="paramname">x</td><td>The number to add to each x component. </td></tr>
-    <tr><td class="paramname">y</td><td>The number to add to each y component. </td></tr>
-    <tr><td class="paramname">z</td><td>The number to add to each z component. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a88095c70f1550c760844b3e32e41a31a"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="a88095c70f1550c760844b3e32e41a31a" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixTranspose </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Transpose the matrix m in place.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>The matrix to transpose. </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac52acb31a705f6c68af8bddea0e79969"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="ac52acb31a705f6c68af8bddea0e79969" args="(rs_matrix3x3 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixTranspose </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a49164dd4d4e85b212196028b1fd89dc1"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="a49164dd4d4e85b212196028b1fd89dc1" args="(rs_matrix2x2 *m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsMatrixTranspose </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__matrix_8rsh_source.html b/docs/html/reference/renderscript/rs__matrix_8rsh_source.html
deleted file mode 100644
index 77144bd..0000000
--- a/docs/html/reference/renderscript/rs__matrix_8rsh_source.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>frameworks/rs/scriptc/rs_matrix.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">frameworks/rs/scriptc/rs_matrix.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__matrix_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00050"></a>00050 <span class="preprocessor">#ifndef __RS_MATRIX_RSH__</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MATRIX_RSH__</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00067"></a>00067 <a class="code" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <span class="keywordtype">float</span> v);
-<a name="l00071"></a>00071 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00072"></a>00072 <a class="code" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <span class="keywordtype">float</span> v);
-<a name="l00076"></a>00076 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00077"></a>00077 <a class="code" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <span class="keywordtype">float</span> v);
-<a name="l00078"></a>00078 
-<a name="l00091"></a>00091 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00092"></a>00092 <a class="code" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row);
-<a name="l00096"></a>00096 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00097"></a>00097 <a class="code" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row);
-<a name="l00101"></a>00101 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00102"></a>00102 <a class="code" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a>(const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row);
-<a name="l00103"></a>00103 
-<a name="l00109"></a>00109 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00113"></a>00113 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m);
-<a name="l00117"></a>00117 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m);
-<a name="l00118"></a>00118 
-<a name="l00130"></a>00130 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <span class="keywordtype">float</span> *v);
-<a name="l00134"></a>00134 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <span class="keywordtype">float</span> *v);
-<a name="l00138"></a>00138 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <span class="keywordtype">float</span> *v);
-<a name="l00156"></a>00156 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *v);
-<a name="l00160"></a>00160 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *v);
-<a name="l00164"></a>00164 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *v);
-<a name="l00168"></a>00168 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *v);
-<a name="l00172"></a>00172 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *v);
-<a name="l00173"></a>00173 
-<a name="l00191"></a>00191 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00192"></a>00192 <a class="code" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rsMatrixLoadRotate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00193"></a>00193 
-<a name="l00208"></a>00208 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00209"></a>00209 <a class="code" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rsMatrixLoadScale</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00210"></a>00210 
-<a name="l00225"></a>00225 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00226"></a>00226 <a class="code" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rsMatrixLoadTranslate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00227"></a>00227 
-<a name="l00247"></a>00247 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00248"></a>00248 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *lhs, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *rhs);
-<a name="l00252"></a>00252 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00253"></a>00253 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *lhs, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *rhs);
-<a name="l00257"></a>00257 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00258"></a>00258 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *lhs, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *rhs);
-<a name="l00259"></a>00259 
-<a name="l00272"></a>00272 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00273"></a>00273 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *rhs);
-<a name="l00277"></a>00277 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00278"></a>00278 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *rhs);
-<a name="l00282"></a>00282 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00283"></a>00283 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *rhs);
-<a name="l00284"></a>00284 
-<a name="l00300"></a>00300 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00301"></a>00301 <a class="code" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rsMatrixRotate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00302"></a>00302 
-<a name="l00318"></a>00318 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00319"></a>00319 <a class="code" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rsMatrixScale</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00320"></a>00320 
-<a name="l00336"></a>00336 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00337"></a>00337 <a class="code" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00338"></a>00338 
-<a name="l00361"></a>00361 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00362"></a>00362 <a class="code" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rsMatrixLoadOrtho</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> left, <span class="keywordtype">float</span> right, <span class="keywordtype">float</span> bottom, <span class="keywordtype">float</span> top, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
-<a name="l00363"></a>00363 
-<a name="l00384"></a>00384 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00385"></a>00385 <a class="code" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rsMatrixLoadFrustum</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> left, <span class="keywordtype">float</span> right, <span class="keywordtype">float</span> bottom, <span class="keywordtype">float</span> top, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
-<a name="l00386"></a>00386 
-<a name="l00403"></a>00403 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00404"></a>00404 <a class="code" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rsMatrixLoadPerspective</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a>* m, <span class="keywordtype">float</span> fovy, <span class="keywordtype">float</span> aspect, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406 <span class="preprocessor">#if !defined(RS_VERSION) || (RS_VERSION &lt; 14)</span>
-<a name="l00407"></a>00407 <span class="preprocessor"></span>
-<a name="l00421"></a>00421 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00422"></a>00422 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in);
-<a name="l00423"></a>00423 
-<a name="l00427"></a>00427 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00428"></a>00428 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00429"></a>00429 
-<a name="l00433"></a>00433 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00434"></a>00434 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00435"></a>00435 
-<a name="l00439"></a>00439 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00440"></a>00440 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00441"></a>00441 
-<a name="l00445"></a>00445 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00446"></a>00446 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00447"></a>00447 
-<a name="l00451"></a>00451 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable))
-<a name="l00452"></a>00452 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00453"></a>00453 <span class="preprocessor">#else</span>
-<a name="l00454"></a>00454 <span class="preprocessor"></span>
-<a name="l00467"></a>00467 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00468"></a>00468 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in);
-<a name="l00469"></a>00469 
-<a name="l00473"></a>00473 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00474"></a>00474 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00475"></a>00475 
-<a name="l00479"></a>00479 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00480"></a>00480 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00481"></a>00481 
-<a name="l00485"></a>00485 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00486"></a>00486 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00487"></a>00487 
-<a name="l00491"></a>00491 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00492"></a>00492 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00493"></a>00493 
-<a name="l00497"></a>00497 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable))
-<a name="l00498"></a>00498 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00499"></a>00499 <span class="preprocessor">#endif</span>
-<a name="l00500"></a>00500 <span class="preprocessor"></span>
-<a name="l00501"></a>00501 
-<a name="l00509"></a>00509 <span class="keyword">extern</span> <span class="keywordtype">bool</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rsMatrixInverse</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00510"></a>00510 
-<a name="l00519"></a>00519 extern <span class="keywordtype">bool</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rsMatrixInverseTranspose</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00520"></a>00520 
-<a name="l00526"></a>00526 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00530"></a>00530 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m);
-<a name="l00534"></a>00534 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m);
-<a name="l00535"></a>00535 
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__mesh_8rsh.html b/docs/html/reference/renderscript/rs__mesh_8rsh.html
deleted file mode 100644
index 82824adc..0000000
--- a/docs/html/reference/renderscript/rs__mesh_8rsh.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rsgMeshGetVertexAllocationCount</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rsgMeshGetPrimitiveCount</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rsgMeshGetVertexAllocation</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rsgMeshGetIndexAllocation</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rsgMeshGetPrimitive</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Mesh routines. </p>
-
-<p>Definition in file <a class="el" href="rs__mesh_8rsh_source.html">rs_mesh.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a05257c9252e7804397d6a6f7549bae5a"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetIndexAllocation" ref="a05257c9252e7804397d6a6f7549bae5a" args="(rs_mesh m, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="structrs__allocation.html">rs_allocation</a> rsgMeshGetIndexAllocation </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns an allocation containing index data or a null allocation if only the primitive is specified</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the index allocation </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>allocation containing index data </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="af467f1c21cc9221071334f8234c29466"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetPrimitive" ref="af467f1c21cc9221071334f8234c29466" args="(rs_mesh m, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a> rsgMeshGetPrimitive </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the primitive describing how a part of the mesh is rendered</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the primitive </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>primitive describing how the mesh is rendered </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ae0a0178cc02508517013486be4500d7f"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetPrimitiveCount" ref="ae0a0178cc02508517013486be4500d7f" args="(rs_mesh m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsgMeshGetPrimitiveCount </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Meshes could have multiple index sets, this function returns the number.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of primitive groups in the mesh. This would include simple primitives as well as allocations containing index data </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a43e1d84147176cb0a1659552fa8da49f"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetVertexAllocation" ref="a43e1d84147176cb0a1659552fa8da49f" args="(rs_mesh m, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="structrs__allocation.html">rs_allocation</a> rsgMeshGetVertexAllocation </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns an allocation that is part of the mesh and contains vertex data, e.g. positions, normals, texcoords</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
-    <tr><td class="paramname">index</td><td>index of the vertex allocation </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>allocation containing vertex data </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a7578d6d93154ac881715ab511449fab9"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetVertexAllocationCount" ref="a7578d6d93154ac881715ab511449fab9" args="(rs_mesh m)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsgMeshGetVertexAllocationCount </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>m</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the number of allocations in the mesh that contain vertex data</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of allocations in the mesh that contain vertex data </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__mesh_8rsh_source.html b/docs/html/reference/renderscript/rs__mesh_8rsh_source.html
deleted file mode 100644
index f9416c8..0000000
--- a/docs/html/reference/renderscript/rs__mesh_8rsh_source.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__mesh_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_MESH_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MESH_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// New API&#39;s</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00038"></a>00038     <a class="code" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rsgMeshGetVertexAllocationCount</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m);
-<a name="l00039"></a>00039 
-<a name="l00049"></a>00049 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00050"></a>00050     <a class="code" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rsgMeshGetPrimitiveCount</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m);
-<a name="l00051"></a>00051 
-<a name="l00060"></a>00060 extern <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> __attribute__((overloadable))
-<a name="l00061"></a>00061     <a class="code" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rsgMeshGetVertexAllocation</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00062"></a>00062 
-<a name="l00071"></a>00071 extern <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> __attribute__((overloadable))
-<a name="l00072"></a>00072     <a class="code" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rsgMeshGetIndexAllocation</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00073"></a>00073 
-<a name="l00082"></a>00082 extern <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a> __attribute__((overloadable))
-<a name="l00083"></a>00083     <a class="code" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rsgMeshGetPrimitive</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="preprocessor">#endif // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>
-<a name="l00087"></a>00087 <span class="preprocessor">#endif // __RS_MESH_RSH__</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__object_8rsh.html b/docs/html/reference/renderscript/rs__object_8rsh.html
deleted file mode 100644
index 6ace343..0000000
--- a/docs/html/reference/renderscript/rs__object_8rsh.html
+++ /dev/null
@@ -1,858 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a> (<a class="el" href="structrs__element.html">rs_element</a> *dst, <a class="el" href="structrs__element.html">rs_element</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ab1c6d0672b6b88add70a98e627eeb7ae">rsSetObject</a> (<a class="el" href="structrs__type.html">rs_type</a> *dst, <a class="el" href="structrs__type.html">rs_type</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#af3446b1b9c2e4b600cdc8d828f3dbb59">rsSetObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> *dst, <a class="el" href="structrs__allocation.html">rs_allocation</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5132f90b4aaf8d2e35e6ad021fb08175">rsSetObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> *dst, <a class="el" href="structrs__sampler.html">rs_sampler</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a9dfc520ed267ac9733760bc628a93cae">rsSetObject</a> (<a class="el" href="structrs__script.html">rs_script</a> *dst, <a class="el" href="structrs__script.html">rs_script</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a9c2f648c1e68018621a3123545a21d83">rsSetObject</a> (<a class="el" href="structrs__path.html">rs_path</a> *dst, <a class="el" href="structrs__path.html">rs_path</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4d6368cf71d6fd2e55efbe23af6cfd7c">rsSetObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> *dst, <a class="el" href="structrs__mesh.html">rs_mesh</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a8135bceeb7b3ec8bf9a49d04e39bd565">rsSetObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *dst, <a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5512c023d40e416bea709f8d8caf9674">rsSetObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *dst, <a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a42c0d25d78051a1de58a7a1c4dcfdada">rsSetObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> *dst, <a class="el" href="structrs__program__raster.html">rs_program_raster</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4babadff570c9f57edbb3fb98c80a113">rsSetObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> *dst, <a class="el" href="structrs__program__store.html">rs_program_store</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ad1af9aed63d9f925a8e6288c0607d55b">rsSetObject</a> (<a class="el" href="structrs__font.html">rs_font</a> *dst, <a class="el" href="structrs__font.html">rs_font</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a> (<a class="el" href="structrs__element.html">rs_element</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ae9c24592eb550e72c9ff480dfbb9fe07">rsClearObject</a> (<a class="el" href="structrs__type.html">rs_type</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5b944e2762ce1a44f7e63abd41851bcd">rsClearObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a51fe2098cc5c2ff73ceff8cc46b6dd89">rsClearObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a0034d7e67f80a9ce2e1139f1cb54b9a4">rsClearObject</a> (<a class="el" href="structrs__script.html">rs_script</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4cd7e401ffe73eb23dffb01d5faf14cc">rsClearObject</a> (<a class="el" href="structrs__path.html">rs_path</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a6f26564cf4fa1bcd46db51a478bf91b9">rsClearObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afc6aca3a903d5e2021d9eeab4836fd26">rsClearObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a712fcc988eedf21845495477cec54029">rsClearObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a06b6d56105e192e121a5a4a555dc7b70">rsClearObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a691d3c2564dd2c08d965ccb1c73a9b29">rsClearObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aa246aa3c8162ef03e43bc0062671ae29">rsClearObject</a> (<a class="el" href="structrs__font.html">rs_font</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a> (<a class="el" href="structrs__element.html">rs_element</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a445c32d5bc085369f1ffa1a8ba13a381">rsIsObject</a> (<a class="el" href="structrs__type.html">rs_type</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afd33063fc6e45cb23f9a6f68dc2976ba">rsIsObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a509c7f0eacf1f07a3e7afaa029168f11">rsIsObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a6dc9db5fb60856b04c0b495a85affcbc">rsIsObject</a> (<a class="el" href="structrs__script.html">rs_script</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a33f979562536752539f35e6e831dab62">rsIsObject</a> (<a class="el" href="structrs__path.html">rs_path</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aa1860f7322da25f4c4a1727571b01e2b">rsIsObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afa57d9148778b03b270facbdbcb88816">rsIsObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#acaa5da532eab1803a72fc4af2e7c6573">rsIsObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a2358cf1fd6b2e0b1d6f1bde8664d9c41">rsIsObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a547cd0a8071d895139893f1e10f5c3fd">rsIsObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ac1d6da920f12974b3633d25ed078da2d">rsIsObject</a> (<a class="el" href="structrs__font.html">rs_font</a>)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Object routines. </p>
-
-<p>Definition in file <a class="el" href="rs__object_8rsh_source.html">rs_object.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="aab5f47dc11b9044b3d02c4ed818fe6e7"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="aab5f47dc11b9044b3d02c4ed818fe6e7" args="(rs_element *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Sets the object to NULL.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>bool </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ae9c24592eb550e72c9ff480dfbb9fe07"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="ae9c24592eb550e72c9ff480dfbb9fe07" args="(rs_type *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5b944e2762ce1a44f7e63abd41851bcd"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a5b944e2762ce1a44f7e63abd41851bcd" args="(rs_allocation *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a51fe2098cc5c2ff73ceff8cc46b6dd89"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a51fe2098cc5c2ff73ceff8cc46b6dd89" args="(rs_sampler *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0034d7e67f80a9ce2e1139f1cb54b9a4"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a0034d7e67f80a9ce2e1139f1cb54b9a4" args="(rs_script *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4cd7e401ffe73eb23dffb01d5faf14cc"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a4cd7e401ffe73eb23dffb01d5faf14cc" args="(rs_path *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6f26564cf4fa1bcd46db51a478bf91b9"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a6f26564cf4fa1bcd46db51a478bf91b9" args="(rs_mesh *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="afc6aca3a903d5e2021d9eeab4836fd26"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="afc6aca3a903d5e2021d9eeab4836fd26" args="(rs_program_fragment *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a712fcc988eedf21845495477cec54029"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a712fcc988eedf21845495477cec54029" args="(rs_program_vertex *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a06b6d56105e192e121a5a4a555dc7b70"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a06b6d56105e192e121a5a4a555dc7b70" args="(rs_program_raster *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a691d3c2564dd2c08d965ccb1c73a9b29"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a691d3c2564dd2c08d965ccb1c73a9b29" args="(rs_program_store *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa246aa3c8162ef03e43bc0062671ae29"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="aa246aa3c8162ef03e43bc0062671ae29" args="(rs_font *dst)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsClearObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> *&#160;</td>
-          <td class="paramname"><em>dst</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a81f862730b961bd93ac132c24cbc0f82"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a81f862730b961bd93ac132c24cbc0f82" args="(rs_element)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Tests if the object is valid. Returns true if the object is valid, false if it is NULL.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>bool </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a445c32d5bc085369f1ffa1a8ba13a381"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a445c32d5bc085369f1ffa1a8ba13a381" args="(rs_type)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="afd33063fc6e45cb23f9a6f68dc2976ba"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="afd33063fc6e45cb23f9a6f68dc2976ba" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a509c7f0eacf1f07a3e7afaa029168f11"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a509c7f0eacf1f07a3e7afaa029168f11" args="(rs_sampler)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6dc9db5fb60856b04c0b495a85affcbc"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a6dc9db5fb60856b04c0b495a85affcbc" args="(rs_script)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a33f979562536752539f35e6e831dab62"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a33f979562536752539f35e6e831dab62" args="(rs_path)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa1860f7322da25f4c4a1727571b01e2b"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="aa1860f7322da25f4c4a1727571b01e2b" args="(rs_mesh)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="afa57d9148778b03b270facbdbcb88816"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="afa57d9148778b03b270facbdbcb88816" args="(rs_program_fragment)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="acaa5da532eab1803a72fc4af2e7c6573"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="acaa5da532eab1803a72fc4af2e7c6573" args="(rs_program_vertex)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a2358cf1fd6b2e0b1d6f1bde8664d9c41"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a2358cf1fd6b2e0b1d6f1bde8664d9c41" args="(rs_program_raster)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a547cd0a8071d895139893f1e10f5c3fd"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a547cd0a8071d895139893f1e10f5c3fd" args="(rs_program_store)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac1d6da920f12974b3633d25ed078da2d"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="ac1d6da920f12974b3633d25ed078da2d" args="(rs_font)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsIsObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a>&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af6983a1578621ce283acc07f876cda62"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="af6983a1578621ce283acc07f876cda62" args="(rs_element *dst, rs_element src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Copy reference to the specified object.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">dst</td><td></td></tr>
-    <tr><td class="paramname">src</td><td></td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ab1c6d0672b6b88add70a98e627eeb7ae"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="ab1c6d0672b6b88add70a98e627eeb7ae" args="(rs_type *dst, rs_type src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af3446b1b9c2e4b600cdc8d828f3dbb59"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="af3446b1b9c2e4b600cdc8d828f3dbb59" args="(rs_allocation *dst, rs_allocation src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5132f90b4aaf8d2e35e6ad021fb08175"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a5132f90b4aaf8d2e35e6ad021fb08175" args="(rs_sampler *dst, rs_sampler src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9dfc520ed267ac9733760bc628a93cae"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a9dfc520ed267ac9733760bc628a93cae" args="(rs_script *dst, rs_script src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9c2f648c1e68018621a3123545a21d83"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a9c2f648c1e68018621a3123545a21d83" args="(rs_path *dst, rs_path src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4d6368cf71d6fd2e55efbe23af6cfd7c"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a4d6368cf71d6fd2e55efbe23af6cfd7c" args="(rs_mesh *dst, rs_mesh src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a8135bceeb7b3ec8bf9a49d04e39bd565"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a8135bceeb7b3ec8bf9a49d04e39bd565" args="(rs_program_fragment *dst, rs_program_fragment src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5512c023d40e416bea709f8d8caf9674"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a5512c023d40e416bea709f8d8caf9674" args="(rs_program_vertex *dst, rs_program_vertex src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a42c0d25d78051a1de58a7a1c4dcfdada"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a42c0d25d78051a1de58a7a1c4dcfdada" args="(rs_program_raster *dst, rs_program_raster src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4babadff570c9f57edbb3fb98c80a113"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a4babadff570c9f57edbb3fb98c80a113" args="(rs_program_store *dst, rs_program_store src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad1af9aed63d9f925a8e6288c0607d55b"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="ad1af9aed63d9f925a8e6288c0607d55b" args="(rs_font *dst, rs_font src)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">void rsSetObject </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> *&#160;</td>
-          <td class="paramname"><em>dst</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a>&#160;</td>
-          <td class="paramname"><em>src</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__object_8rsh_source.html b/docs/html/reference/renderscript/rs__object_8rsh_source.html
deleted file mode 100644
index 9cd43b4..0000000
--- a/docs/html/reference/renderscript/rs__object_8rsh_source.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__object_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_OBJECT_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_OBJECT_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 
-<a name="l00033"></a>00033 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00034"></a>00034     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> *dst, <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> src);
-<a name="l00038"></a>00038 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00039"></a>00039     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a> *dst, <a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a> src);
-<a name="l00043"></a>00043 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00044"></a>00044     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> *dst, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> src);
-<a name="l00048"></a>00048 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00049"></a>00049     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> *dst, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> src);
-<a name="l00053"></a>00053 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00054"></a>00054     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> *dst, <a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> src);
-<a name="l00058"></a>00058 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00059"></a>00059     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a> *dst, <a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a> src);
-<a name="l00063"></a>00063 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00064"></a>00064     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> *dst, <a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> src);
-<a name="l00068"></a>00068 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00069"></a>00069     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a> *dst, <a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a> src);
-<a name="l00073"></a>00073 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00074"></a>00074     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a> *dst, <a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a> src);
-<a name="l00078"></a>00078 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00079"></a>00079     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> *dst, <a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> src);
-<a name="l00083"></a>00083 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00084"></a>00084     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> *dst, <a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> src);
-<a name="l00088"></a>00088 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00089"></a>00089     <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a> *dst, <a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a> src);
-<a name="l00090"></a>00090 
-<a name="l00096"></a>00096 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00097"></a>00097     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> *dst);
-<a name="l00101"></a>00101 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00102"></a>00102     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a> *dst);
-<a name="l00106"></a>00106 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00107"></a>00107     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> *dst);
-<a name="l00111"></a>00111 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00112"></a>00112     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> *dst);
-<a name="l00116"></a>00116 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00117"></a>00117     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> *dst);
-<a name="l00121"></a>00121 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00122"></a>00122     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a> *dst);
-<a name="l00126"></a>00126 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00127"></a>00127     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> *dst);
-<a name="l00131"></a>00131 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00132"></a>00132     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a> *dst);
-<a name="l00136"></a>00136 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00137"></a>00137     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a> *dst);
-<a name="l00141"></a>00141 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00142"></a>00142     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> *dst);
-<a name="l00146"></a>00146 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00147"></a>00147     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> *dst);
-<a name="l00151"></a>00151 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00152"></a>00152     <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a> *dst);
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00162"></a>00162 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00163"></a>00163     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a>);
-<a name="l00167"></a>00167 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00168"></a>00168     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a>);
-<a name="l00172"></a>00172 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00173"></a>00173     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a>);
-<a name="l00177"></a>00177 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00178"></a>00178     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a>);
-<a name="l00182"></a>00182 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00183"></a>00183     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a>);
-<a name="l00187"></a>00187 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00188"></a>00188     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a>);
-<a name="l00192"></a>00192 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00193"></a>00193     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a>);
-<a name="l00197"></a>00197 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00198"></a>00198     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a>);
-<a name="l00202"></a>00202 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00203"></a>00203     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a>);
-<a name="l00207"></a>00207 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00208"></a>00208     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a>);
-<a name="l00212"></a>00212 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00213"></a>00213     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a>);
-<a name="l00217"></a>00217 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00218"></a>00218     <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a>);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__program_8rsh.html b/docs/html/reference/renderscript/rs__program_8rsh.html
deleted file mode 100644
index 99883830..0000000
--- a/docs/html/reference/renderscript/rs__program_8rsh.html
+++ /dev/null
@@ -1,320 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rsgProgramStoreGetDepthFunc</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rsgProgramStoreIsDepthMaskEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rsgProgramStoreIsColorMaskRedEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rsgProgramStoreIsColorMaskGreenEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rsgProgramStoreIsColorMaskBlueEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rsgProgramStoreIsColorMaskAlphaEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_blend_src_func&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rsgProgramStoreGetBlendSrcFunc</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_blend_dst_func&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rsgProgramStoreGetBlendDstFunc</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rsgProgramStoreIsDitherEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rsgProgramRasterIsPointSpriteEnabled</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> pr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_cull_mode&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rsgProgramRasterGetCullMode</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> pr)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Program object routines. </p>
-
-<p>Definition in file <a class="el" href="rs__program_8rsh_source.html">rs_program.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a633d6dbdec98ef89c2b70c92ea707502"></a><!-- doxytag: member="rs_program.rsh::rsgProgramRasterGetCullMode" ref="a633d6dbdec98ef89c2b70c92ea707502" args="(rs_program_raster pr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">rs_cull_mode rsgProgramRasterGetCullMode </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a>&#160;</td>
-          <td class="paramname"><em>pr</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program raster cull mode</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">pr</td><td>program raster to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a86aeccd846ed2cd2c9498ab57e2535f3"></a><!-- doxytag: member="rs_program.rsh::rsgProgramRasterIsPointSpriteEnabled" ref="a86aeccd846ed2cd2c9498ab57e2535f3" args="(rs_program_raster pr)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsgProgramRasterIsPointSpriteEnabled </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a>&#160;</td>
-          <td class="paramname"><em>pr</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program raster point sprite state</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">pr</td><td>program raster to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a0ad38d595e35712f24c384ef20b69025"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreGetBlendDstFunc" ref="a0ad38d595e35712f24c384ef20b69025" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">rs_blend_dst_func rsgProgramStoreGetBlendDstFunc </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store blend destination function</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afb38256c5804cdb9b410419c43ce03ab"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreGetBlendSrcFunc" ref="afb38256c5804cdb9b410419c43ce03ab" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">rs_blend_src_func rsgProgramStoreGetBlendSrcFunc </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store blend source function</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a6a9c06c54d230f61edc0667a091aac77"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreGetDepthFunc" ref="a6a9c06c54d230f61edc0667a091aac77" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a> rsgProgramStoreGetDepthFunc </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store depth function</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ab038edb7399044a3ea96ebb17d7b6601"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskAlphaEnabled" ref="ab038edb7399044a3ea96ebb17d7b6601" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsgProgramStoreIsColorMaskAlphaEnabled </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store alpha component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a279ad1b4611aca268053337f6719a22c"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskBlueEnabled" ref="a279ad1b4611aca268053337f6719a22c" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsgProgramStoreIsColorMaskBlueEnabled </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store blur component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1a57f706bc42ce49b545021c8403964c"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskGreenEnabled" ref="a1a57f706bc42ce49b545021c8403964c" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsgProgramStoreIsColorMaskGreenEnabled </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store green component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a4a50df1d2495567536dd6f394d38ee5d"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskRedEnabled" ref="a4a50df1d2495567536dd6f394d38ee5d" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsgProgramStoreIsColorMaskRedEnabled </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store red component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afa27fa6103c9e29f5e098e2d99663f0b"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsDepthMaskEnabled" ref="afa27fa6103c9e29f5e098e2d99663f0b" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsgProgramStoreIsDepthMaskEnabled </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store depth mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="abe7c55547a72dd291e0996de050bb749"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsDitherEnabled" ref="abe7c55547a72dd291e0996de050bb749" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">bool rsgProgramStoreIsDitherEnabled </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a>&#160;</td>
-          <td class="paramname"><em>ps</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get program store dither state</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">ps</td><td>program store to query </td></tr>
-  </table>
-  </dd>
-</dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__program_8rsh_source.html b/docs/html/reference/renderscript/rs__program_8rsh_source.html
deleted file mode 100644
index ed326b1..0000000
--- a/docs/html/reference/renderscript/rs__program_8rsh_source.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__program_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_PROGRAM_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_PROGRAM_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a> __attribute__((overloadable))
-<a name="l00034"></a>00034     <a class="code" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rsgProgramStoreGetDepthFunc</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00035"></a>00035 
-<a name="l00041"></a>00041 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00042"></a>00042     <a class="code" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rsgProgramStoreIsDepthMaskEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00048"></a>00048 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00049"></a>00049     <a class="code" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rsgProgramStoreIsColorMaskRedEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00050"></a>00050 
-<a name="l00056"></a>00056 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00057"></a>00057     <a class="code" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rsgProgramStoreIsColorMaskGreenEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00058"></a>00058 
-<a name="l00064"></a>00064 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00065"></a>00065     <a class="code" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rsgProgramStoreIsColorMaskBlueEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00066"></a>00066 
-<a name="l00072"></a>00072 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00073"></a>00073     <a class="code" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rsgProgramStoreIsColorMaskAlphaEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00074"></a>00074 
-<a name="l00080"></a>00080 extern rs_blend_src_func __attribute__((overloadable))
-<a name="l00081"></a>00081         <a class="code" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rsgProgramStoreGetBlendSrcFunc</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00082"></a>00082 
-<a name="l00088"></a>00088 extern rs_blend_dst_func __attribute__((overloadable))
-<a name="l00089"></a>00089     <a class="code" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rsgProgramStoreGetBlendDstFunc</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00090"></a>00090 
-<a name="l00096"></a>00096 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00097"></a>00097     <a class="code" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rsgProgramStoreIsDitherEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00098"></a>00098 
-<a name="l00104"></a>00104 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00105"></a>00105     <a class="code" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rsgProgramRasterIsPointSpriteEnabled</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> pr);
-<a name="l00106"></a>00106 
-<a name="l00112"></a>00112 extern rs_cull_mode __attribute__((overloadable))
-<a name="l00113"></a>00113     <a class="code" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rsgProgramRasterGetCullMode</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> pr);
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 <span class="preprocessor">#endif // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>
-<a name="l00117"></a>00117 <span class="preprocessor">#endif // __RS_PROGRAM_RSH__</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__quaternion_8rsh.html b/docs/html/reference/renderscript/rs__quaternion_8rsh.html
deleted file mode 100644
index ce94e04..0000000
--- a/docs/html/reference/renderscript/rs__quaternion_8rsh.html
+++ /dev/null
@@ -1,556 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float w, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">rsQuaternionSet</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rsQuaternionAdd</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rsQuaternionLoadRotate</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rsQuaternionConjugate</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a> (const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">rsQuaternionMultiply</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rsQuaternionSlerp</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1, float t)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rsQuaternionGetMatrixUnit</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Quaternion routines. </p>
-
-<p>Definition in file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a5e6e493b9917336b0d9118fdd4e91444"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionAdd" ref="a5e6e493b9917336b0d9118fdd4e91444" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionAdd </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Add two quaternions </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>destination quaternion to add to </td></tr>
-    <tr><td class="paramname">rsh</td><td>right hand side quaternion to add </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00074">74</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acd670264e49743d35f38028b8e2a8800"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionConjugate" ref="acd670264e49743d35f38028b8e2a8800" args="(rs_quaternion *q)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionConjugate </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Conjugates the quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>quaternion to conjugate </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00127">127</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa810f8857439564e7b3be771f47b40ca"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionDot" ref="aa810f8857439564e7b3be771f47b40ca" args="(const rs_quaternion *q0, const rs_quaternion *q1)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static float rsQuaternionDot </td>
-          <td>(</td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q1</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Dot product of two quaternions </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q0</td><td>first quaternion </td></tr>
-    <tr><td class="paramname">q1</td><td>second quaternion </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>dot product between q0 and q1 </dd></dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00140">140</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7726c524868c49892976fec53ea0693b"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionGetMatrixUnit" ref="a7726c524868c49892976fec53ea0693b" args="(rs_matrix4x4 *m, const rs_quaternion *q)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionGetMatrixUnit </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *&#160;</td>
-          <td class="paramname"><em>m</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Computes rotation matrix from the normalized quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">m</td><td>resulting matrix </td></tr>
-    <tr><td class="paramname">p</td><td>normalized quaternion </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00228">228</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adf4423c521e34f3cf29d5dd5b5a93de0"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionLoadRotate" ref="adf4423c521e34f3cf29d5dd5b5a93de0" args="(rs_quaternion *q, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionLoadRotate </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>rot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Loads a quaternion that represents a rotation about an arbitrary vector (doesn't have to be unit) </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>quaternion to set </td></tr>
-    <tr><td class="paramname">rot</td><td>angle to rotate by </td></tr>
-    <tr><td class="paramname">x</td><td>component of a vector </td></tr>
-    <tr><td class="paramname">y</td><td>component of a vector </td></tr>
-    <tr><td class="paramname">x</td><td>component of a vector </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00111">111</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa72a43cf3d7b5924de1ddfaa5766db09"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionLoadRotateUnit" ref="aa72a43cf3d7b5924de1ddfaa5766db09" args="(rs_quaternion *q, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionLoadRotateUnit </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>rot</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Loads a quaternion that represents a rotation about an arbitrary unit vector </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>quaternion to set </td></tr>
-    <tr><td class="paramname">rot</td><td>angle to rotate by </td></tr>
-    <tr><td class="paramname">x</td><td>component of a vector </td></tr>
-    <tr><td class="paramname">y</td><td>component of a vector </td></tr>
-    <tr><td class="paramname">x</td><td>component of a vector </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00090">90</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4f3d214912facf72f6a6d57e95aa3c3b"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionMultiply" ref="a4f3d214912facf72f6a6d57e95aa3c3b" args="(rs_quaternion *q, float s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>s</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply quaternion by a scalar </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>quaternion to multiply </td></tr>
-    <tr><td class="paramname">s</td><td>scalar </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00061">61</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8bbbb286a2e2cb71b416c053f44844c3"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionMultiply" ref="a8bbbb286a2e2cb71b416c053f44844c3" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionMultiply </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Multiply quaternion by another quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>destination quaternion </td></tr>
-    <tr><td class="paramname">rhs</td><td>right hand side quaternion to multiply by </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00163">163</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abb31aad2416044ad5bbf44ee7c838e2a"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionNormalize" ref="abb31aad2416044ad5bbf44ee7c838e2a" args="(rs_quaternion *q)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionNormalize </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em></td><td>)</td>
-          <td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Normalizes the quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>quaternion to normalize </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00149">149</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5ff868dbc33e710a666a102fdcc6670a"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSet" ref="a5ff868dbc33e710a666a102fdcc6670a" args="(rs_quaternion *q, float w, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionSet </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>w</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>z</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the quaternion components </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">w</td><td>component </td></tr>
-    <tr><td class="paramname">x</td><td>component </td></tr>
-    <tr><td class="paramname">y</td><td>component </td></tr>
-    <tr><td class="paramname">z</td><td>component </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00035">35</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a249782133e54f13a8096d1fbe295714d"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSet" ref="a249782133e54f13a8096d1fbe295714d" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionSet </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>rhs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Set the quaternion from another quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>destination quaternion </td></tr>
-    <tr><td class="paramname">rhs</td><td>source quaternion </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00048">48</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7da94a30e287cbb8148771a5cd768dbd"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSlerp" ref="a7da94a30e287cbb8148771a5cd768dbd" args="(rs_quaternion *q, const rs_quaternion *q0, const rs_quaternion *q1, float t)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">static void rsQuaternionSlerp </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q0</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *&#160;</td>
-          <td class="paramname"><em>q1</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">float&#160;</td>
-          <td class="paramname"><em>t</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td><code> [static]</code></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Performs spherical linear interpolation between two quaternions </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">q</td><td>result quaternion from interpolation </td></tr>
-    <tr><td class="paramname">q0</td><td>first param </td></tr>
-    <tr><td class="paramname">q1</td><td>second param </td></tr>
-    <tr><td class="paramname">t</td><td>how much to interpolate by </td></tr>
-  </table>
-  </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00182">182</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html b/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html
deleted file mode 100644
index d286018..0000000
--- a/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__quaternion_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_QUATERNION_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_QUATERNION_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 
-<a name="l00034"></a>00034 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00035"></a><a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">00035</a> <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> w, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
-<a name="l00036"></a>00036     q-&gt;w = w;
-<a name="l00037"></a>00037     q-&gt;x = x;
-<a name="l00038"></a>00038     q-&gt;y = y;
-<a name="l00039"></a>00039     q-&gt;z = z;
-<a name="l00040"></a>00040 }
-<a name="l00041"></a>00041 
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00048"></a><a class="code" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">00048</a> <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
-<a name="l00049"></a>00049     q-&gt;w = rhs-&gt;w;
-<a name="l00050"></a>00050     q-&gt;x = rhs-&gt;x;
-<a name="l00051"></a>00051     q-&gt;y = rhs-&gt;y;
-<a name="l00052"></a>00052     q-&gt;z = rhs-&gt;z;
-<a name="l00053"></a>00053 }
-<a name="l00054"></a>00054 
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00061"></a><a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">00061</a> <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> s) {
-<a name="l00062"></a>00062     q-&gt;w *= s;
-<a name="l00063"></a>00063     q-&gt;x *= s;
-<a name="l00064"></a>00064     q-&gt;y *= s;
-<a name="l00065"></a>00065     q-&gt;z *= s;
-<a name="l00066"></a>00066 }
-<a name="l00067"></a>00067 
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00074"></a><a class="code" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">00074</a> <a class="code" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rsQuaternionAdd</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
-<a name="l00075"></a>00075     q-&gt;w *= rhs-&gt;w;
-<a name="l00076"></a>00076     q-&gt;x *= rhs-&gt;x;
-<a name="l00077"></a>00077     q-&gt;y *= rhs-&gt;y;
-<a name="l00078"></a>00078     q-&gt;z *= rhs-&gt;z;
-<a name="l00079"></a>00079 }
-<a name="l00080"></a>00080 
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00090"></a><a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">00090</a> <a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
-<a name="l00091"></a>00091     rot *= (float)(M_PI / 180.0f) * 0.5f;
-<a name="l00092"></a>00092     <span class="keywordtype">float</span> c = <a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>(rot);
-<a name="l00093"></a>00093     <span class="keywordtype">float</span> s = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(rot);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     q-&gt;w = c;
-<a name="l00096"></a>00096     q-&gt;x = x * s;
-<a name="l00097"></a>00097     q-&gt;y = y * s;
-<a name="l00098"></a>00098     q-&gt;z = z * s;
-<a name="l00099"></a>00099 }
-<a name="l00100"></a>00100 
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00111"></a><a class="code" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">00111</a> <a class="code" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rsQuaternionLoadRotate</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
-<a name="l00112"></a>00112     <span class="keyword">const</span> <span class="keywordtype">float</span> len = x*x + y*y + z*z;
-<a name="l00113"></a>00113     <span class="keywordflow">if</span> (len != 1) {
-<a name="l00114"></a>00114         <span class="keyword">const</span> <span class="keywordtype">float</span> recipLen = 1.f / <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(len);
-<a name="l00115"></a>00115         x *= recipLen;
-<a name="l00116"></a>00116         y *= recipLen;
-<a name="l00117"></a>00117         z *= recipLen;
-<a name="l00118"></a>00118     }
-<a name="l00119"></a>00119     <a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a>(q, rot, x, y, z);
-<a name="l00120"></a>00120 }
-<a name="l00121"></a>00121 
-<a name="l00126"></a>00126 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00127"></a><a class="code" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">00127</a> <a class="code" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rsQuaternionConjugate</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
-<a name="l00128"></a>00128     q-&gt;x = -q-&gt;x;
-<a name="l00129"></a>00129     q-&gt;y = -q-&gt;y;
-<a name="l00130"></a>00130     q-&gt;z = -q-&gt;z;
-<a name="l00131"></a>00131 }
-<a name="l00132"></a>00132 
-<a name="l00139"></a>00139 <span class="keyword">static</span> <span class="keywordtype">float</span>
-<a name="l00140"></a><a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">00140</a> <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(<span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1) {
-<a name="l00141"></a>00141     <span class="keywordflow">return</span> q0-&gt;w*q1-&gt;w + q0-&gt;x*q1-&gt;x + q0-&gt;y*q1-&gt;y + q0-&gt;z*q1-&gt;z;
-<a name="l00142"></a>00142 }
-<a name="l00143"></a>00143 
-<a name="l00148"></a>00148 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00149"></a><a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">00149</a> <a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
-<a name="l00150"></a>00150     <span class="keyword">const</span> <span class="keywordtype">float</span> len = <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(q, q);
-<a name="l00151"></a>00151     <span class="keywordflow">if</span> (len != 1) {
-<a name="l00152"></a>00152         <span class="keyword">const</span> <span class="keywordtype">float</span> recipLen = 1.f / <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(len);
-<a name="l00153"></a>00153         <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(q, recipLen);
-<a name="l00154"></a>00154     }
-<a name="l00155"></a>00155 }
-<a name="l00156"></a>00156 
-<a name="l00162"></a>00162 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00163"></a><a class="code" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">00163</a> <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
-<a name="l00164"></a>00164     <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> qtmp;
-<a name="l00165"></a>00165     <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&amp;qtmp, q);
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     q-&gt;w = qtmp.w*rhs-&gt;w - qtmp.x*rhs-&gt;x - qtmp.y*rhs-&gt;y - qtmp.z*rhs-&gt;z;
-<a name="l00168"></a>00168     q-&gt;x = qtmp.w*rhs-&gt;x + qtmp.x*rhs-&gt;w + qtmp.y*rhs-&gt;z - qtmp.z*rhs-&gt;y;
-<a name="l00169"></a>00169     q-&gt;y = qtmp.w*rhs-&gt;y + qtmp.y*rhs-&gt;w + qtmp.z*rhs-&gt;x - qtmp.x*rhs-&gt;z;
-<a name="l00170"></a>00170     q-&gt;z = qtmp.w*rhs-&gt;z + qtmp.z*rhs-&gt;w + qtmp.x*rhs-&gt;y - qtmp.y*rhs-&gt;x;
-<a name="l00171"></a>00171     <a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a>(q);
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173 
-<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00182"></a><a class="code" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">00182</a> <a class="code" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rsQuaternionSlerp</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1, <span class="keywordtype">float</span> t) {
-<a name="l00183"></a>00183     <span class="keywordflow">if</span> (t &lt;= 0.0f) {
-<a name="l00184"></a>00184         <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, q0);
-<a name="l00185"></a>00185         <span class="keywordflow">return</span>;
-<a name="l00186"></a>00186     }
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> (t &gt;= 1.0f) {
-<a name="l00188"></a>00188         <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, q1);
-<a name="l00189"></a>00189         <span class="keywordflow">return</span>;
-<a name="l00190"></a>00190     }
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> tempq0, tempq1;
-<a name="l00193"></a>00193     <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&amp;tempq0, q0);
-<a name="l00194"></a>00194     <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&amp;tempq1, q1);
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196     <span class="keywordtype">float</span> angle = <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(q0, q1);
-<a name="l00197"></a>00197     <span class="keywordflow">if</span> (angle &lt; 0) {
-<a name="l00198"></a>00198         <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(&amp;tempq0, -1.0f);
-<a name="l00199"></a>00199         angle *= -1.0f;
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     <span class="keywordtype">float</span> scale, invScale;
-<a name="l00203"></a>00203     <span class="keywordflow">if</span> (angle + 1.0f &gt; 0.05f) {
-<a name="l00204"></a>00204         <span class="keywordflow">if</span> (1.0f - angle &gt;= 0.05f) {
-<a name="l00205"></a>00205             <span class="keywordtype">float</span> theta = <a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>(angle);
-<a name="l00206"></a>00206             <span class="keywordtype">float</span> invSinTheta = 1.0f / <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta);
-<a name="l00207"></a>00207             scale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta * (1.0f - t)) * invSinTheta;
-<a name="l00208"></a>00208             invScale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta * t) * invSinTheta;
-<a name="l00209"></a>00209         } <span class="keywordflow">else</span> {
-<a name="l00210"></a>00210             scale = 1.0f - t;
-<a name="l00211"></a>00211             invScale = t;
-<a name="l00212"></a>00212         }
-<a name="l00213"></a>00213     } <span class="keywordflow">else</span> {
-<a name="l00214"></a>00214         <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&amp;tempq1, tempq0.z, -tempq0.y, tempq0.x, -tempq0.w);
-<a name="l00215"></a>00215         scale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(M_PI * (0.5f - t));
-<a name="l00216"></a>00216         invScale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(M_PI * t);
-<a name="l00217"></a>00217     }
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, tempq0.w*scale + tempq1.w*invScale, tempq0.x*scale + tempq1.x*invScale,
-<a name="l00220"></a>00220                         tempq0.y*scale + tempq1.y*invScale, tempq0.z*scale + tempq1.z*invScale);
-<a name="l00221"></a>00221 }
-<a name="l00222"></a>00222 
-<a name="l00228"></a><a class="code" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">00228</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rsQuaternionGetMatrixUnit</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
-<a name="l00229"></a>00229     <span class="keywordtype">float</span> xx = q-&gt;x * q-&gt;x;
-<a name="l00230"></a>00230     <span class="keywordtype">float</span> xy = q-&gt;x * q-&gt;y;
-<a name="l00231"></a>00231     <span class="keywordtype">float</span> xz = q-&gt;x * q-&gt;z;
-<a name="l00232"></a>00232     <span class="keywordtype">float</span> xw = q-&gt;x * q-&gt;w;
-<a name="l00233"></a>00233     <span class="keywordtype">float</span> yy = q-&gt;y * q-&gt;y;
-<a name="l00234"></a>00234     <span class="keywordtype">float</span> yz = q-&gt;y * q-&gt;z;
-<a name="l00235"></a>00235     <span class="keywordtype">float</span> yw = q-&gt;y * q-&gt;w;
-<a name="l00236"></a>00236     <span class="keywordtype">float</span> zz = q-&gt;z * q-&gt;z;
-<a name="l00237"></a>00237     <span class="keywordtype">float</span> zw = q-&gt;z * q-&gt;w;
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     m-&gt;m[0]  = 1.0f - 2.0f * ( yy + zz );
-<a name="l00240"></a>00240     m-&gt;m[4]  =        2.0f * ( xy - zw );
-<a name="l00241"></a>00241     m-&gt;m[8]  =        2.0f * ( xz + yw );
-<a name="l00242"></a>00242     m-&gt;m[1]  =        2.0f * ( xy + zw );
-<a name="l00243"></a>00243     m-&gt;m[5]  = 1.0f - 2.0f * ( xx + zz );
-<a name="l00244"></a>00244     m-&gt;m[9]  =        2.0f * ( yz - xw );
-<a name="l00245"></a>00245     m-&gt;m[2]  =        2.0f * ( xz - yw );
-<a name="l00246"></a>00246     m-&gt;m[6]  =        2.0f * ( yz + xw );
-<a name="l00247"></a>00247     m-&gt;m[10] = 1.0f - 2.0f * ( xx + yy );
-<a name="l00248"></a>00248     m-&gt;m[3]  = m-&gt;m[7] = m-&gt;m[11] = m-&gt;m[12] = m-&gt;m[13] = m-&gt;m[14] = 0.0f;
-<a name="l00249"></a>00249     m-&gt;m[15] = 1.0f;
-<a name="l00250"></a>00250 }
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="preprocessor">#endif</span>
-<a name="l00253"></a>00253 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__sampler_8rsh.html b/docs/html/reference/renderscript/rs__sampler_8rsh.html
deleted file mode 100644
index 6393ade..0000000
--- a/docs/html/reference/renderscript/rs__sampler_8rsh.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rsSamplerGetMinification</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rsSamplerGetMagnification</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rsSamplerGetWrapS</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rsSamplerGetWrapT</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rsSamplerGetAnisotropy</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Sampler routines. </p>
-
-<p>Definition in file <a class="el" href="rs__sampler_8rsh_source.html">rs_sampler.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ab1e79984609469604cba8e2b76a98844"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetAnisotropy" ref="ab1e79984609469604cba8e2b76a98844" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rsSamplerGetAnisotropy </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get sampler anisotropy</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">s</td><td>sampler to query </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>anisotropy </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a5bddb73826cd20a79c31f012a4637e83"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetMagnification" ref="a5bddb73826cd20a79c31f012a4637e83" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">rs_sampler_value rsSamplerGetMagnification </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get sampler magnification value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">s</td><td>sampler to query </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>magnification value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="acb1bec2c3d1edd752dd60499c8db58a4"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetMinification" ref="acb1bec2c3d1edd752dd60499c8db58a4" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">rs_sampler_value rsSamplerGetMinification </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get sampler minification value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">s</td><td>sampler to query </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>minification value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a68a7ab6724019c6e72fae8eb45aa48dd"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetWrapS" ref="a68a7ab6724019c6e72fae8eb45aa48dd" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">rs_sampler_value rsSamplerGetWrapS </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get sampler wrap S value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">s</td><td>sampler to query </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>wrap S value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ab6b25d3b9afa16f418e2dee78ebb4a75"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetWrapT" ref="ab6b25d3b9afa16f418e2dee78ebb4a75" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">rs_sampler_value rsSamplerGetWrapT </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a>&#160;</td>
-          <td class="paramname"><em>s</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Get sampler wrap T value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">s</td><td>sampler to query </td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>wrap T value </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__sampler_8rsh_source.html b/docs/html/reference/renderscript/rs__sampler_8rsh_source.html
deleted file mode 100644
index 82a7cfa..0000000
--- a/docs/html/reference/renderscript/rs__sampler_8rsh_source.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__sampler_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_SAMPLER_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_SAMPLER_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// New API&#39;s</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="keyword">extern</span> rs_sampler_value __attribute__((overloadable))
-<a name="l00036"></a>00036     <a class="code" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rsSamplerGetMinification</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00037"></a>00037 
-<a name="l00044"></a>00044 extern rs_sampler_value __attribute__((overloadable))
-<a name="l00045"></a>00045     <a class="code" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rsSamplerGetMagnification</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00046"></a>00046 
-<a name="l00053"></a>00053 extern rs_sampler_value __attribute__((overloadable))
-<a name="l00054"></a>00054     <a class="code" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rsSamplerGetWrapS</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00055"></a>00055 
-<a name="l00062"></a>00062 extern rs_sampler_value __attribute__((overloadable))
-<a name="l00063"></a>00063     <a class="code" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rsSamplerGetWrapT</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00064"></a>00064 
-<a name="l00071"></a>00071 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00072"></a>00072     <a class="code" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rsSamplerGetAnisotropy</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="preprocessor">#endif // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span>
-<a name="l00076"></a>00076 <span class="preprocessor">#endif // __RS_SAMPLER_RSH__</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__time_8rsh.html b/docs/html/reference/renderscript/rs__time_8rsh.html
deleted file mode 100644
index 8be550a..0000000
--- a/docs/html/reference/renderscript/rs__time_8rsh.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#typedef-members">Typedefs</a> &#124;
-<a href="#func-members">Functions</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html">rs_tm</a></td></tr>
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a></td></tr>
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rsTime</a> (<a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__tm.html">rs_tm</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rsLocaltime</a> (<a class="el" href="structrs__tm.html">rs_tm</a> *local, const <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rsUptimeMillis</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rsUptimeNanos</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rsGetDt</a> (void)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>RenderScript time routines. </p>
-<p>This file contains RenderScript functions relating to time and date manipulation. </p>
-
-<p>Definition in file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
-</div><hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="ad2b4759a0a6a98bd79b7ad82a4b057d6"></a><!-- doxytag: member="rs_time.rsh::rs_time_t" ref="ad2b4759a0a6a98bd79b7ad82a4b057d6" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef int <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Calendar time interpreted as seconds elapsed since the Epoch (00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)). </p>
-
-<p>Definition at line <a class="el" href="rs__time_8rsh_source.html#l00031">31</a> of file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Function Documentation</h2>
-<a class="anchor" id="adea2682186fd903752431ad848bd8bf4"></a><!-- doxytag: member="rs_time.rsh::rsGetDt" ref="adea2682186fd903752431ad848bd8bf4" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">float rsGetDt </td>
-          <td>(</td>
-          <td class="paramtype">void&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the time in seconds since this function was last called in this script.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Time in seconds. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a08a8fcadae964f7416aef487da624110"></a><!-- doxytag: member="rs_time.rsh::rsLocaltime" ref="a08a8fcadae964f7416aef487da624110" args="(rs_tm *local, const rs_time_t *timer)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="structrs__tm.html">rs_tm</a>* rsLocaltime </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="structrs__tm.html">rs_tm</a> *&#160;</td>
-          <td class="paramname"><em>local</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *&#160;</td>
-          <td class="paramname"><em>timer</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Converts the time specified by <code>timer</code> into broken-down time and stores it in <code>local</code>. This function also returns a pointer to <code>local</code>. If <code>local</code> is NULL, this function does nothing and returns NULL.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">local</td><td>Broken-down time. </td></tr>
-    <tr><td class="paramname">timer</td><td>Input time as calendar time.</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to broken-down time (same as input <code>local</code>). </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a555f9324acb8c3d0c6f09a1d05478ce2"></a><!-- doxytag: member="rs_time.rsh::rsTime" ref="a555f9324acb8c3d0c6f09a1d05478ce2" args="(rs_time_t *timer)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> rsTime </td>
-          <td>(</td>
-          <td class="paramtype"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *&#160;</td>
-          <td class="paramname"><em>timer</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the number of seconds since the Epoch (00:00:00 UTC, January 1, 1970). If <code>timer</code> is non-NULL, the result is also stored in the memory pointed to by this variable. If an error occurs, a value of -1 is returned.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table class="params">
-    <tr><td class="paramname">timer</td><td>Location to also store the returned calendar time.</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Seconds since the Epoch. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a3c406e51a769718dd1c760518b9cad44"></a><!-- doxytag: member="rs_time.rsh::rsUptimeMillis" ref="a3c406e51a769718dd1c760518b9cad44" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> rsUptimeMillis </td>
-          <td>(</td>
-          <td class="paramtype">void&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the current system clock (uptime) in milliseconds.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Uptime in milliseconds. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a24e2cc12acf1e7fdd857d1a48981395d"></a><!-- doxytag: member="rs_time.rsh::rsUptimeNanos" ref="a24e2cc12acf1e7fdd857d1a48981395d" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> rsUptimeNanos </td>
-          <td>(</td>
-          <td class="paramtype">void&#160;</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Returns the current system clock (uptime) in nanoseconds.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Uptime in nanoseconds. </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__time_8rsh_source.html b/docs/html/reference/renderscript/rs__time_8rsh_source.html
deleted file mode 100644
index 482fd77..0000000
--- a/docs/html/reference/renderscript/rs__time_8rsh_source.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__time_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __RS_TIME_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __RS_TIME_RSH__</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00031"></a><a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">00031</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a>;
-<a name="l00032"></a>00032 
-<a name="l00049"></a><a class="code" href="structrs__tm.html">00049</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00050"></a><a class="code" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e">00050</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e" title="seconds">tm_sec</a>;     
-<a name="l00051"></a><a class="code" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b">00051</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b" title="minutes">tm_min</a>;     
-<a name="l00052"></a><a class="code" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a">00052</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a" title="hours">tm_hour</a>;    
-<a name="l00053"></a><a class="code" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15">00053</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15" title="day of the month">tm_mday</a>;    
-<a name="l00054"></a><a class="code" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832">00054</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832" title="month">tm_mon</a>;     
-<a name="l00055"></a><a class="code" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2">00055</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2" title="year">tm_year</a>;    
-<a name="l00056"></a><a class="code" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4">00056</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4" title="day of the week">tm_wday</a>;    
-<a name="l00057"></a><a class="code" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0">00057</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0" title="day of the year">tm_yday</a>;    
-<a name="l00058"></a><a class="code" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111">00058</a>     <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111" title="daylight savings time">tm_isdst</a>;   
-<a name="l00059"></a>00059 } <a class="code" href="structrs__tm.html">rs_tm</a>;
-<a name="l00060"></a>00060 
-<a name="l00070"></a>00070 <span class="keyword">extern</span> <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> __attribute__((overloadable))
-<a name="l00071"></a>00071     <a class="code" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rsTime</a>(<a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer);
-<a name="l00072"></a>00072 
-<a name="l00083"></a>00083 extern <a class="code" href="structrs__tm.html">rs_tm</a> * __attribute__((overloadable))
-<a name="l00084"></a>00084     <a class="code" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rsLocaltime</a>(<a class="code" href="structrs__tm.html">rs_tm</a> *local, const <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer);
-<a name="l00085"></a>00085 
-<a name="l00091"></a>00091 extern <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> __attribute__((overloadable))
-<a name="l00092"></a>00092     <a class="code" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rsUptimeMillis</a>(<span class="keywordtype">void</span>);
-<a name="l00093"></a>00093 
-<a name="l00099"></a>00099 extern <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> __attribute__((overloadable))
-<a name="l00100"></a>00100     <a class="code" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rsUptimeNanos</a>(<span class="keywordtype">void</span>);
-<a name="l00101"></a>00101 
-<a name="l00108"></a>00108 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00109"></a>00109     <a class="code" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rsGetDt</a>(<span class="keywordtype">void</span>);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__types_8rsh.html b/docs/html/reference/renderscript/rs__types_8rsh.html
deleted file mode 100644
index cbaa750..0000000
--- a/docs/html/reference/renderscript/rs__types_8rsh.html
+++ /dev/null
@@ -1,1023 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#typedef-members">Typedefs</a> &#124;
-<a href="#enum-members">Enumerations</a>  </div>
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh File Reference</div>  </div>
-</div>
-<div class="contents">
-<div class="textblock"><code>#include &quot;stdbool.h&quot;</code><br/>
-</div><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__element.html">rs_element</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript element.  <a href="structrs__element.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__type.html">rs_type</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript type.  <a href="structrs__type.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__allocation.html">rs_allocation</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript allocation.  <a href="structrs__allocation.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__sampler.html">rs_sampler</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript sampler object.  <a href="structrs__sampler.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__script.html">rs_script</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript script object.  <a href="structrs__script.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__mesh.html">rs_mesh</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript mesh object.  <a href="structrs__mesh.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__path.html">rs_path</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript Path object.  <a href="structrs__path.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript ProgramFragment object.  <a href="structrs__program__fragment.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript ProgramVertex object.  <a href="structrs__program__vertex.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__raster.html">rs_program_raster</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript ProgramRaster object.  <a href="structrs__program__raster.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__store.html">rs_program_store</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript ProgramStore object.  <a href="structrs__program__store.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__font.html">rs_font</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Opaque handle to a RenderScript font object.  <a href="structrs__font.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">4x4 float matrix  <a href="structrs__matrix4x4.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">3x3 float matrix  <a href="structrs__matrix3x3.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">2x2 float matrix  <a href="structrs__matrix2x2.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned long long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a></td></tr>
-<tr><td colspan="2"><h2><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> </td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Enum for selecting cube map faces. <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_allocation_usage_type</a> </td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Bitfield to specify the usage types for an allocation.  <a href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a> { <br/>
-&#160;&#160;<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">RS_PRIMITIVE_POINT</a> =  0, 
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">RS_PRIMITIVE_LINE</a> =  1, 
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">RS_PRIMITIVE_LINE_STRIP</a> =  2, 
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">RS_PRIMITIVE_TRIANGLE</a> =  3, 
-<br/>
-&#160;&#160;<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">RS_PRIMITIVE_TRIANGLE_STRIP</a> =  4, 
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">RS_PRIMITIVE_TRIANGLE_FAN</a> =  5, 
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">RS_PRIMITIVE_INVALID</a> =  100
-<br/>
- }</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a> </td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Enumeration for possible element data types.  <a href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a> </td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Enumeration for possible element data kind.  <a href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a> { <br/>
-&#160;&#160;<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">RS_DEPTH_FUNC_ALWAYS</a> =  0, 
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">RS_DEPTH_FUNC_LESS</a> =  1, 
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">RS_DEPTH_FUNC_LEQUAL</a> =  2, 
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">RS_DEPTH_FUNC_GREATER</a> =  3, 
-<br/>
-&#160;&#160;<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">RS_DEPTH_FUNC_GEQUAL</a> =  4, 
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">RS_DEPTH_FUNC_EQUAL</a> =  5, 
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">RS_DEPTH_FUNC_NOTEQUAL</a> =  6, 
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">RS_DEPTH_FUNC_INVALID</a> =  100
-<br/>
- }</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Define the standard RenderScript types</p>
-<p>Integers 8 bit: char, int8_t 16 bit: short, int16_t 32 bit: int, in32_t 64 bit: long, long long, int64_t</p>
-<p>Unsigned Integers 8 bit: uchar, uint8_t 16 bit: ushort, uint16_t 32 bit: uint, uint32_t 64 bit: ulong, uint64_t</p>
-<p>Floating point 32 bit: float 64 bit: double</p>
-<p>Vectors of length 2, 3, and 4 are supported for all the types above. </p>
-
-<p>Definition in file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="ac532b4c1895c8bd4fb75dc370c484351"></a><!-- doxytag: member="rs_types.rsh::char2" ref="ac532b4c1895c8bd4fb75dc370c484351" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic char type. Provides two char fields packed into a single 16 bit field with 16 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00292">292</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4617fb31f4c03402515efee0a9b56210"></a><!-- doxytag: member="rs_types.rsh::char3" ref="a4617fb31f4c03402515efee0a9b56210" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic char type. Provides three char fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00297">297</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aecb498648daac97c7cc5f31c242dfa03"></a><!-- doxytag: member="rs_types.rsh::char4" ref="aecb498648daac97c7cc5f31c242dfa03" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic char type. Provides four char fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00302">302</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a75ef868cedebc2a6eeb1bc6ca6ca49c3"></a><!-- doxytag: member="rs_types.rsh::double2" ref="a75ef868cedebc2a6eeb1bc6ca6ca49c3" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic double type. Provides two double fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00212">212</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa3c90d5a23d674185a13e95402eda7eb"></a><!-- doxytag: member="rs_types.rsh::double3" ref="aa3c90d5a23d674185a13e95402eda7eb" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic double type. Provides three double fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00217">217</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a60f4b04e076f0dd0ecc99c365fc4ca21"></a><!-- doxytag: member="rs_types.rsh::double4" ref="a60f4b04e076f0dd0ecc99c365fc4ca21" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic double type. Provides four double fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00222">222</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5086d0fcb71f916c936af486ccf0dd41"></a><!-- doxytag: member="rs_types.rsh::float2" ref="a5086d0fcb71f916c936af486ccf0dd41" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic float type. Provides two float fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00195">195</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0046fa0f208d0899adbcf1f8b5aafadd"></a><!-- doxytag: member="rs_types.rsh::float3" ref="a0046fa0f208d0899adbcf1f8b5aafadd" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic float type. Provides three float fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00200">200</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adb5162dc168ddd471d948faa60b37c5e"></a><!-- doxytag: member="rs_types.rsh::float4" ref="adb5162dc168ddd471d948faa60b37c5e" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic float type. Provides four float fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00206">206</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa343fa3b3d06292b959ffdd4c4703b06"></a><!-- doxytag: member="rs_types.rsh::int16_t" ref="aa343fa3b3d06292b959ffdd4c4703b06" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>16 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00067">67</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6bc1fa1354fe2145b8f12b4bbfafcf4c"></a><!-- doxytag: member="rs_types.rsh::int2" ref="a6bc1fa1354fe2145b8f12b4bbfafcf4c" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic int type. Provides two int fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00324">324</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad5512266b63fd06dcf450f6c9d5326c8"></a><!-- doxytag: member="rs_types.rsh::int3" ref="ad5512266b63fd06dcf450f6c9d5326c8" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic int type. Provides three int fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00329">329</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a32f2e37ee053cf2ce8ca28d1f74630e5"></a><!-- doxytag: member="rs_types.rsh::int32_t" ref="a32f2e37ee053cf2ce8ca28d1f74630e5" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>32 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00071">71</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a897deab71f679999ed99d4153c797e70"></a><!-- doxytag: member="rs_types.rsh::int4" ref="a897deab71f679999ed99d4153c797e70" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic int type. Provides two four fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00334">334</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a996e72f71b11a5bb8b3b7b6936b1516d"></a><!-- doxytag: member="rs_types.rsh::int64_t" ref="a996e72f71b11a5bb8b3b7b6936b1516d" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef long long <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>64 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00075">75</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad566f6541e98b74246db1a3a3a85ad49"></a><!-- doxytag: member="rs_types.rsh::int8_t" ref="ad566f6541e98b74246db1a3a3a85ad49" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>8 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00063">63</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afd55d62cee0785034b73375acd0df9da"></a><!-- doxytag: member="rs_types.rsh::long2" ref="afd55d62cee0785034b73375acd0df9da" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic long type. Provides two long fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00340">340</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad9cedbf4050fad14138d1dcb3428ec18"></a><!-- doxytag: member="rs_types.rsh::long3" ref="ad9cedbf4050fad14138d1dcb3428ec18" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic long type. Provides three long fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00345">345</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae177e4918f36e5c9da36d524cdb7a2e7"></a><!-- doxytag: member="rs_types.rsh::long4" ref="ae177e4918f36e5c9da36d524cdb7a2e7" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic long type. Provides four long fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00350">350</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a86f99f382dc35fc8ad98b524fe6d5447"></a><!-- doxytag: member="rs_types.rsh::rs_quaternion" ref="a86f99f382dc35fc8ad98b524fe6d5447" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>quaternion type for use with the quaternion functions </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00383">383</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a303d3ad18aaeacfcfeda2b8580b98796"></a><!-- doxytag: member="rs_types.rsh::short2" ref="a303d3ad18aaeacfcfeda2b8580b98796" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic short type. Provides two short fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00308">308</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3f4967691ae2b249511b5f3dd9e18793"></a><!-- doxytag: member="rs_types.rsh::short3" ref="a3f4967691ae2b249511b5f3dd9e18793" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic short type. Provides three short fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00313">313</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a198219da0b1d51c8d7f8f12aad7e502d"></a><!-- doxytag: member="rs_types.rsh::short4" ref="a198219da0b1d51c8d7f8f12aad7e502d" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic short type. Provides four short fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00318">318</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a29d85914ddff32967d85ada69854206d"></a><!-- doxytag: member="rs_types.rsh::size_t" ref="a29d85914ddff32967d85ada69854206d" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Typedef for unsigned int </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00111">111</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a170745d0d946e79c4c2a056d1d158996"></a><!-- doxytag: member="rs_types.rsh::ssize_t" ref="a170745d0d946e79c4c2a056d1d158996" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Typedef for int (use for 32-bit integers) </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00115">115</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a27c902d5ca78afa82d5ed75554d5cedc"></a><!-- doxytag: member="rs_types.rsh::uchar" ref="a27c902d5ca78afa82d5ed75554d5cedc" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>8 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00095">95</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aff5eb7cd53a34bb01924bf64485296de"></a><!-- doxytag: member="rs_types.rsh::uchar2" ref="aff5eb7cd53a34bb01924bf64485296de" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uchar type. Provides two uchar fields packed into a single 16 bit field with 16 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00228">228</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a247b5eacf2b662849668cbc33120343f"></a><!-- doxytag: member="rs_types.rsh::uchar3" ref="a247b5eacf2b662849668cbc33120343f" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uchar type. Provides three uchar fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00233">233</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae6ed52a87d4ff920c303b13b00f7396d"></a><!-- doxytag: member="rs_types.rsh::uchar4" ref="ae6ed52a87d4ff920c303b13b00f7396d" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uchar type. Provides four uchar fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00238">238</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4f5fce8c1ef282264f9214809524d836"></a><!-- doxytag: member="rs_types.rsh::uint" ref="a4f5fce8c1ef282264f9214809524d836" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>32 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00103">103</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a273cf69d639a59973b6019625df33e30"></a><!-- doxytag: member="rs_types.rsh::uint16_t" ref="a273cf69d639a59973b6019625df33e30" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef unsigned short <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>16 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00083">83</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaf90cd1f01a121e824fc6e1b927e7683"></a><!-- doxytag: member="rs_types.rsh::uint2" ref="aaf90cd1f01a121e824fc6e1b927e7683" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uint type. Provides two uint fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00260">260</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae80e36ac834c891aa76b09a220344e78"></a><!-- doxytag: member="rs_types.rsh::uint3" ref="ae80e36ac834c891aa76b09a220344e78" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uint type. Provides three uint fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00265">265</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a435d1572bf3f880d55459d9805097f62"></a><!-- doxytag: member="rs_types.rsh::uint32_t" ref="a435d1572bf3f880d55459d9805097f62" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef unsigned int <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>32 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00087">87</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad92f0ec6c2cdc1f11a6d7fe321047462"></a><!-- doxytag: member="rs_types.rsh::uint4" ref="ad92f0ec6c2cdc1f11a6d7fe321047462" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uint type. Provides four uint fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00270">270</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaa5d1cd013383c889537491c3cfd9aad"></a><!-- doxytag: member="rs_types.rsh::uint64_t" ref="aaa5d1cd013383c889537491c3cfd9aad" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef unsigned long long <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>64 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00091">91</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aba7bc1797add20fe3efdf37ced1182c5"></a><!-- doxytag: member="rs_types.rsh::uint8_t" ref="aba7bc1797add20fe3efdf37ced1182c5" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef unsigned char <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>8 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00079">79</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab46637ef82283186e57f54756fe67203"></a><!-- doxytag: member="rs_types.rsh::ulong" ref="ab46637ef82283186e57f54756fe67203" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Typedef for unsigned long (use for 64-bit unsigned integers) </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00107">107</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a56988b12ab16acf753356f7a5c70565a"></a><!-- doxytag: member="rs_types.rsh::ulong2" ref="a56988b12ab16acf753356f7a5c70565a" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ulong type. Provides two ulong fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00276">276</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac623a569c28935fbedd3a8ed27ae0696"></a><!-- doxytag: member="rs_types.rsh::ulong3" ref="ac623a569c28935fbedd3a8ed27ae0696" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ulong type. Provides three ulong fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00281">281</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3029c54b8e1779a1ddbdfe875432d137"></a><!-- doxytag: member="rs_types.rsh::ulong4" ref="a3029c54b8e1779a1ddbdfe875432d137" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ulong type. Provides four ulong fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00286">286</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9e58a7bf060b7a5fbf6a401d3020adca"></a><!-- doxytag: member="rs_types.rsh::ushort" ref="a9e58a7bf060b7a5fbf6a401d3020adca" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>16 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00099">99</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a24a9d78cfc32475e2c6eb1cdec239bf2"></a><!-- doxytag: member="rs_types.rsh::ushort2" ref="a24a9d78cfc32475e2c6eb1cdec239bf2" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ushort type. Provides two ushort fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00244">244</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab78391445785d2ca0276392a9c97fcba"></a><!-- doxytag: member="rs_types.rsh::ushort3" ref="ab78391445785d2ca0276392a9c97fcba" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ushort type. Provides three ushort fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00249">249</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a77a09fa01d7fc721bbc44c32aac2d487"></a><!-- doxytag: member="rs_types.rsh::ushort4" ref="a77a09fa01d7fc721bbc44c32aac2d487" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ushort type. Provides four ushort fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00254">254</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Enumeration Type Documentation</h2>
-<a class="anchor" id="af8c988b9715d55b6e41e0ee1925fb171"></a><!-- doxytag: member="rs_types.rsh::rs_allocation_usage_type" ref="af8c988b9715d55b6e41e0ee1925fb171" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_allocation_usage_type</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Bitfield to specify the usage types for an allocation. </p>
-<p>These values are ORed together to specify which usages or memory spaces are relevant to an allocation or an operation on an allocation. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00408">408</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1692d177c4a3fe1544bd91172056581a"></a><!-- doxytag: member="rs_types.rsh::rs_data_kind" ref="a1692d177c4a3fe1544bd91172056581a" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Enumeration for possible element data kind. </p>
-<p>The special interpretation of the data if required. This is primarly useful for graphical data. USER indicates no special interpretation is expected. PIXEL is used in conjunction with the standard data types for representing texture formats. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00524">524</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae7551db5705f864fde49c13660aff647"></a><!-- doxytag: member="rs_types.rsh::rs_data_type" ref="ae7551db5705f864fde49c13660aff647" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-
-<p>Enumeration for possible element data types. </p>
-<p>DataType represents the basic type information for a basic element. The naming convention follows. For numeric types it is FLOAT, SIGNED, or UNSIGNED followed by the _BITS where BITS is the size of the data. BOOLEAN is a true / false (1,0) represented in an 8 bit container. The UNSIGNED variants with multiple bit definitions are for packed graphical data formats and represent vectors with per vector member sizes which are treated as a single unit for packing and alignment purposes.</p>
-<p>MATRIX the three matrix types contain FLOAT_32 elements and are treated as 32 bits for alignment purposes.</p>
-<p>RS_* objects. 32 bit opaque handles. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00478">478</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bf"></a><!-- doxytag: member="rs_types.rsh::rs_depth_func" ref="a03e91ad8ebfc283ba20f7443dea4a4bf" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a"></a><!-- doxytag: member="RS_DEPTH_FUNC_ALWAYS" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a" args="" -->RS_DEPTH_FUNC_ALWAYS</em>&nbsp;</td><td>
-<p>Always drawn </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a"></a><!-- doxytag: member="RS_DEPTH_FUNC_LESS" ref="a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a" args="" -->RS_DEPTH_FUNC_LESS</em>&nbsp;</td><td>
-<p>Drawn if the incoming depth value is less than that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f"></a><!-- doxytag: member="RS_DEPTH_FUNC_LEQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f" args="" -->RS_DEPTH_FUNC_LEQUAL</em>&nbsp;</td><td>
-<p>Drawn if the incoming depth value is less or equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d"></a><!-- doxytag: member="RS_DEPTH_FUNC_GREATER" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d" args="" -->RS_DEPTH_FUNC_GREATER</em>&nbsp;</td><td>
-<p>Drawn if the incoming depth value is greater than that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d"></a><!-- doxytag: member="RS_DEPTH_FUNC_GEQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d" args="" -->RS_DEPTH_FUNC_GEQUAL</em>&nbsp;</td><td>
-<p>Drawn if the incoming depth value is greater or equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21"></a><!-- doxytag: member="RS_DEPTH_FUNC_EQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21" args="" -->RS_DEPTH_FUNC_EQUAL</em>&nbsp;</td><td>
-<p>Drawn if the incoming depth value is equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d"></a><!-- doxytag: member="RS_DEPTH_FUNC_NOTEQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d" args="" -->RS_DEPTH_FUNC_NOTEQUAL</em>&nbsp;</td><td>
-<p>Drawn if the incoming depth value is not equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3"></a><!-- doxytag: member="RS_DEPTH_FUNC_INVALID" ref="a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3" args="" -->RS_DEPTH_FUNC_INVALID</em>&nbsp;</td><td>
-<p>Invalid depth function </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00538">538</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951"></a><!-- doxytag: member="rs_types.rsh::rs_primitive" ref="aaaa4ecd4a284cf9cccc6e06407229951" args="" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">enum <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a></td>
-        </tr>
-      </table>
-</div>
-<div class="memdoc">
-<p>Describes the way mesh vertex data is interpreted when rendering </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158"></a><!-- doxytag: member="RS_PRIMITIVE_POINT" ref="aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158" args="" -->RS_PRIMITIVE_POINT</em>&nbsp;</td><td>
-<p>Vertex data will be rendered as a series of points </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf"></a><!-- doxytag: member="RS_PRIMITIVE_LINE" ref="aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf" args="" -->RS_PRIMITIVE_LINE</em>&nbsp;</td><td>
-<p>Vertex pairs will be rendered as lines </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da"></a><!-- doxytag: member="RS_PRIMITIVE_LINE_STRIP" ref="aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da" args="" -->RS_PRIMITIVE_LINE_STRIP</em>&nbsp;</td><td>
-<p>Vertex data will be rendered as a connected line strip </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79"></a><!-- doxytag: member="RS_PRIMITIVE_TRIANGLE" ref="aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79" args="" -->RS_PRIMITIVE_TRIANGLE</em>&nbsp;</td><td>
-<p>Vertices will be rendered as individual triangles </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9"></a><!-- doxytag: member="RS_PRIMITIVE_TRIANGLE_STRIP" ref="aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9" args="" -->RS_PRIMITIVE_TRIANGLE_STRIP</em>&nbsp;</td><td>
-<p>Vertices will be rendered as a connected triangle strip defined by the first three vertices with each additional triangle defined by a new vertex </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01"></a><!-- doxytag: member="RS_PRIMITIVE_TRIANGLE_FAN" ref="aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01" args="" -->RS_PRIMITIVE_TRIANGLE_FAN</em>&nbsp;</td><td>
-<p>Vertices will be rendered as a sequence of triangles that all share first vertex as the origin </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d"></a><!-- doxytag: member="RS_PRIMITIVE_INVALID" ref="aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d" args="" -->RS_PRIMITIVE_INVALID</em>&nbsp;</td><td>
-<p>Invalid primitive </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00425">425</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__types_8rsh_source.html b/docs/html/reference/renderscript/rs__types_8rsh_source.html
deleted file mode 100644
index f580306..0000000
--- a/docs/html/reference/renderscript/rs__types_8rsh_source.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
-      <li><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh</div>  </div>
-</div>
-<div class="contents">
-<a href="rs__types_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2013 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016 
-<a name="l00041"></a>00041 <span class="preprocessor">#ifndef __RS_TYPES_RSH__</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __RS_TYPES_RSH__</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="comment">/* Constants */</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#define M_E         2.718281828459045235360287471352662498f     </span><span class="comment">/* e */</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#define M_LOG2E     1.442695040888963407359924681001892137f     </span><span class="comment">/* log_2 e */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#define M_LOG10E    0.434294481903251827651128918916605082f     </span><span class="comment">/* log_10 e */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#define M_LN2       0.693147180559945309417232121458176568f     </span><span class="comment">/* log_e 2 */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#define M_LN10      2.302585092994045684017991454684364208f     </span><span class="comment">/* log_e 10 */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define M_PI        3.141592653589793238462643383279502884f     </span><span class="comment">/* pi */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define M_PI_2      1.570796326794896619231321691639751442f     </span><span class="comment">/* pi/2 */</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#define M_PI_4      0.785398163397448309615660845819875721f     </span><span class="comment">/* pi/4 */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#define M_1_PI      0.318309886183790671537767526745028724f     </span><span class="comment">/* 1/pi */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define M_2_PIl     0.636619772367581343075535053490057448f     </span><span class="comment">/* 2/pi */</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#define M_2_SQRTPI  1.128379167095512573896158903121545172f     </span><span class="comment">/* 2/sqrt(pi) */</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#define M_SQRT2     1.414213562373095048801688724209698079f     </span><span class="comment">/* sqrt(2) */</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#define M_SQRT1_2   0.707106781186547524400844362104849039f     </span><span class="comment">/* 1/sqrt(2) */</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="preprocessor">#include &quot;stdbool.h&quot;</span>
-<a name="l00063"></a><a class="code" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">00063</a> <span class="keyword">typedef</span> <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a>;
-<a name="l00067"></a><a class="code" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">00067</a> <span class="keyword">typedef</span> <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a>;
-<a name="l00071"></a><a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">00071</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>;
-<a name="l00075"></a><a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">00075</a> <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a>;
-<a name="l00079"></a><a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">00079</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a>;
-<a name="l00083"></a><a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">00083</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a>;
-<a name="l00087"></a><a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">00087</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>;
-<a name="l00091"></a><a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">00091</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a>;
-<a name="l00095"></a><a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">00095</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>;
-<a name="l00099"></a><a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">00099</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>;
-<a name="l00103"></a><a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">00103</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>;
-<a name="l00107"></a><a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">00107</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>;
-<a name="l00111"></a><a class="code" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">00111</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="code" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a>;
-<a name="l00115"></a><a class="code" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">00115</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> <a class="code" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a>;
-<a name="l00116"></a>00116 
-<a name="l00122"></a><a class="code" href="structrs__element.html">00122</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a>;
-<a name="l00128"></a><a class="code" href="structrs__type.html">00128</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a>;
-<a name="l00134"></a><a class="code" href="structrs__allocation.html">00134</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a>;
-<a name="l00140"></a><a class="code" href="structrs__sampler.html">00140</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a>;
-<a name="l00146"></a><a class="code" href="structrs__script.html">00146</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a>;
-<a name="l00152"></a><a class="code" href="structrs__mesh.html">00152</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a>;
-<a name="l00158"></a><a class="code" href="structrs__path.html">00158</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a>;
-<a name="l00164"></a><a class="code" href="structrs__program__fragment.html">00164</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a>;
-<a name="l00170"></a><a class="code" href="structrs__program__vertex.html">00170</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a>;
-<a name="l00176"></a><a class="code" href="structrs__program__raster.html">00176</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a>;
-<a name="l00182"></a><a class="code" href="structrs__program__store.html">00182</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a>;
-<a name="l00188"></a><a class="code" href="structrs__font.html">00188</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a>;
-<a name="l00189"></a>00189 
-<a name="l00195"></a><a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">00195</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((ext_vector_type(2)));
-<a name="l00200"></a><a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">00200</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((ext_vector_type(3)));
-<a name="l00206"></a><a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">00206</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((ext_vector_type(4)));
-<a name="l00207"></a>00207 
-<a name="l00212"></a><a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">00212</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a> __attribute__((ext_vector_type(2)));
-<a name="l00217"></a><a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">00217</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a> __attribute__((ext_vector_type(3)));
-<a name="l00222"></a><a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">00222</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a> __attribute__((ext_vector_type(4)));
-<a name="l00223"></a>00223 
-<a name="l00228"></a><a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">00228</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> __attribute__((ext_vector_type(2)));
-<a name="l00233"></a><a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">00233</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a> __attribute__((ext_vector_type(3)));
-<a name="l00238"></a><a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">00238</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((ext_vector_type(4)));
-<a name="l00239"></a>00239 
-<a name="l00244"></a><a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">00244</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a> __attribute__((ext_vector_type(2)));
-<a name="l00249"></a><a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">00249</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a> __attribute__((ext_vector_type(3)));
-<a name="l00254"></a><a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">00254</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a> __attribute__((ext_vector_type(4)));
-<a name="l00255"></a>00255 
-<a name="l00260"></a><a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">00260</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a> __attribute__((ext_vector_type(2)));
-<a name="l00265"></a><a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">00265</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a> __attribute__((ext_vector_type(3)));
-<a name="l00270"></a><a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">00270</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a> __attribute__((ext_vector_type(4)));
-<a name="l00271"></a>00271 
-<a name="l00276"></a><a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">00276</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a> __attribute__((ext_vector_type(2)));
-<a name="l00281"></a><a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">00281</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a> __attribute__((ext_vector_type(3)));
-<a name="l00286"></a><a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">00286</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a> __attribute__((ext_vector_type(4)));
-<a name="l00287"></a>00287 
-<a name="l00292"></a><a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">00292</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a> __attribute__((ext_vector_type(2)));
-<a name="l00297"></a><a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">00297</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a> __attribute__((ext_vector_type(3)));
-<a name="l00302"></a><a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">00302</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a> __attribute__((ext_vector_type(4)));
-<a name="l00303"></a>00303 
-<a name="l00308"></a><a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">00308</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a> __attribute__((ext_vector_type(2)));
-<a name="l00313"></a><a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">00313</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a> __attribute__((ext_vector_type(3)));
-<a name="l00318"></a><a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">00318</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a> __attribute__((ext_vector_type(4)));
-<a name="l00319"></a>00319 
-<a name="l00324"></a><a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">00324</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a> __attribute__((ext_vector_type(2)));
-<a name="l00329"></a><a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">00329</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a> __attribute__((ext_vector_type(3)));
-<a name="l00334"></a><a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">00334</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a> __attribute__((ext_vector_type(4)));
-<a name="l00335"></a>00335 
-<a name="l00340"></a><a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">00340</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a> __attribute__((ext_vector_type(2)));
-<a name="l00345"></a><a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">00345</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a> __attribute__((ext_vector_type(3)));
-<a name="l00350"></a><a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">00350</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a> __attribute__((ext_vector_type(4)));
-<a name="l00351"></a>00351 
-<a name="l00358"></a><a class="code" href="structrs__matrix4x4.html">00358</a> typedef struct {
-<a name="l00359"></a>00359     <span class="keywordtype">float</span> m[16];
-<a name="l00360"></a>00360 } <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a>;
-<a name="l00367"></a><a class="code" href="structrs__matrix3x3.html">00367</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00368"></a>00368     <span class="keywordtype">float</span> m[9];
-<a name="l00369"></a>00369 } <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a>;
-<a name="l00376"></a><a class="code" href="structrs__matrix2x2.html">00376</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00377"></a>00377     <span class="keywordtype">float</span> m[4];
-<a name="l00378"></a>00378 } <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a>;
-<a name="l00379"></a>00379 
-<a name="l00383"></a><a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">00383</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a>;
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 <span class="preprocessor">#define RS_PACKED __attribute__((packed, aligned(4)))</span>
-<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define NULL ((void *)0)</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span>
-<a name="l00388"></a>00388 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14))</span>
-<a name="l00389"></a>00389 <span class="preprocessor"></span>
-<a name="l00393"></a><a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">00393</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00394"></a>00394     RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
-<a name="l00395"></a>00395     RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1,
-<a name="l00396"></a>00396     RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2,
-<a name="l00397"></a>00397     RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3,
-<a name="l00398"></a>00398     RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4,
-<a name="l00399"></a>00399     RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5
-<a name="l00400"></a>00400 } <a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229" title="Enum for selecting cube map faces.">rs_allocation_cubemap_face</a>;
-<a name="l00401"></a>00401 
-<a name="l00408"></a><a class="code" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">00408</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00409"></a>00409     RS_ALLOCATION_USAGE_SCRIPT = 0x0001,
-<a name="l00410"></a>00410     RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002,
-<a name="l00411"></a>00411     RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004,
-<a name="l00412"></a>00412     RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008,
-<a name="l00413"></a>00413     RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
-<a name="l00414"></a>00414 } <a class="code" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171" title="Bitfield to specify the usage types for an allocation.">rs_allocation_usage_type</a>;
-<a name="l00415"></a>00415 
-<a name="l00416"></a>00416 <span class="preprocessor">#endif //defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 14)</span>
-<a name="l00417"></a>00417 <span class="preprocessor"></span>
-<a name="l00418"></a>00418 <span class="comment">// New API&#39;s</span>
-<a name="l00419"></a>00419 <span class="preprocessor">#if (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00420"></a>00420 <span class="preprocessor"></span>
-<a name="l00425"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">00425</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00429"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">00429</a>     <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">RS_PRIMITIVE_POINT</a>              = 0,
-<a name="l00433"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">00433</a>     <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">RS_PRIMITIVE_LINE</a>               = 1,
-<a name="l00437"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">00437</a>     <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">RS_PRIMITIVE_LINE_STRIP</a>         = 2,
-<a name="l00441"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">00441</a>     <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">RS_PRIMITIVE_TRIANGLE</a>           = 3,
-<a name="l00447"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">00447</a>     <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">RS_PRIMITIVE_TRIANGLE_STRIP</a>     = 4,
-<a name="l00452"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">00452</a>     <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">RS_PRIMITIVE_TRIANGLE_FAN</a>       = 5,
-<a name="l00453"></a>00453 
-<a name="l00457"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">00457</a>     <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">RS_PRIMITIVE_INVALID</a>            = 100,
-<a name="l00458"></a>00458 } <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a>;
-<a name="l00459"></a>00459 
-<a name="l00478"></a><a class="code" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">00478</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00479"></a>00479     RS_TYPE_NONE             = 0,
-<a name="l00480"></a>00480     RS_TYPE_FLOAT_32         = 2,
-<a name="l00481"></a>00481     RS_TYPE_FLOAT_64         = 3,
-<a name="l00482"></a>00482     RS_TYPE_SIGNED_8         = 4,
-<a name="l00483"></a>00483     RS_TYPE_SIGNED_16        = 5,
-<a name="l00484"></a>00484     RS_TYPE_SIGNED_32        = 6,
-<a name="l00485"></a>00485     RS_TYPE_SIGNED_64        = 7,
-<a name="l00486"></a>00486     RS_TYPE_UNSIGNED_8       = 8,
-<a name="l00487"></a>00487     RS_TYPE_UNSIGNED_16      = 9,
-<a name="l00488"></a>00488     RS_TYPE_UNSIGNED_32      = 10,
-<a name="l00489"></a>00489     RS_TYPE_UNSIGNED_64      = 11,
-<a name="l00490"></a>00490 
-<a name="l00491"></a>00491     RS_TYPE_BOOLEAN          = 12,
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493     RS_TYPE_UNSIGNED_5_6_5   = 13,
-<a name="l00494"></a>00494     RS_TYPE_UNSIGNED_5_5_5_1 = 14,
-<a name="l00495"></a>00495     RS_TYPE_UNSIGNED_4_4_4_4 = 15,
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497     RS_TYPE_MATRIX_4X4       = 16,
-<a name="l00498"></a>00498     RS_TYPE_MATRIX_3X3       = 17,
-<a name="l00499"></a>00499     RS_TYPE_MATRIX_2X2       = 18,
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501     RS_TYPE_ELEMENT          = 1000,
-<a name="l00502"></a>00502     RS_TYPE_TYPE             = 1001,
-<a name="l00503"></a>00503     RS_TYPE_ALLOCATION       = 1002,
-<a name="l00504"></a>00504     RS_TYPE_SAMPLER          = 1003,
-<a name="l00505"></a>00505     RS_TYPE_SCRIPT           = 1004,
-<a name="l00506"></a>00506     RS_TYPE_MESH             = 1005,
-<a name="l00507"></a>00507     RS_TYPE_PROGRAM_FRAGMENT = 1006,
-<a name="l00508"></a>00508     RS_TYPE_PROGRAM_VERTEX   = 1007,
-<a name="l00509"></a>00509     RS_TYPE_PROGRAM_RASTER   = 1008,
-<a name="l00510"></a>00510     RS_TYPE_PROGRAM_STORE    = 1009,
-<a name="l00511"></a>00511     RS_TYPE_FONT             = 1010,
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513     RS_TYPE_INVALID          = 10000,
-<a name="l00514"></a>00514 } <a class="code" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647" title="Enumeration for possible element data types.">rs_data_type</a>;
-<a name="l00515"></a>00515 
-<a name="l00524"></a><a class="code" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">00524</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00525"></a>00525     RS_KIND_USER         = 0,
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527     RS_KIND_PIXEL_L      = 7,
-<a name="l00528"></a>00528     RS_KIND_PIXEL_A      = 8,
-<a name="l00529"></a>00529     RS_KIND_PIXEL_LA     = 9,
-<a name="l00530"></a>00530     RS_KIND_PIXEL_RGB    = 10,
-<a name="l00531"></a>00531     RS_KIND_PIXEL_RGBA   = 11,
-<a name="l00532"></a>00532     RS_KIND_PIXEL_DEPTH  = 12,
-<a name="l00533"></a>00533     RS_KIND_PIXEL_YUV    = 13,
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535     RS_KIND_INVALID      = 100,
-<a name="l00536"></a>00536 } <a class="code" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a" title="Enumeration for possible element data kind.">rs_data_kind</a>;
-<a name="l00537"></a>00537 
-<a name="l00538"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">00538</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00542"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">00542</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">RS_DEPTH_FUNC_ALWAYS</a>        = 0,
-<a name="l00547"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">00547</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">RS_DEPTH_FUNC_LESS</a>          = 1,
-<a name="l00552"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">00552</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">RS_DEPTH_FUNC_LEQUAL</a>        = 2,
-<a name="l00557"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">00557</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">RS_DEPTH_FUNC_GREATER</a>       = 3,
-<a name="l00562"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">00562</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">RS_DEPTH_FUNC_GEQUAL</a>        = 4,
-<a name="l00567"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">00567</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">RS_DEPTH_FUNC_EQUAL</a>         = 5,
-<a name="l00572"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">00572</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">RS_DEPTH_FUNC_NOTEQUAL</a>      = 6,
-<a name="l00576"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">00576</a>     <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">RS_DEPTH_FUNC_INVALID</a>       = 100,
-<a name="l00577"></a>00577 } <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a>;
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00580"></a>00580     RS_BLEND_SRC_ZERO                   = 0,
-<a name="l00581"></a>00581     RS_BLEND_SRC_ONE                    = 1,
-<a name="l00582"></a>00582     RS_BLEND_SRC_DST_COLOR              = 2,
-<a name="l00583"></a>00583     RS_BLEND_SRC_ONE_MINUS_DST_COLOR    = 3,
-<a name="l00584"></a>00584     RS_BLEND_SRC_SRC_ALPHA              = 4,
-<a name="l00585"></a>00585     RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA    = 5,
-<a name="l00586"></a>00586     RS_BLEND_SRC_DST_ALPHA              = 6,
-<a name="l00587"></a>00587     RS_BLEND_SRC_ONE_MINUS_DST_ALPHA    = 7,
-<a name="l00588"></a>00588     RS_BLEND_SRC_SRC_ALPHA_SATURATE     = 8,
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590     RS_BLEND_SRC_INVALID                = 100,
-<a name="l00591"></a>00591 } rs_blend_src_func;
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00594"></a>00594     RS_BLEND_DST_ZERO                   = 0,
-<a name="l00595"></a>00595     RS_BLEND_DST_ONE                    = 1,
-<a name="l00596"></a>00596     RS_BLEND_DST_SRC_COLOR              = 2,
-<a name="l00597"></a>00597     RS_BLEND_DST_ONE_MINUS_SRC_COLOR    = 3,
-<a name="l00598"></a>00598     RS_BLEND_DST_SRC_ALPHA              = 4,
-<a name="l00599"></a>00599     RS_BLEND_DST_ONE_MINUS_SRC_ALPHA    = 5,
-<a name="l00600"></a>00600     RS_BLEND_DST_DST_ALPHA              = 6,
-<a name="l00601"></a>00601     RS_BLEND_DST_ONE_MINUS_DST_ALPHA    = 7,
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603     RS_BLEND_DST_INVALID                = 100,
-<a name="l00604"></a>00604 } rs_blend_dst_func;
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00607"></a>00607     RS_CULL_BACK     = 0,
-<a name="l00608"></a>00608     RS_CULL_FRONT    = 1,
-<a name="l00609"></a>00609     RS_CULL_NONE     = 2,
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611     RS_CULL_INVALID  = 100,
-<a name="l00612"></a>00612 } rs_cull_mode;
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00615"></a>00615     RS_SAMPLER_NEAREST              = 0,
-<a name="l00616"></a>00616     RS_SAMPLER_LINEAR               = 1,
-<a name="l00617"></a>00617     RS_SAMPLER_LINEAR_MIP_LINEAR    = 2,
-<a name="l00618"></a>00618     RS_SAMPLER_WRAP                 = 3,
-<a name="l00619"></a>00619     RS_SAMPLER_CLAMP                = 4,
-<a name="l00620"></a>00620     RS_SAMPLER_LINEAR_MIP_NEAREST   = 5,
-<a name="l00621"></a>00621     RS_SAMPLER_MIRRORED_REPEAT      = 6,
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623     RS_SAMPLER_INVALID              = 100,
-<a name="l00624"></a>00624 } rs_sampler_value;
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626 <span class="preprocessor">#endif // (defined(RS_VERSION) &amp;&amp; (RS_VERSION &gt;= 16))</span>
-<a name="l00627"></a>00627 <span class="preprocessor"></span>
-<a name="l00628"></a>00628 <span class="preprocessor">#endif // __RS_TYPES_RSH__</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__allocation.html b/docs/html/reference/renderscript/structrs__allocation.html
deleted file mode 100644
index 1ffbc47..0000000
--- a/docs/html/reference/renderscript/structrs__allocation.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_allocation Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_allocation Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_allocation" -->
-<p>Opaque handle to a RenderScript allocation.  
- <a href="structrs__allocation.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript allocation. </p>
-<p>See: android.renderscript.Allocation </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00134">134</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__element.html b/docs/html/reference/renderscript/structrs__element.html
deleted file mode 100644
index d6a1460..0000000
--- a/docs/html/reference/renderscript/structrs__element.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_element Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_element Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_element" -->
-<p>Opaque handle to a RenderScript element.  
- <a href="structrs__element.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript element. </p>
-<p>See: android.renderscript.Element </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00122">122</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__font.html b/docs/html/reference/renderscript/structrs__font.html
deleted file mode 100644
index dbc4c4d..0000000
--- a/docs/html/reference/renderscript/structrs__font.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_font Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_font Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_font" -->
-<p>Opaque handle to a RenderScript font object.  
- <a href="structrs__font.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript font object. </p>
-<p>See: android.renderscript.Font </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00188">188</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix2x2.html b/docs/html/reference/renderscript/structrs__matrix2x2.html
deleted file mode 100644
index bacfa02..0000000
--- a/docs/html/reference/renderscript/structrs__matrix2x2.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_matrix2x2 Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_matrix2x2 Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_matrix2x2" -->
-<p>2x2 float matrix  
- <a href="structrs__matrix2x2.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>2x2 float matrix </p>
-<p>Native holder for RS matrix. Elements are stored in the array at the location [row*2 + col] </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00376">376</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix3x3.html b/docs/html/reference/renderscript/structrs__matrix3x3.html
deleted file mode 100644
index 3745608..0000000
--- a/docs/html/reference/renderscript/structrs__matrix3x3.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_matrix3x3 Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_matrix3x3 Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_matrix3x3" -->
-<p>3x3 float matrix  
- <a href="structrs__matrix3x3.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>3x3 float matrix </p>
-<p>Native holder for RS matrix. Elements are stored in the array at the location [row*3 + col] </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00367">367</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix4x4.html b/docs/html/reference/renderscript/structrs__matrix4x4.html
deleted file mode 100644
index 26b57d1..0000000
--- a/docs/html/reference/renderscript/structrs__matrix4x4.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_matrix4x4 Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_matrix4x4 Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_matrix4x4" -->
-<p>4x4 float matrix  
- <a href="structrs__matrix4x4.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>4x4 float matrix </p>
-<p>Native holder for RS matrix. Elements are stored in the array at the location [row*4 + col] </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00358">358</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__mesh.html b/docs/html/reference/renderscript/structrs__mesh.html
deleted file mode 100644
index fed96d9..0000000
--- a/docs/html/reference/renderscript/structrs__mesh.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_mesh Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_mesh Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_mesh" -->
-<p>Opaque handle to a RenderScript mesh object.  
- <a href="structrs__mesh.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript mesh object. </p>
-<p>See: android.renderscript.Mesh </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00152">152</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__path.html b/docs/html/reference/renderscript/structrs__path.html
deleted file mode 100644
index ef7f650..0000000
--- a/docs/html/reference/renderscript/structrs__path.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_path Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_path Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_path" -->
-<p>Opaque handle to a RenderScript Path object.  
- <a href="structrs__path.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript Path object. </p>
-<p>See: android.renderscript.Path </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00158">158</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__fragment.html b/docs/html/reference/renderscript/structrs__program__fragment.html
deleted file mode 100644
index 707e899..0000000
--- a/docs/html/reference/renderscript/structrs__program__fragment.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_fragment Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_program_fragment Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_fragment" -->
-<p>Opaque handle to a RenderScript ProgramFragment object.  
- <a href="structrs__program__fragment.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramFragment object. </p>
-<p>See: android.renderscript.ProgramFragment </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00164">164</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__raster.html b/docs/html/reference/renderscript/structrs__program__raster.html
deleted file mode 100644
index 444aaf9..0000000
--- a/docs/html/reference/renderscript/structrs__program__raster.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_raster Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_program_raster Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_raster" -->
-<p>Opaque handle to a RenderScript ProgramRaster object.  
- <a href="structrs__program__raster.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramRaster object. </p>
-<p>See: android.renderscript.ProgramRaster </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00176">176</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__store.html b/docs/html/reference/renderscript/structrs__program__store.html
deleted file mode 100644
index c187392..0000000
--- a/docs/html/reference/renderscript/structrs__program__store.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_store Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_program_store Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_store" -->
-<p>Opaque handle to a RenderScript ProgramStore object.  
- <a href="structrs__program__store.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramStore object. </p>
-<p>See: android.renderscript.ProgramStore </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00182">182</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__vertex.html b/docs/html/reference/renderscript/structrs__program__vertex.html
deleted file mode 100644
index c3688b7..0000000
--- a/docs/html/reference/renderscript/structrs__program__vertex.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_vertex Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_program_vertex Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_vertex" -->
-<p>Opaque handle to a RenderScript ProgramVertex object.  
- <a href="structrs__program__vertex.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramVertex object. </p>
-<p>See: android.renderscript.ProgramVertex </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00170">170</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__sampler.html b/docs/html/reference/renderscript/structrs__sampler.html
deleted file mode 100644
index daba2bb..0000000
--- a/docs/html/reference/renderscript/structrs__sampler.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_sampler Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_sampler Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_sampler" -->
-<p>Opaque handle to a RenderScript sampler object.  
- <a href="structrs__sampler.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript sampler object. </p>
-<p>See: android.renderscript.Sampler </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00140">140</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__script.html b/docs/html/reference/renderscript/structrs__script.html
deleted file mode 100644
index ea39d95..0000000
--- a/docs/html/reference/renderscript/structrs__script.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_script Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_script Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_script" -->
-<p>Opaque handle to a RenderScript script object.  
- <a href="structrs__script.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript script object. </p>
-<p>See: android.renderscript.ScriptC </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00146">146</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__script__call.html b/docs/html/reference/renderscript/structrs__script__call.html
deleted file mode 100644
index e4c0820..0000000
--- a/docs/html/reference/renderscript/structrs__script__call.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_script_call Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_script_call Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_script_call" --><hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Structure to provide extra information to a rsForEach call. Primarly used to restrict the call to a subset of cells in the allocation. </p>
-
-<p>Definition at line <a class="el" href="rs__core_8rsh_source.html#l00110">110</a> of file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__tm.html b/docs/html/reference/renderscript/structrs__tm.html
deleted file mode 100644
index b6447b5..0000000
--- a/docs/html/reference/renderscript/structrs__tm.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_tm Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="summary">
-<a href="#pub-attribs">Data Fields</a>  </div>
-  <div class="headertitle">
-<div class="title">rs_tm Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_tm" --><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1590aa8850370a4712da801edb8da9e"></a><!-- doxytag: member="rs_tm::tm_sec" ref="ae1590aa8850370a4712da801edb8da9e" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e">tm_sec</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">seconds <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd4bd6ccf0d1f20859ecaecf850ce85b"></a><!-- doxytag: member="rs_tm::tm_min" ref="abd4bd6ccf0d1f20859ecaecf850ce85b" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b">tm_min</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">minutes <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb46962bc20f8724567981adc3711b5a"></a><!-- doxytag: member="rs_tm::tm_hour" ref="afb46962bc20f8724567981adc3711b5a" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a">tm_hour</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">hours <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac87e43828f05bf62d0c770889b81ff15"></a><!-- doxytag: member="rs_tm::tm_mday" ref="ac87e43828f05bf62d0c770889b81ff15" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15">tm_mday</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">day of the month <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34a5466d376e405f343ed4e1592d7832"></a><!-- doxytag: member="rs_tm::tm_mon" ref="a34a5466d376e405f343ed4e1592d7832" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832">tm_mon</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">month <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e582a615a448949969a0982d8a62d2"></a><!-- doxytag: member="rs_tm::tm_year" ref="a74e582a615a448949969a0982d8a62d2" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2">tm_year</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">year <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d40217d3cd15b51e0093db1810426e4"></a><!-- doxytag: member="rs_tm::tm_wday" ref="a4d40217d3cd15b51e0093db1810426e4" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4">tm_wday</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">day of the week <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a589eab24c4d79f05f0b3601162ed34d0"></a><!-- doxytag: member="rs_tm::tm_yday" ref="a589eab24c4d79f05f0b3601162ed34d0" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0">tm_yday</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">day of the year <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cffdd224d2ea30a079a86ef1e41e111"></a><!-- doxytag: member="rs_tm::tm_isdst" ref="a8cffdd224d2ea30a079a86ef1e41e111" args="" -->
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111">tm_isdst</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">daylight savings time <br/></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Data structure for broken-down time components.</p>
-<p>tm_sec - Seconds after the minute. This ranges from 0 to 59, but possibly up to 60 for leap seconds. tm_min - Minutes after the hour. This ranges from 0 to 59. tm_hour - Hours past midnight. This ranges from 0 to 23. tm_mday - Day of the month. This ranges from 1 to 31. tm_mon - Months since January. This ranges from 0 to 11. tm_year - Years since 1900. tm_wday - Days since Sunday. This ranges from 0 to 6. tm_yday - Days since January 1. This ranges from 0 to 365. tm_isdst - Flag to indicate whether daylight saving time is in effect. The value is positive if it is in effect, zero if it is not, and negative if the information is not available. </p>
-
-<p>Definition at line <a class="el" href="rs__time_8rsh_source.html#l00049">49</a> of file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__type.html b/docs/html/reference/renderscript/structrs__type.html
deleted file mode 100644
index ef95ed18..0000000
--- a/docs/html/reference/renderscript/structrs__type.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_type Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
-  <div id="navrow1" class="tabs">
-    <ul class="tablist">
-      <li><a href="index.html"><span>Overview</span></a></li>
-      <li><a href="globals.html"><span>Globals</span></a></li>
-      <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
-    </ul>
-  </div>
-</div>
-<div class="header">
-  <div class="headertitle">
-<div class="title">rs_type Struct Reference</div>  </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_type" -->
-<p>Opaque handle to a RenderScript type.  
- <a href="structrs__type.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript type. </p>
-<p>See: android.renderscript.Type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00128">128</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/tab_a.png b/docs/html/reference/renderscript/tab_a.png
deleted file mode 100644
index 2d99ef2..0000000
--- a/docs/html/reference/renderscript/tab_a.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_b.png b/docs/html/reference/renderscript/tab_b.png
deleted file mode 100644
index b2c3d2b..0000000
--- a/docs/html/reference/renderscript/tab_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_h.png b/docs/html/reference/renderscript/tab_h.png
deleted file mode 100644
index c11f48f..0000000
--- a/docs/html/reference/renderscript/tab_h.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_s.png b/docs/html/reference/renderscript/tab_s.png
deleted file mode 100644
index 978943a..0000000
--- a/docs/html/reference/renderscript/tab_s.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tabs.css b/docs/html/reference/renderscript/tabs.css
deleted file mode 100644
index 2192056..0000000
--- a/docs/html/reference/renderscript/tabs.css
+++ /dev/null
@@ -1,59 +0,0 @@
-.tabs, .tabs2, .tabs3 {
-    background-image: url('tab_b.png');
-    width: 100%;
-    z-index: 101;
-    font-size: 13px;
-}
-
-.tabs2 {
-    font-size: 10px;
-}
-.tabs3 {
-    font-size: 9px;
-}
-
-.tablist {
-    margin: 0;
-    padding: 0;
-    display: table;
-}
-
-.tablist li {
-    float: left;
-    display: table-cell;
-    background-image: url('tab_b.png');
-    line-height: 36px;
-    list-style: none;
-}
-
-.tablist a {
-    display: block;
-    padding: 0 20px;
-    font-weight: bold;
-    background-image:url('tab_s.png');
-    background-repeat:no-repeat;
-    background-position:right;
-    color: #283A5D;
-    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-    text-decoration: none;
-    outline: none;
-}
-
-.tabs3 .tablist a {
-    padding: 0 10px;
-}
-
-.tablist a:hover {
-    background-image: url('tab_h.png');
-    background-repeat:repeat-x;
-    color: #fff;
-    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-    text-decoration: none;
-}
-
-.tablist li.current a {
-    background-image: url('tab_a.png');
-    background-repeat:repeat-x;
-    color: #fff;
-    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-}
diff --git a/docs/html/samples/new/index.jd b/docs/html/samples/new/index.jd
index 279b910..80765c7 100644
--- a/docs/html/samples/new/index.jd
+++ b/docs/html/samples/new/index.jd
@@ -1,4 +1,5 @@
 page.title=What's New
+page.image=images/cards/samples-new_2x.png
 
 @jd:body
 
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 31d2efb..7cdf72f 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,10 +1,11 @@
 page.title=Download Android Studio and SDK Tools
 page.tags=sdk, android studio
 page.template=sdk
+page.image=images/cards/android-studio_2x.png
 header.hide=1
 page.metaDescription=Download the official Android IDE and developer tools to build apps for Android phones, tablets, wearables, TVs, and more.
 
-studio.version=1.2.0
+studio.version=1.2.0.12
 
 studio.linux_bundle_download=android-studio-ide-141.1890965-linux.zip
 studio.linux_bundle_bytes=259139652 
@@ -30,21 +31,21 @@
 
 
 
-sdk.linux_download=android-sdk_r24.1.2-linux.tgz
-sdk.linux_bytes=168121693
-sdk.linux_checksum=68980e4a26cca0182abb1032abffbb72a1240c51
+sdk.linux_download=android-sdk_r24.2-linux.tgz
+sdk.linux_bytes=168119905
+sdk.linux_checksum=1a29f9827ef395a96db629209b0e38d5e2dd8089
 
-sdk.mac_download=android-sdk_r24.1.2-macosx.zip
-sdk.mac_bytes=89151287
-sdk.mac_checksum=00e43ff1557e8cba7da53e4f64f3a34498048256
+sdk.mac_download=android-sdk_r24.2-macosx.zip
+sdk.mac_bytes=88949635
+sdk.mac_checksum=256c9bf642f56242d963c090d147de7402733451
 
-sdk.win_download=android-sdk_r24.1.2-windows.zip
-sdk.win_bytes=159778618
-sdk.win_checksum=704f6c874373b98e061fe2e7eb34f9fcb907a341
+sdk.win_download=android-sdk_r24.2-windows.zip
+sdk.win_bytes=155944165
+sdk.win_checksum=2611ed9a6080f4838f1d4e55172801714a8a169b
 
-sdk.win_installer=installer_r24.1.2-windows.exe
-sdk.win_installer_bytes=111364285
-sdk.win_installer_checksum=e0ec864efa0e7449db2d7ed069c03b1f4d36f0cd
+sdk.win_installer=installer_r24.2-windows.exe
+sdk.win_installer_bytes=107849819
+sdk.win_installer_checksum=e764ea93aa72766737f9be3b9fb3e42d879ab599
 
 
 
@@ -63,7 +64,7 @@
   }
   .feature-blurb {
   margin:0px; font-size:16px; font-weight:300;
-  padding:40px 0 0 0;
+  padding-top:40px;
   }
 
   .landing-button.green {
@@ -284,7 +285,7 @@
 
 <img src="{@docRoot}images/tools/studio-hero.png"
 srcset="{@docRoot}images/tools/studio-hero_2x.png 2x, {@docRoot}images/tools/studio-hero.png 1x"
-width="760" height="400" alt="" style="margin-bottom:80px" />
+width="760" height="400" alt="" style="margin-bottom:100px" />
 
 <div style="color: #fff; width:226px; height:0; overflow:visible; position:absolute; top:40px; left:25px">
 
@@ -293,7 +294,7 @@
 <p style="font-size: 16px; color:#bbb; position: absolute;left: 297px; top: 5px; display: block;
 width: 400px;text-align: center;">The official Android IDE</p>
 
-<ul style="font-size:12px">
+<ul style="font-size:12px;line-height:19px;">
 <li>Android Studio IDE</li>
 <li>Android SDK tools</li>
 <li>Android 5.0 (Lollipop) Platform</li>
@@ -321,10 +322,10 @@
 
 
 
+<div class="cols">
+<h2 class="feature norule col-13">Intelligent code editor</h2>
 
-<h2 class="feature norule" >Intelligent code editor</h2>
-
-<div class="col-9" style="margin:0 20px 0 0">
+<div class="col-9">
   <img src="{@docRoot}images/tools/studio-hero-code.png"
 srcset="{@docRoot}images/tools/studio-hero-code_2x.png 2x, {@docRoot}images/tools/studio-hero-code.png 1x" width="520" />
 </div><!-- end col-9 (left column) -->
@@ -339,9 +340,9 @@
 
 
 
-<h2 class="feature norule">Code templates and GitHub integration</h2>
+<h2 class="feature norule col-13">Code templates and GitHub integration</h2>
 
-<div class="col-9" style="margin:0 20px 0 0">
+<div class="col-9">
   <img src="{@docRoot}images/tools/studio-hero-import.png"
 srcset="{@docRoot}images/tools/studio-hero-import_2x.png 2x, {@docRoot}images/tools/studio-hero-import.png 1x" width="520" />
 </div><!-- end col-9 (left column) -->
@@ -356,9 +357,9 @@
 
 
 
-<h2 class="feature norule">Multi-screen app development</h2>
+<h2 class="feature norule col-13">Multi-screen app development</h2>
 
-<div class="col-9" style="margin:0 20px 0 0">
+<div class="col-9">
   <img src="{@docRoot}images/tools/studio-hero-screens.png"
 srcset="{@docRoot}images/tools/studio-hero-screens_2x.png 2x, {@docRoot}images/tools/studio-hero-screens.png 1x" width="520" />
 </div><!-- end col-9 (left column) -->
@@ -373,9 +374,9 @@
 
 
 
-<h2 class="feature norule">Virtual devices for all shapes and sizes</h2>
+<h2 class="feature norule col-13">Virtual devices for all shapes and sizes</h2>
 
-<div class="col-9" style="margin:0 20px 0 0">
+<div class="col-9">
   <img src="{@docRoot}images/tools/studio-hero-avds.png"
 srcset="{@docRoot}images/tools/studio-hero-avds_2x.png 2x, {@docRoot}images/tools/studio-hero-avds.png 1x" width="520" />
 </div><!-- end col-9 (left column) -->
@@ -389,10 +390,10 @@
 
 
 
-<h2 class="feature norule">
+<h2 class="feature norule col-13">
 Android builds evolved, with Gradle</h2>
 
-<div class="col-9" style="margin:0 20px 0 0">
+<div class="col-9">
   <img src="{@docRoot}images/tools/studio-hero-gradle.png"
 srcset="{@docRoot}images/tools/studio-hero-gradle_2x.png 2x, {@docRoot}images/tools/studio-hero-gradle.png 1x" width="520" />
 </div><!-- end col-9 (left column) -->
diff --git a/docs/html/sdk/installing/migrate.jd b/docs/html/sdk/installing/migrate.jd
index 3c04cb4..345e89a 100644
--- a/docs/html/sdk/installing/migrate.jd
+++ b/docs/html/sdk/installing/migrate.jd
@@ -24,17 +24,31 @@
 <p>To migrate existing Android projects, simply import them using Android Studio:</p>
 
 <ol>
-  <li>In Android Studio, close any projects currently open. You should see the
-  <strong>Welcome to Android Studio</strong> window.</li>
-  <li>Click <strong>Import Non-Android Studio project</strong>.</li>
-  <li>Locate the project you exported from Eclipse, expand it, select the
-  <strong>build.gradle</strong> file and click <strong>OK</strong>.</li>
-  <li>In the following dialog, leave <strong>Use gradle wrapper</strong> selected and click
-  <strong>OK</strong>. (You do not need to specify the Gradle home.)</li>
+  <li>In Android Studio, from the main menu or the <strong>Welcome to Android Studio</strong> page,
+  choose <strong>File &gt; Import Project</strong>.</li>
+  <li> Select the Eclipse root project directory</strong> and click <strong>OK</strong>.
+  <p class="note"><strong>Note:</strong> The Eclipse root directory must contain the
+  <code>AndroidManifest.xml</code> file. Also, the root directory must contain either the
+  <code>.project</code> and <strong>.classpath</strong> files from Eclipse or the
+  <code>res/</code> and <code>src/</code> directories.</p>
+  </li>
+  <li>Follow the steps in the import wizard. </li>
 </ol>
 
-<p>Android Studio properly updates the project structure and creates the appropriate
-Gradle build file.</p>
+<p>Android Studio imports the current dependencies, downloads libraries, and
+creates an Android Studio project with the imported Eclipse project as the main module. Android
+Studio also creates the required Gradle build files. </p>
+
+<p>The import process replaces any JAR files and libraries with Gradle dependencies, and replaces
+source libraries and binary libraries with Maven dependencies, so you no longer need to maintain
+these files manually.</p>
+
+ <p class="note"><strong>Note:</strong> If there are references to Eclipse workspace library files,
+ comment them out in the <code>project.properties</code> or <code>.classpath</code> files
+ that you imported from the Eclipse project. You can then add these files in the
+ <code>build.gradle</code> file. See
+ <a href="{@docRoot}tools/building/configuring-gradle.html">Configuring Gradle Builds</a>. </p>
+
 
 <p>For more help getting started with Android Studio and the IntelliJ user experience,
 <a href="{@docRoot}tools/studio/index.html">learn more about Android Studio</a> and
diff --git a/docs/html/sdk/installing/studio-tips.jd b/docs/html/sdk/installing/studio-tips.jd
index c3edff6..4e732f0 100644
--- a/docs/html/sdk/installing/studio-tips.jd
+++ b/docs/html/sdk/installing/studio-tips.jd
@@ -22,8 +22,8 @@
      <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> atttributes, Android Studio displays the rendering message <em>Automatically
-     add all missing attributs</em>. Clicking the message adds the missing attributes to the layout.</p>
+     <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> Bitmap rendering in the debugger</h2>
@@ -41,7 +41,6 @@
      <p class="img-caption"><strong>Figure 14.</strong> Filter Build Messages</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
@@ -69,7 +68,47 @@
     with a layout hierarchy and a list of properties for each view in the layout.</p>
 
 
-     <h2 id="intellij">Working with IntelliJ</h3>
+   <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>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>
+
+
+
+<h2 id="intellij">Working with IntelliJ-based Coding Practices</h2>
 
      <p>This section list just a few of the code editing
      practices you should consider using when creating Android Studio apps. </p>
@@ -78,8 +117,6 @@
      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
@@ -108,18 +145,16 @@
     of a string as not null.</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 statments.</p>
-
+    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 clas can be later expanded for
+    to make the outer class structure easier to read. The inner class can be later expanded for
     updates. </p>
 
 
@@ -140,6 +175,7 @@
     resolved values for the various attributes that are pulled in.</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
diff --git a/docs/html/tools/building/building-cmdline.jd b/docs/html/tools/building/building-cmdline.jd
index ec00b50..33798a5 100644
--- a/docs/html/tools/building/building-cmdline.jd
+++ b/docs/html/tools/building/building-cmdline.jd
@@ -34,9 +34,9 @@
     </div>
   </div>
 
-  <p>By default, there are two build types to build your application using the gradle.build settings:
+  <p>By default, there are two build types to build your application using the Gradle build settings:
   one for debugging your application &mdash; <em>debug</em> &mdash; and one for building your
-  final package for release &mdash; <em>release mode</em>. Regardless of which way you build type
+  final package for release &mdash; <em>release mode</em>. Regardless of which build type
   your modules use, the app must be signed before it can install on an emulator or device&mdash;with
   a debug key when building in debug mode and with your own private key when building in release mode.</p>
 
@@ -48,23 +48,24 @@
   development device. You cannot distribute an application that is signed with a debug key.
   When you build using the release build type, the .apk file is <em>unsigned</em>, so you
   must manually sign it with your own private key, using Keytool and Jarsigner settings in the
-  module's gradle.build file.</p>
+  module's <code>build.gradle</code> file.</p>
 
   <p>It's important that you read and understand <a href=
   "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>, particularly once
   you're ready to release your application and share it with end-users. That document describes the
-  procedure for generating a private key and then using it to sign your .apk file. If you're just
+  procedure for generating a private key and then using it to sign your APK file. If you're just
   getting started, however, you can quickly run your applications on an emulator or your own
   development device by building in debug mode.</p>
 
   <p>If you don't have <a href="http://www.gradle.org/">Gradle</a>, you can obtain it from the <a href="http://gradle.org/">Gradle
-  home page</a>. Install it and make sure it is in your executable PATH. Before calling Ant, you
+  home page</a>. Install it and make sure it is in your executable PATH. Before calling Gradle, you
   need to declare the JAVA_HOME environment variable to specify the path to where the JDK is
   installed.</p>
 
-  <p class="note"><strong>Note:</strong> When installing JDK on Windows, the default is to install
-  in the "Program Files" directory. This location will cause <code>ant</code> to fail, because of
-  the space. To fix the problem, you can specify the JAVA_HOME variable like this:
+  <p class="note"><strong>Note:</strong> When using <code>ant</code> and installing JDK on Windows,
+  the default is to install in the "Program Files" directory. This location will cause
+  <code>ant</code> to fail, because of the space. To fix the problem, you can specify the JAVA_HOME
+  variable like this:
   <pre>set JAVA_HOME=c:\Progra~1\Java\&lt;jdkdir&gt;</pre>
 
   <p>The easiest solution, however, is to install JDK in a non-space directory, for example:</p>
diff --git a/docs/html/tools/building/multidex.jd b/docs/html/tools/building/multidex.jd
index 49cde8c..e441a7c 100644
--- a/docs/html/tools/building/multidex.jd
+++ b/docs/html/tools/building/multidex.jd
@@ -415,30 +415,40 @@
 <h2 id="testing">Testing Multidex Apps</h2>
 
 <p>
-  Testing apps that use multidex configuration require some additional steps and configuration.
-  Since the location of code for classes is not within a single DEX file, instrumentation tests do
-  not run properly unless configured for multidex.
+  When using instrumentation tests with multidex apps, additional configuration is required to
+  enable the test instrumentation. Because the location of code for classes in multidex apps is not
+  within a single DEX file, instrumentation tests do not run properly unless configured for
+  multidex.
 </p>
 
 <p>
-  When testing a multidex app with instrumentation tests, use
+  To test a multidex app with instrumentation tests, configure the
   <a href="{@docRoot}reference/com/android/test/runner/MultiDexTestRunner.html">
   MultiDexTestRunner</a> from the multidex testing support library. The following sample
-  {@code build.gradle} file, demonstrates how to configure your build to use this test runner:
+  {@code build.gradle} file demonstrates how to configure your build to use this test runner:
 </p>
 
 <pre>
 android {
   defaultConfig {
       ...
-      testInstrumentationRunner "android.support.multidex.MultiDexTestRunner"
+      testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
   }
 }
+</pre>
 
+<p class="note">
+  <strong>Note:</strong> With Android Plugin for Gradle versions lower than 1.1, you need to add
+  the following dependency for <code>multidex-instrumentation</code>:
+<pre>
 dependencies {
-    androidTestCompile 'com.android.support:multidex-instrumentation:1.0.0'
+    androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') {
+         exclude group: 'com.android.support', module: 'multidex'
+    }       
 }
 </pre>
+</p>
+
 
 <p>
   You may use the instrumentation test runner class directly or extend it to fit your testing
@@ -455,4 +465,4 @@
 
 <p class="note">
   <strong>Note:</strong> Use of multidex for creating a test APK is not currently supported.
-</p>
\ No newline at end of file
+</p>
diff --git a/docs/html/tools/debugging/annotations.jd b/docs/html/tools/debugging/annotations.jd
new file mode 100644
index 0000000..fe9f9cc
--- /dev/null
+++ b/docs/html/tools/debugging/annotations.jd
@@ -0,0 +1,241 @@
+page.title=Improving Code Inspection with Annotations
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#adding-nullness">Adding Nullness Annotations</a></li>
+      <li><a href="#res-annotations">Adding Resource Annotation</a></li>
+      <li><a href="#enum-annotations">Creating Enumerated Annotations</a></li>
+    </ol>
+
+  <h2>See also</h2>
+  <ol>
+     <li><a href="{@docRoot}tools/help/lint.html">lint (reference)</a></li>
+     <li><a href="{@docRoot}tools/debugging/improving-w-lint.html">Improving Your Code with lint</a></li>
+     <li><a href="{@docRoot}tools/studio/index.html#annotations">Annotations in Android Studio</a></li>
+  </ol>
+
+</div>
+</div>
+
+<p>Using code inspections tools such as <a href="{@docRoot}tools/help/lint.html">lint</a> can help
+you find problems and improve your code, but inspection tools can only infer so much. Android
+resource ids, for example, use an {@code int} to identify strings, graphics, colors and other
+resource types, so inspection tools cannot tell when you have specified a string resource where
+you should have specified a color. This situation means that your app may render incorrectly or
+fail to run at all, even if you use code inspection. </p>
+
+<p>Annotations allow you to provide hints to code inspections tools like {@code lint}, to help
+detect these, more subtle code problems. They are added as metadata tags that you attach to
+variables, parameters, and return values to inspect method return values, passed parameters, and
+local variables and fields. When used with code inspections tools, annotations can help you detect
+problems, such as null pointer exceptions and resource type
+conflicts. </p>
+
+<p>For more information on enabling <a href="{@docRoot}tools/help/lint.html">lint</a> inspections
+and running <a href="{@docRoot}tools/help/lint.html">lint</a>,
+see <a href="{@docRoot}tools/debugging/improving-w-lint.html">Improving Your Code with lint</a>.</p>
+
+<p>Android supports a variety of annotations for insertion in the methods, parameters, and return
+values in your code, for example:</p>
+
+<dl>
+    <dt>{@link android.support.annotation.Nullable @Nullable}</dt>
+    <dd>Can be null.</dd>
+
+    <dt>{@link android.support.annotation.NonNull @NonNull}</dt>
+    <dd>Cannot be null.</dd>
+
+    <dt>{@link android.support.annotation.StringRes @StringRes}</dt>
+    <dd>References a <a href="{@docRoot}reference/android/R.string.html"><code>R.string</code></a>
+    resource.</dd>
+
+    <dt>{@link android.support.annotation.DrawableRes @DrawableRes}</dt>
+    <dd>References a
+    <a href="{@docRoot}guide/topics/resources/drawable-resource.html"><code>Drawable</code></a>
+    resource. </dd>
+
+    <dt>{@link android.support.annotation.ColorRes @ColorRes}</dt>
+    <dd>References a <a href="{@docRoot}reference/android/graphics/Color.html"><code>Color</code></a>
+    resource. </dd>
+
+    <dt>{@link android.support.annotation.InterpolatorRes @InterpolatorRes}</dt>
+    <dd>References a
+    <a href="{@docRoot}reference/android/view/animation/Interpolator.html"><code>Interpolator</code></a>
+    resource. </dd>
+
+    <dt>{@link android.support.annotation.AnyRes @AnyRes}</dt>
+    <dd>References any type of <a href="{@docRoot}reference/android/R.html"><code>R.</code></a>
+    resource. </dd>
+  </dl>
+
+<p>For a complete list of the supported annotations, either examine the contents of the
+{@link android.support.annotation Support-Annotations} library or use the
+auto-complete feature to display the available options for the <code>import
+android.support.annotation.</code> statement. The
+<a href="{@docRoot}tools/help/sdk-manager.html"> SDK Manager</a> packages the
+{@link android.support.annotation Support-Annotations} library in the Android Support Repository
+for use with Android Studio and in the Android
+<a href="{@docRoot}tools/support-library/index.html">Support Library</a> for use with other Android
+development tools.</p>
+
+
+<p>To add annotations to your code, first add a dependency to the
+{@link android.support.annotation Support-Annotations} library. In Android Studio,
+add the dependency to your <code>build.gradle</code> file. </p>
+
+<pre>
+dependencies {
+    compile 'com.android.support:support-annotations:22.0.0'
+}
+</pre>
+
+
+<p>The {@link android.support.annotation Support-Annotations} library is decorated with the
+supported annotations so using this library's methods and resources automatically checks the code
+for potential problems.</p>
+
+<p>If you include annotations in a library and use the
+<a href="{@docRoot}tools/building/plugin-for-gradle.html"><code>Android Plugin for Gradle</code></a>
+to build an Android ARchive (AAR) artifact of that library, the annotations are included as part
+of the artifact in XML format in the <code>annotations.zip</code> file. </p>
+
+<p>To start a code inspection from Android Studio, which includes validating annotations and
+automatic <a href="{@docRoot}tools/help/lint.html">lint</a> checking, select
+<strong>Analyze > Inspect Code</strong> from the menu options. Android Studio displays conflict
+messages throughout the code to indication annotation conflicts and suggest possible
+resolutions.</p>
+
+
+<h2 id="adding-nullness">Adding Nullness Annotations</h2>
+<p>Add {@link android.support.annotation.Nullable @Nullable} and
+{@link android.support.annotation.NonNull @NonNull} annotations to check
+the nullness of a given variable, parameter, or return value. For example, if a local variable
+that contains a null value is passed as a parameter to a method with the
+{@link android.support.annotation.NonNull @NonNull} annotation
+attached to that parameter, building the code generates a warning indicating a non-null conflict. </p>
+
+<p>This example attaches the {@link android.support.annotation.NonNull @NonNull} annotation to
+the <code>context</code> and <code>attrs</code> parameters to check that the passed parameter
+values are not null. </p>
+
+<pre>
+import android.support.annotation.NonNull;
+...
+
+    /** Add support for inflating the &lt;fragment&gt; tag. */
+    &#64;NonNull
+    &#64;Override
+    public View onCreateView(String name, &#64;NonNull Context context,
+      &#64;NonNull AttributeSet attrs) {
+      ...
+      }
+...
+</pre>
+
+<p class="note"><strong>Note:</strong> Android Studio supports running a nullability analysis to
+automatically infer and insert nullness annotations in your code. For more information about
+inferring nullability in Android Studio, see
+<a href="{@docRoot}tools/studio/index.html#annotations">Annotations in Android Studio</a>. </p>
+
+
+<h2 id="res-annotations">Adding Resource Annotations</h2>
+<p>Add {@link android.support.annotation.StringRes @StringRes} annotations to check that
+a resource parameter contains a
+<a href="{@docRoot}reference/android/R.string.html"><code>R.string</code></a>
+reference. During code inspection, the annotation generates a warning if a <code>R.string</code>
+reference is not passed in the parameter.</p>
+
+<p>Validating resource types can be useful as Android references to
+<a href="{@docRoot}guide/topics/resources/drawable-resource.html"><code>Drawables</code></a> and
+<a href="{@docRoot}reference/android/R.string.html"><code>R.string</code></a> resources are both
+passed as integers. Code that expects a parameter to reference a <code>Drawable</code> can be passed
+the expected reference type of int, but actually reference a <code>R.string</code></a> resource. </p>
+
+<p>This example attaches the {@link android.support.annotation.StringRes @StringRes}
+annotation to the <code>resId</code> parameter to validate that it is really a string resource.  </p>
+
+<pre>
+import android.support.annotation.StringRes;
+...
+    public abstract void setTitle(&#64;StringRes int resId);
+    ...
+</pre>
+
+
+<p>Annotations for the other resource types, such as
+{@link android.support.annotation.DrawableRes @DrawableRes},
+{@link android.support.annotation.ColorRes @ColorRes}, and
+{@link android.support.annotation.InterpolatorRes @InterpolatorRes} can be added using
+the same annotation format and run during the code inspection.  </p>
+
+
+<h2 id="enum-annotations">Creating Enumerated Annotations</h2>
+<p>Use the {@link android.support.annotation.IntDef @IntDef} and
+{@link android.support.annotation.StringDef @StringDef} annotations
+so you can create enumerated annotations of integer and string sets to validate other types of code
+references, such as passing references to a set of constants. </p>
+
+<p>The following example illustrates the steps to create an enumerated annotation that ensures
+a value passed as a method parameter references one of the defined constants.</p>
+
+<pre>
+import android.support.annotation.IntDef;
+...
+public abstract class ActionBar {
+    ...
+    //Define the list of accepted constants
+    &#64;IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
+
+    //Tell the compiler not to store annotation data in the <code>.class</code> file
+    &#64;Retention(RetentionPolicy.SOURCE)
+
+    //Declare the <code>NavigationMode</code> annotation
+    public &#64;interface NavigationMode {}
+
+    //Declare the constants
+    public static final int NAVIGATION_MODE_STANDARD = 0;
+    public static final int NAVIGATION_MODE_LIST = 1;
+    public static final int NAVIGATION_MODE_TABS = 2;
+
+    //Decorate the target methods with the annotation
+    &#64;NavigationMode
+    public abstract int getNavigationMode();
+
+    //Attach the annotation
+    public abstract void setNavigationMode(&#64;NavigationMode int mode);
+
+</pre>
+
+<p>When you build this code, a warning is generated if the <code>mode</code> parameter does
+not reference one of the defined constants (<code>NAVIGATION_MODE_STANDARD</code>,
+<code>NAVIGATION_MODE_LIST</code>, or <code>NAVIGATION_MODE_TABS</code>).</p>
+
+<p>You can also define an annotation with a <code>flag</code> to check if a parameter
+or return value references a valid pattern. This example creates the
+<code>DisplayOptions</code> annotation with a list of valid <code>DISPLAY_</code> constants. </p>
+
+<pre>
+import android.support.annotation.IntDef;
+...
+
+&#64;IntDef(flag=true, value={
+        DISPLAY_USE_LOGO,
+        DISPLAY_SHOW_HOME,
+        DISPLAY_HOME_AS_UP,
+        DISPLAY_SHOW_TITLE,
+        DISPLAY_SHOW_CUSTOM
+})
+&#64;Retention(RetentionPolicy.SOURCE)
+public &#64;interface DisplayOptions {}
+
+...
+</pre>
+
+<p>When you build code with an annotation flag, a warning is generated if the decorated parameter
+or return value does not reference a valid pattern.</p>
+
+
diff --git a/docs/html/tools/debugging/improving-w-lint.jd b/docs/html/tools/debugging/improving-w-lint.jd
index ff94b7f..8f74f46 100644
--- a/docs/html/tools/debugging/improving-w-lint.jd
+++ b/docs/html/tools/debugging/improving-w-lint.jd
@@ -22,6 +22,7 @@
       <h2>See Also</h2>
           <ol>
               <li><a href="{@docRoot}tools/help/lint.html">lint (reference)</a></li>
+              <li><a href="{@docRoot}tools/degugging/annotations.html">Using Android Annotations</a></li>
           </ol>
     </div>
 </div>
diff --git a/docs/html/tools/projects/templates.jd b/docs/html/tools/projects/templates.jd
index 966d25f..002e2c5 100644
--- a/docs/html/tools/projects/templates.jd
+++ b/docs/html/tools/projects/templates.jd
@@ -1,4 +1,7 @@
 page.title=Using Code Templates
+page.image=images/cards/card-using-code-templates_16x9_2x.png
+page.metaDescription=Quickly create Android app projects with various UI or functional components. 
+page.tags=studio,templates,firstapp
 @jd:body
 
   <div id="qv-wrapper">
@@ -26,7 +29,7 @@
     </div>
   </div>
 
-
+<img style="float:right" src="{@docRoot}images/cards/card-using-code-templates_16x9_2x.png">
 <p>The SDK tools provide templates for quickly creating Android application projects with the basic
   structure or for adding components to your existing application modules. The code templates
   provided by the Android SDK follow the Android design and development guidelines to get you on the
diff --git a/docs/html/tools/revisions/studio.jd b/docs/html/tools/revisions/studio.jd
index 4f153e3..f530a5f 100644
--- a/docs/html/tools/revisions/studio.jd
+++ b/docs/html/tools/revisions/studio.jd
@@ -50,7 +50,7 @@
     <p>Various fixes and enhancements:</p>
     <ul>
       <li>Updated the Android runtime window to include the
-        <a href="{@docRoot}tools/studio/index.html#memory-monitor">Memory Monitor</a> tool
+        <a href="{@docRoot}tools/studio/index.html#mem-cpu">Memory Monitor</a> tool
         and added a tab for CPU performance monitoring.</li>
       <li>Added a <em>Captures</em> tab in the left margin to display the captured memory and CPU
         performance data files, such as CPU method tracking and memory heap snapshots.</li>
diff --git a/docs/html/tools/sdk/tools-notes.jd b/docs/html/tools/sdk/tools-notes.jd
index 47b603a..434dc44 100644
--- a/docs/html/tools/sdk/tools-notes.jd
+++ b/docs/html/tools/sdk/tools-notes.jd
@@ -24,6 +24,33 @@
 <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=""/>SDK Tools, Revision 24.2.0</a> <em>(May 2015)</em>
+  </p>
+
+  <div class="toggle-content-toggleme">
+
+    <dl>
+    <dt>Dependencies:</dt>
+
+    <dd>
+      <ul>
+        <li>Android SDK Platform-tools revision 19 or later.</li>
+      </ul>
+    </dd>
+
+    <dt>General Notes:</dt>
+    <dd>
+      <ul>
+        <li>Fixed several minor emulator issues.</li>
+      </ul>
+    </dd>
+  </div>
+</div>
+
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
       alt=""/>SDK Tools, Revision 24.1.2</a> <em>(February 2015)</em>
   </p>
 
diff --git a/docs/html/tools/studio/index.jd b/docs/html/tools/studio/index.jd
index 360b863..e7de000 100644
--- a/docs/html/tools/studio/index.jd
+++ b/docs/html/tools/studio/index.jd
@@ -1,4 +1,7 @@
 page.title=Android Studio Overview
+page.image=images/cards/card-android-studio-overview_16x9_2x.jpg
+page.metaDescription=Learn about the official IDE for Android.
+page.tags=studio,sdk,tools,firstapp
 @jd:body
 
 <div id="qv-wrapper">
@@ -18,7 +21,7 @@
 
   <h2>See also</h2>
   <ol>
-    <li><a href="http://confluence.jetbrains.com/display/IntelliJIDEA/FAQ+on+Migrating+to+IntelliJ+IDEA">IntelliJ FAQ on migrating to IntelliJ IDEA</a></li>
+    <li><a class="external-link" href="http://confluence.jetbrains.com/display/IntelliJIDEA/FAQ+on+Migrating+to+IntelliJ+IDEA">IntelliJ FAQ on migrating to IntelliJ IDEA</a></li>
   </ol>
 
 </div>
@@ -26,8 +29,7 @@
 
 
 <p>Android Studio is the official IDE for Android application development,
-based on <a href="https://www.jetbrains.com/idea/" class="external-link"
-target="_blank">IntelliJ IDEA</a>.
+based on <a class="external-link" href="https://www.jetbrains.com/idea/" target="_blank">IntelliJ IDEA</a>.
 On top of the capabilities you expect from IntelliJ,
 Android Studio offers:</p>
 
@@ -38,10 +40,9 @@
   <li>Rich layout editor with support for drag and drop theme editing</li>
   <li>{@code lint} tools to catch performance, usability, version compatibility, and other problems</li>
   <li>ProGuard and app-signing capabilities</li>
-  <li>Built-in support for <a
-  href="http://developers.google.com/cloud/devtools/android_studio_templates/"
-  class="external-link">Google Cloud Platform</a>, making it easy to integrate Google Cloud
-  Messaging and App Engine</li>
+  <li>Built-in support for
+  <a href="http://developers.google.com/cloud/devtools/android_studio_templates/">Google Cloud Platform</a>,
+  making it easy to integrate Google Cloud Messaging and App Engine</li>
   <li>And much more</li>
 </ul>
 
@@ -55,24 +56,25 @@
 "{@docRoot}tools/workflow/index.html">Workflow</a> section, such as <a href=
 "{@docRoot}tools/projects/projects-studio.html">Managing Projects from Android Studio</a> and
 <a href="{@docRoot}tools/building/building-studio.html">Building and Running from Android
-Studio</a>.</p>
+Studio</a>. For a summary of the latest changes to Android Studio, see the
+<a href="{@docRoot}tools/revisions/studio.html">Android Studio Release Notes</a>.</p>
 
 
 
 
 <h2 id="project-structure">Project and File Structure</h2>
 
-<h3 id="project-view"><em>Android</em> Project View</h3>
-<p>By default, Android Studio displays your profile files in the <em>Android</em> project view. This
+<h3 id="project-view"><em>Android</em> project view</h3>
+<p>By default, Android Studio displays your project files in the <em>Android</em> project view. This
 view shows a flattened version of your project's structure that provides quick access to the key
 source files of Android projects and helps you work with the
 <a href="{@docRoot}sdk/installing/studio-build.html">Gradle-based build system</a>.
-The Android project view:</p>
+The <em>Android</em> project view:</p>
 
 <ul>
-  <li>Groups the build files for all modules at the top level of the project hierarchy.</li>
   <li>Shows the most important source directories at the top level of the module hierarchy.</li>
-  <li>Groups all the manifest files for each module.</li>
+  <li>Groups the build files for all modules in a common folder.</li>
+  <li>Groups all the manifest files for each module in a common folder.</li>
   <li>Shows resource files from all Gradle source sets.</li>
   <li>Groups resource files for different locales, orientations, and screen types in a single
   group per resource type.</li>
@@ -81,7 +83,7 @@
      <img src="{@docRoot}images/tools/projectview01.png" />
      <p class="img-caption"><strong>Figure 1.</strong> Show the Android project view.</p>
      <img src="{@docRoot}images/tools/studio-projectview_scripts.png"  />
-     <p class="img-caption"><strong>Figure 2.</strong> Project Build Files.</p>
+     <p class="img-caption"><strong>Figure 2.</strong> Show project build Files.</p>
 
 <p>The <em>Android</em> project view shows all the build files at the top level of the project
 hierarchy under <strong>Gradle Scripts</strong>. Each project module appears as a folder at the
@@ -91,18 +93,19 @@
   <li><code>java/</code> - Source files for the module.</li>
   <li><code>manifests/</code> - Manifest files for the module.</li>
   <li><code>res/</code> - Resource files for the module.</li>
+  <li><code>Gradle Scripts/</code> - Gradle build and property files.</li>
 </ul>
 
 <p>For example, <em>Android</em> project view groups all the instances of the
 <code>ic_launcher.png</code> resource for different screen densities under the same element.</p>
 
 <p class="note"><strong>Note:</strong> The project structure on disk differs from this flattened
-representation. To switch to back to the segregated project view, select <strong>Project</strong> from
-the <strong>Project</strong> drop-down. </p>
+representation. To switch to back to the segregated project view, select <strong>Project</strong>
+from the <strong>Project</strong> drop-down. </p>
 
 
-<h3>Android Studio Project and Directory Structure</h3>
-<p>When you use the <em>Project</em> view of a new project in Android Studio, you
+<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
 instance of Android Studio contains a project with one or more application modules. Each
 application module folder contains the complete source sets for that module, including
@@ -112,11 +115,28 @@
 specification and the files under {@code src/androidTest} directory for test case creation.
 
     <p>  <img src="{@docRoot}images/tools/studio-project-layout.png" alt="" /></p>
-    <p>  <class="img-caption"><strong>Figure 3.</strong> Android Studio project structure</p>
+    <p>  <class="img-caption"><strong>Figure 3.</strong> View Android Studio <em>Project</em>
+         structure.</p>
+
+<p>You can also customize the view of the project files to focus on specific aspects of your app
+development: </p>
+
+<ul>
+  <li><em>Packages</em> </li>
+  <li><em>Project Files</em> </li>
+  <li><em>Scratches</em> </li>
+  <li><em>Problems</em> </li>
+  <li><em>Production</em> </li>
+  <li><em>Tests</em> </li>
+</ul>
+
+<p>For example, selecting the <strong>Problems</strong> view of your project displays links to the
+source files containing any recognized coding and syntax errors, such as missing a XML element
+closing tag in a layout file.<p>
 
 <p>For more information, see
-<a href="http://confluence.jetbrains.com/display/IntelliJIDEA/Project+Organization"class="external-link">IntelliJ project organization</a> and
-<a href="{@docRoot}tools/projects/index.html">Managing Projects</a>.</p>
+<a class="external-link" href="http://confluence.jetbrains.com/display/IntelliJIDEA/Project+Organization">IntelliJ project organization</a>
+and <a href="{@docRoot}tools/projects/index.html">Managing Projects</a>.</p>
 
 
 
@@ -155,7 +175,7 @@
 <a href="{@docRoot}tools/building/configuring-gradle.html">Configuring Gradle Builds</a>.</p>
 
 
-<h3>Application ID for Package Identification </h3>
+<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.
@@ -209,7 +229,7 @@
    <pre>
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-   <strong>package="com.example.app"</strong>>
+   <strong>package="com.example.app"</strong>
    </pre>
 
 <p class="note"><strong>Note:</strong> If you have multiple manifests (for example, a product
@@ -242,25 +262,53 @@
 <p>For more information, see <a href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs</a>.</p>
 
 
+<h3 id="inline-debug">Inline debugging</h3>
+<p>Use inline debugging to enhance your code walk-throughs in the debugger view
+with inline verification of references, expressions, and variable values. Inline debug information
+includes: </p>
+<ul>
+ <li>Inline variable values</li>
+ <li>Referring objects that reference a selected object </li>
+ <li>Method return values</li>
+ <li>Lambda and operator expressions</li>
+ <li>Tool tip values</li>
+</ul>
 
-<h3 id="memory-monitor">Memory Monitor</h3>
-<p>Android Studio provides a memory monitor view so you can more easily monitor your
-app's memory usage to find deallocated objects, locate memory leaks and track the amount of
-memory the connected device is using. With your app running on a device or emulator, click the
-<strong>Memory Monitor</strong> tab in the lower right corner to launch the memory monitor. </p>
+<p>To enable inline debugging, in the <em>Debug</em> window click the Settings icon
+<img src="{@docRoot}images/tools/studio-debug-settings-icon.png"/> and select the
+check box for <strong>Show Values In Editor</strong>.</p>
 
-    <img src="{@docRoot}images/tools/studio-memory-monitor.png" />
-    <p class="img-caption"><strong>Figure 5.</strong> Memory Monitor</p>
+<h3 id="mem-cpu">Memory and CPU monitor</h3>
+<p>Android Studio provides a memory and CPU monitor view so you can more easily monitor your
+app's performance and memory usage to track CPU usage, find deallocated objects, locate memory
+leaks, and track the amount of memory the connected device is using. With your app running on a
+device or emulator, click the <strong>Android</strong> tab in the lower left corner of the
+runtime window to launch the Android runtime window. Click the <strong>Memory</strong> or
+<strong>CPU</strong> tab. </p>
+
+<img src="{@docRoot}images/tools/studio-memory-monitor.png" srcset="{@docRoot}images/tools/studio-memory-monitor_2x.png 2x" width"635" height="171" alt="" />
+    <p class="img-caption"><strong>Figure 4.</strong> Monitor memory and CPU usage.</p>
 
 
+<h3>Data file access</h3>
+<p>The Android SDK tools, such as <a href="{@docRoot}tools/help/systrace.html">Systrace</a>,
+<a href="{@docRoot}tools/help/logcat.html">logcat</a>, and
+<a href="{@docRoot}tools/help/traceview.html">Traceview</a>, generate performance and debugging
+data for detailed app analysis.</p>
 
-<h3>Code Inspections</h3>
-<p>In Android Studio, the configured <a href="{@docRoot}tools/help/lint.html"><code>lint</code></a> and
-other IDE inspections run automatically whenever you compile your program. In addition to the
+<p>To view the available generated data files, click <strong>Captures</strong> in the left
+corner of the runtime window. In the list of the generated files, double-click a file to view
+the data. Right-click any <code>.hprof</code> files to convert them to a standard
+<a href="{@docRoot}tools/help/hprof-conv.html"><code>.hprof</code> </a> file format.</p>
+
+
+<h3>Code inspections</h3>
+<p>In Android Studio, the configured <a href="{@docRoot}tools/help/lint.html"><code>lint</code></a>
+and other IDE inspections run automatically whenever you compile your program. In addition to the
 configured {@code lint} checks, additional
-<a href="https://www.jetbrains.com/idea/help/inspection-basics.html?search=inspection" class="external-link"
-target="_blank">IntelliJ code inspections</a>
-run to streamline code review.</p>
+<a class="external-link" href="https://www.jetbrains.com/idea/help/inspection-basics.html?search=inspection"
+target="_blank">IntelliJ code inspections</a> and annotation validation run to streamline code
+review.</p>
 
 
 <p>Android Studio enables several <code>lint</code> checks
@@ -268,10 +316,10 @@
 <ul>
   <li><code> Cipher.getInstance()</code> is used with safe values</li>
   <li>In custom Views, the associated declare-styleable for the custom view uses the same
-  base name as the class name.</li>
-  <li>Security check for fragment injection.</li>
-  <li>Where ever property assignment no longer works as expected.</li>
-  <li>Gradle plugin version is compatible with the SDK.</li>
+  base name as the class name</li>
+  <li>Security check for fragment injection</li>
+  <li>Where ever property assignment no longer works as expected</li>
+  <li>Gradle plugin version is compatible with the SDK</li>
   <li>Right to left validation </li>
   <li>Required API version</li>
   <li>many others</li>
@@ -301,13 +349,13 @@
 
 
 <p>You can also manage inspection profiles and configure inspections within Android Studio.
-Choose <strong>File &gt; Settings &gt; Project Settings</strong>. The
-<em>Inspection Configuration</em> page appears with the supported inspections.</p>
+Choose <strong>File &gt; Settings &gt; Project Settings</strong> and expand <strong>Editor</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> Inspection Configuration</p> 
+<p class="img-caption"><strong>Figure 5.</strong> Configure inspections.</p>
 
-<p class="note"><strong>Note:</strong> If you wish to change the behavior of specific
-inspection notifications, you can change the inspection severity, for example from <em>warning</em>
+<p class="note"><strong>Note:</strong> To change the behavior of specific
+inspection notifications, change the inspection severity, for example from <em>warning</em>
 to <em>error</em>. </p>
 
 
@@ -316,7 +364,7 @@
 
 
 
-<h4>Running Inspections from the command line</h4>
+<h4>Running inspections from the command line</h4>
 <p>You can also run {@code lint} inspections from the command line in your SDK directory. </p>
 <pre>
 sdk$ lint [flags] <project directories>
@@ -327,25 +375,127 @@
 
 
 <p>For more information, see
-<a href="{@docRoot}tools/debugging/improving-w-lint.html">Improving Your Code with {@code lint}</a> and
-<a href="{@docRoot}tools/help/lint.html">lint tool</a>.</p>
+<a href="{@docRoot}tools/debugging/improving-w-lint.html">Improving Your Code with {@code lint}</a>
+and <a href="{@docRoot}tools/help/lint.html">lint tool</a>.</p>
+
+
+
+<h3 id="annotations">Annotations in Android Studio</h3>
+<p>Android Studio supports annotations for variables, parameters, and return values to help you
+catch bugs, such as null pointer exceptions and resource type conflicts. The
+<a href="{@docRoot}tools/help/sdk-manager.html">Android SDK Manager</a> packages
+the {@link android.support.annotation Support-Annotations} library
+in the Android Support Repository for use with Android
+Studio. Android Studio validates the configured annotations during code inspection. </p>
+
+<p>To add annotations to your code in Android Studio, first add a dependency for the
+{@link android.support.annotation Support-Annotations} library:</p>
+<ol>
+ <li>Select <strong>File &gt; Project Structure</strong>.</li>
+ <li>In the <em>Project Structure</em> dialog, select the desired module, click the
+ <strong>Dependencies</strong> tab. </li>
+ <li>Click the <img src="{@docRoot}images/tools/studio-add-icon.png"/> icon to include a
+ <strong>Library dependency</strong>.</li>
+ <li>In the <em>Choose Library Dependency</em> dialog, select <code>support-annotations</code> and
+ click <strong>Ok</strong>. </li>
+</ol> 
+
+<p>The <code>build.gradle</code> file is updated with the <code>support-annotations</code>
+dependency.</p>
+
+<p>You can also manually add this dependency to your <code>build.gradle</code> file, as shown in
+the following example.  </p>
+
+<pre>
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    compile 'com.android.support:appcompat-v7:22.0.0'
+    <strong>compile 'com.android.support:support-annotations:22.0.0'</strong>
+}
+</pre>
+
+
+
+<h4>Inferring nullability</h4>
+<p>A nullability analysis scans the contracts throughout the method hierarchies in your code to
+detect:</p>
+<ul>
+ <li>Calling methods that can return null </li>
+ <li>Methods that should not return null </li>
+ <li>Variables, such as fields, local variables, and parameters, that can be null </li>
+ <li>Variables, such as fields, local variables, and parameters, that cannot hold a null value </li>
+</ul>
+
+<p>The analysis then automatically inserts the appropriate null annotations in the detected
+locations. </p>
+
+<p>To run a nullability analysis in Android Studio,
+select the <strong>Analyze &gt; Infer Nullity</strong>
+menu option. Android Studio inserts the Android
+{@link android.support.annotation.Nullable @Nullable} and
+{@link android.support.annotation.NonNull @NonNull} annotations in detected locations
+in your code. After running a null analysis, it's good practice to verify the injected
+annotations.</p>
+
+<p class="note"><strong>Note:</strong> The nullability analysis may insert the IntelliJ
+<a class="external-link" href="https://www.jetbrains.com/idea/help/-nullable-and-notnull-annotations.html?search=annotations">
+<code>&#64;Nullable</code></a> and
+<a class="external-link" href="https://www.jetbrains.com/idea/help/-nullable-and-notnull-annotations.html?search=annotations">
+<code>&#64;NotNull</code></a> annotations instead of the Android null annotations. When running
+a null analysis, manually search and replace any IntelliJ annotations or include
+<code>com.intellij:annotations:12.0</code> as a compile dependency in your
+<code>build.gradle</code> file. This example includes the IntelliJ annotations 12.0 library as a
+dependency in the <code>build.gradle</code> file:
+
+<pre>
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    compile 'com.android.support:appcompat-v7:22.0.0'
+    compile 'com.android.support:support-annotations:22.0.0'
+    <strong>compile 'com.intellij:annotations:12.0'</strong>
+}
+</pre>
+
+</p>
+
+
+<h4>Validating annotations</h4>
+<p>You can also manually add nullability, resource, and enumerated annotations throughout your code
+to perform validations for a variety of reference values, such as
+<a href="{@docRoot}reference/android/R.string.html"><code>R.string</code></a> resources,
+<a href="{@docRoot}guide/topics/resources/drawable-resource.htm"><code>Drawable</code></a>
+resources,
+<a href="{@docRoot}reference/android/graphics/Color.html"><code>Color</code></a> resources,
+and enumerated constants. </p>
+
+<p>Run <strong>Analyze &gt; Inspect Code</strong> to validate the configured annotations. </p>
+
+<p>For a complete list of the supported annotations, either use the auto-complete feature to display
+the available options for the <code>import android.support.annotation.</code> statement or
+view the contents of the
+{@link android.support.annotation Support-Annotations}
+library. </p>
+
+<p>For more details about Android annotations, see
+<a href="{@docRoot}tools/debugging/annotations.html">Improving Code Inspection with Annotations</a>.
+
 
 
 <h3>Dynamic layout preview</h3>
 <p>Android Studio allows you to work with layouts in both a <em>Design View</em> </p>
 <p><img src="{@docRoot}images/tools/studio-helloworld-design.png" alt="" />
 </p>
-    <p class="img-caption"><strong>Figure 6.</strong> Hello World App with Design View</p>
+    <p class="img-caption"><strong>Figure 6.</strong> Hello World App with Design View.</p>
 
 <p>and a <em>Text View</em>. </p>
 
     <p><img src="{@docRoot}images/tools/studio-helloworld-text.png" alt="" />
-    <pclass="img-caption"><strong>Figure 7.</strong> Hello World App with Text View</p>
+    <pclass="img-caption"><strong>Figure 7.</strong> Hello World App with text view.</p>
 
 <p>Easily select and preview layout changes for different device images, display
 densities, UI modes, locales, and Android versions (multi-API version rendering).
     <p><img src="{@docRoot}images/tools/studio-api-version-rendering.png" /></p>
-    <p class="img-caption"><strong>Figure 8.</strong> API Version Rendering</p>
+    <p class="img-caption"><strong>Figure 8.</strong> Multi-API version rendering.</p>
 
 
 <p>From the Design View, you can drag and drop elements from the Palette to the Preview or
@@ -372,17 +522,17 @@
 <h2 id="install-updates">Installation, Setup, and Update Management</h2>
 
 <h3>Android Studio installation and setup wizards</h3>
-<p>An updated installation and setup wizards walk 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>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>An updated setup wizard walks you through the setup processes as
+<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> Setup Wizard</p>
+<p class="img-caption"><strong>Figure 9.</strong> Installation and setup wizard.</p>
 
 
 <h3>Expanded template and form factor support</h3>
@@ -390,11 +540,11 @@
 types. </p>
 
     <h4> Android Wear and TV support</h4>
-    <p>For easy cross-platform development, the Project Wizard provides new templates for
+    <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 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>
 
@@ -404,7 +554,26 @@
     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> Setup Wizard</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>
 
 
 
@@ -451,13 +620,14 @@
 <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; IDE Setting -- HTTP Proxy</strong>.
+ <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 
+     <li>On Windows and Linux, choose
      <strong>File &gt; Settings &gt; IDE Setting -- HTTP Proxy</strong>. </li>
-     <li>On Mac, choose 
+     <li>On Mac, choose
      <strong>Android Studio &gt; Preferences &gt; IDE Setting -- HTTP Proxy</strong>. </li>
    </ul>
  The HTTP Proxy page appears.</li>
@@ -544,36 +714,36 @@
 
 <h2 id="other">Other Highlights</h2>
 
-<h3> Translation Editor</h3>
-<p>Multi-language support is enhanced with the Translation Editor plugin so you can easily add
-locales to the app's translation file. Color codes indicate whether a locale is complete or
-still missing string translations. Also, you can use the plugin to export your strings to the
-Google Play Developer Console for translation, then download and import your translations back
-into your project. </p>
+<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 Translation Editor, open a <code>strings.xml</code> file and click the
+<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> Translation Editor</p>
+    <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 &lt;ripple&gt;
-and &lt;animated-selector&gt;, are supported.</p>
+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>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> Code Sample Access</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>
+    <p class="img-caption"><strong>Figure 14.</strong> Imported code sample.</p>
 
 
diff --git a/docs/html/tools/support-library/index.jd b/docs/html/tools/support-library/index.jd
index 1aef0c1..98c9ad5 100644
--- a/docs/html/tools/support-library/index.jd
+++ b/docs/html/tools/support-library/index.jd
@@ -1322,3 +1322,4 @@
       <p>Initial release with the v4 library.</p>
   </div>
 </div>
+
diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs
index 3f4b111..88a2674 100644
--- a/docs/html/tools/tools_toc.cs
+++ b/docs/html/tools/tools_toc.cs
@@ -128,6 +128,7 @@
       <li><a href="<?cs var:toroot ?>tools/debugging/improving-w-lint.html"><span class="en">Improving Your Code with lint</span></a></li>
       <li><a href="<?cs var:toroot ?>tools/debugging/debugging-ui.html"><span class="en">Optimizing your UI</span></a></li>
       <li><a href="<?cs var:toroot ?>tools/debugging/debugging-tracing.html"><span class="en">Profiling with Traceview and dmtracedump</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/debugging/annotations.html"><span class="en">Improving Code Inspection with Annotations</span></a></li>
       <li><a href="<?cs var:toroot ?>tools/debugging/systrace.html"><span class="en">Analyzing Display and Performance</span></a></li>
       <li><a href="<?cs var:toroot ?>tools/debugging/debugging-memory.html">Investigating Your RAM Usage</a></li>
       <li><a href="<?cs var:toroot ?>tools/debugging/debugging-devtools.html"><span class="en">Using the Dev Tools App</span></a></li>
diff --git a/docs/html/training/articles/keystore.jd b/docs/html/training/articles/keystore.jd
index 217db81..fea3b2c 100644
--- a/docs/html/training/articles/keystore.jd
+++ b/docs/html/training/articles/keystore.jd
@@ -129,7 +129,7 @@
   for use as soon as the user unlocks the secure lock screen or confirms their secure lock screen
   credentials using the {@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(CharSequence, CharSequence) KeyguardManager.createConfirmDeviceCredentialIntent}
   flow. Each key specifies for how long the authorization remains valid for that key. Such keys
-  can only be generated or imported if the secure lock screen is enabled (see {@link android.app.KeyguardManager#isKeyguardSecure Keyguard.isKeyguardSecure}).
+  can only be generated or imported if the secure lock screen is enabled (see {@link android.app.KeyguardManager#isDeviceSecure()}).
   These keys become permanently invalidated once the secure lock screen is disabled or forcibly
   reset (e.g. by a Device Admin).</li>
 <li>User authentication is required for every use of the key. In this mode, a specific operation
diff --git a/docs/html/training/building-wearables.jd b/docs/html/training/building-wearables.jd
index 8015d0c..c9e1856 100644
--- a/docs/html/training/building-wearables.jd
+++ b/docs/html/training/building-wearables.jd
@@ -1,6 +1,6 @@
 page.title=Building Apps for Wearables
 page.trainingcourse=true
-page.image=wear/images/notifications.png
+page.image=images/cards/android-wear-apps_2x.jpg
 page.metaDescription=Learn how to build notifications, send and sync data, and use voice actions.
 
 @jd:body
@@ -11,4 +11,4 @@
 
 <p class="note"><strong>Note:</strong> For more information about the APIs used in these training
 classes, see the <a href="{@docRoot}reference/packages-wearable-support.html">Wear API reference
-documentation</a>.</p>
\ No newline at end of file
+documentation</a>.</p>
diff --git a/docs/html/training/material/index.jd b/docs/html/training/material/index.jd
index 4eb7911..6071fb1 100644
--- a/docs/html/training/material/index.jd
+++ b/docs/html/training/material/index.jd
@@ -1,6 +1,6 @@
-page.title=Creating Apps with Material Design
+page.title=Material Design for Developers
 page.type=design
-page.image=images/material.png
+page.image=images/cards/material_2x.png
 page.metaDescription=Learn how to apply material design to your apps.
 
 
diff --git a/docs/html/training/swipe/add-swipe-interface.jd b/docs/html/training/swipe/add-swipe-interface.jd
new file mode 100644
index 0000000..ac15caf
--- /dev/null
+++ b/docs/html/training/swipe/add-swipe-interface.jd
@@ -0,0 +1,135 @@
+page.title=Adding Swipe-to-Refresh To Your App
+trainingnavtop=true
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- table of contents -->
+<h2>This lesson teaches you to</h2>
+<ol>
+    <li><a href="#AddSwipeWidget">Add the SwipeRefreshLayout Widget</a>
+    <li><a href="#AddRefreshAction">Add a Refresh Action to the Action Bar</a>
+</ol>
+
+<!-- other docs (NOT javadocs) -->
+<h2>You should also read</h2>
+<ul>
+  <li>
+    <a href=
+    "{@docRoot}guide/topics/ui/accessibility/index.html">Accessibility</a>
+  </li>
+
+  <li>
+    <a href="{@docRoot}training/basics/actionbar/index.html">Adding the Action
+    Bar</a>
+  </li>
+</ul>
+
+<h2>Sample Apps</h2>
+
+<ul>
+    <li><a href="{@docRoot}samples/SwipeRefreshLayoutBasic/index.html">
+            SwipeRefreshLayoutBasic</a></li>
+    <li><a href="{@docRoot}samples/SwipeRefreshListFragment/index.html">
+            SwipeRefreshListFragment</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>
+  The swipe-to-refresh user interface pattern is implemented entirely within
+  the {@link android.support.v4.widget.SwipeRefreshLayout} widget, which
+  detects the vertical swipe, displays a distinctive progress bar, and triggers
+  callback methods in your app. You enable this behavior
+  by adding the widget to your layout file as the parent of a {@link
+  android.widget.ListView} or {@link android.widget.GridView}, and implementing
+  the refresh behavior that gets invoked when the user swipes.
+</p>
+
+<p>
+  This lesson shows you how to add the widget to an existing layout. It also
+  shows you how to add a refresh action to the action bar overflow area, so
+  that users who may be unable to use the swipe gesture can trigger a manual
+  update with an external device.
+</p>
+
+<h2 id="AddSwipeWidget">Add the SwipeRefreshLayout Widget</h2>
+<p>
+  To add the swipe to refresh widget to an existing app, add {@link
+  android.support.v4.widget.SwipeRefreshLayout} as the parent
+  of a single {@link android.widget.ListView} or {@link
+  android.widget.GridView}. Remember that {@link
+  android.support.v4.widget.SwipeRefreshLayout} only supports a single {@link
+  android.widget.ListView} or {@link android.widget.GridView} child.
+</p>
+
+<p>
+  The following example demonstrates how to add the {@link
+  android.support.v4.widget.SwipeRefreshLayout} widget to an existing layout
+  file containing a {@link android.widget.ListView}:
+</p>
+
+<pre>&lt;android.support.v4.widget.SwipeRefreshLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="&#64;+id/swiperefresh"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+
+    &lt;ListView
+        android:id="&#64;android:id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" /&gt;
+
+&lt;/android.support.v4.widget.SwipeRefreshLayout&gt;</pre>
+
+<p>
+  You can also use the {@link android.support.v4.widget.SwipeRefreshLayout}
+  widget with a {@link android.support.v4.app.ListFragment}. If the layout
+  contains a {@link android.widget.ListView} with the ID
+  <code>"@android:id/list"</code>, the swipe-to-refresh functionality is
+  automatically supported. However, explicitly declaring the {@link
+  android.widget.ListView} in this way supersedes the default {@link
+  android.support.v4.app.ListFragment} view structure. If you want to use the
+  default view structure, you will have to override parts of the {@link
+  android.support.v4.widget.SwipeRefreshLayout} and {@link
+  android.support.v4.app.ListFragment} behavior. For an example of how to do
+  this, see the <a href=
+  "{@docRoot}samples/SwipeRefreshListFragment/index.html">SwipeRefreshListFragment</a>
+  sample app.
+</p>
+
+<h2 id="AddRefreshAction">Add a Refresh Action to the Action Bar</h2>
+
+<p>
+  You should add a refresh action to your app's action bar to ensure that
+  users who may not be able to perform a swipe gesture can still trigger a
+  manual update. For example, users with accessibility issues can trigger
+  action bar actions using external devices, such as keyboards and D-pads.
+</p>
+
+<p>
+  You should add the refresh action as a menu item,
+  rather than as a button, by setting the attribute
+  <code>android:showAsAction=never</code>. If you display the action as a
+  button, users may assume that the refresh button action is different from the
+  swipe-to-refresh action. By making the refresh action less conspicuous in the
+  action bar, you can encourage users to perform manual updates with the swipe
+  gesture while still maintaining the accessible option in a place where D-pad
+  users would look for it.
+</p>
+
+<p>
+  The following code demonstrates how to add the swipe-to-refresh action to the
+  overflow area:
+</p>
+
+<pre>&lt;menu xmlns:android="http://schemas.android.com/apk/res/android" &gt;
+    &lt;item
+        android:id="&#64;+id/menu_refresh"
+        android:showAsAction="never"
+        android:title="&#64;string/menu_refresh"/&gt;
+&lt;/menu&gt;</pre>
diff --git a/docs/html/training/swipe/images/swipe.mp4 b/docs/html/training/swipe/images/swipe.mp4
new file mode 100644
index 0000000..cd5c511
--- /dev/null
+++ b/docs/html/training/swipe/images/swipe.mp4
Binary files differ
diff --git a/docs/html/training/swipe/images/swipe_original.mp4 b/docs/html/training/swipe/images/swipe_original.mp4
new file mode 100644
index 0000000..abdf08f
--- /dev/null
+++ b/docs/html/training/swipe/images/swipe_original.mp4
Binary files differ
diff --git a/docs/html/training/swipe/index.jd b/docs/html/training/swipe/index.jd
new file mode 100644
index 0000000..17b4cf7
--- /dev/null
+++ b/docs/html/training/swipe/index.jd
@@ -0,0 +1,91 @@
+page.title=Supporting Swipe-to-Refresh
+trainingnavtop=true
+startpage=true
+
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dependencies and prerequisites</h2>
+<ul>
+  <li>Android 1.6 (API level 4) or later
+  </li>
+
+  <li>Latest version of the Android v4 <a href=
+  "{@docRoot}tools/support-library/index.html">Support Library</a>
+  </li>
+</ul>
+
+<h2>Sample Apps</h2>
+
+<ul>
+    <li><a href="{@docRoot}samples/SwipeRefreshLayoutBasic/index.html">
+            SwipeRefreshLayoutBasic</a></li>
+    <li><a href="{@docRoot}samples/SwipeRefreshListFragment/index.html">
+            SwipeRefreshListFragment</a></li>
+    <li><a href="{@docRoot}samples/SwipeRefreshMultipleViews/index.html">
+            SwipeRefreshMultipleViews</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>
+  Even if your app automatically updates its content on a regular basis, you
+  can allow users to request manual updates as well. For example, a weather
+  forecasting app can allow users get the latest forecasts on demand. To
+  provide a standard user experience for requesting updates, the Android
+  platform includes the swipe-to-refresh design pattern, which allows users
+  to trigger an update with a vertical swipe.
+</p>
+
+<p class="note">
+  <strong>Note:</strong> This class requires the latest version of the Android
+  v4 Support Library APIs. If you have not used the Support Library before,
+  follow the instructions in the <a href=
+  "{@docRoot}tools/support-library/setup.html">Support Library Setup</a>
+  document.
+</p>
+
+<h2>Lessons</h2>
+
+<dl>
+  <dt>
+    <b><a href="add-swipe-interface.html">Adding Swipe-to-Refresh To Your
+    App</a></b>
+  </dt>
+
+  <dd>
+    <div style="width:290px;margin-right:35px;float:right">
+      <div class="framed-nexus5-port-span-5">
+        <video class="play-on-hover" autoplay alt=
+        "When the user performs a swipe gesture, the SwipeRefreshLayout widget displays a progress indicator until your app finishes updating its data.">
+        <!-- Preferred video size 216x384 (portrait) -->
+          <source src="images/swipe.mp4">
+        </video>
+      </div>
+
+      <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+        <em>To replay the movie, click on the device screen</em>
+      </div>
+    </div>
+  </dd>
+
+  <dd>
+    Learn how to provide swipe-to-refresh support in a {@link
+    android.widget.ListView} or {@link android.widget.GridView}, and how to
+    provide an accessible refresh option using the action bar.
+  </dd>
+
+  <dt>
+    <b><a href="respond-refresh-request.html">Responding to a Refresh
+    Request</a></b>
+  </dt>
+
+  <dd>
+    Learn how to respond to the swipe-to-refresh gesture, and how to perform the
+    same update from an action bar action.
+  </dd>
+</dl>
diff --git a/docs/html/training/swipe/respond-refresh-request.jd b/docs/html/training/swipe/respond-refresh-request.jd
new file mode 100644
index 0000000..243b4a3
--- /dev/null
+++ b/docs/html/training/swipe/respond-refresh-request.jd
@@ -0,0 +1,158 @@
+page.title=Responding to a Refresh Request
+
+trainingnavtop=true
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- table of contents -->
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#RespondRefresh">Respond to the Refresh Gesture</a></li>
+  <li><a href="#RespondAction">Respond to the Refresh Action</a>
+</ol>
+
+<h2>Sample App</h2>
+
+<ul>
+    <li><a href="{@docRoot}samples/SwipeRefreshLayoutBasic/index.html">
+            SwipeRefreshLayoutBasic</a></li>
+</ul>
+
+
+</div>
+</div>
+
+<p>
+  This lesson shows you how to update your app when the user requests a manual
+  refresh, whether the user triggers the refresh with a swipe gesture or by
+  using the action bar refresh action.
+</p>
+
+<h2 id="RespondRefresh">Respond to the Refresh Gesture</h2>
+
+<p>
+  When the user makes a swipe gesture, the system displays the progress
+  indicator and calls your app's callback method. Your callback method is
+  responsible for actually updating the app's data.
+</p>
+
+<p>
+  To respond to the refresh gesture in your app, implement the {@link
+  android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener} interface and
+  its {@link
+  android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener#onRefresh
+  onRefresh()} method. The {@link
+  android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener#onRefresh
+  onRefresh()} method is invoked when the user performs a swipe gesture.
+</p>
+
+<p>
+  You should put the code for the actual update
+  operation in a separate method, and call that update method from your {@link
+  android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener#onRefresh
+  onRefresh()} implementation. That way, you can use the same update method to
+  perform the update when the user triggers a refresh from the action bar.
+</p>
+
+<p>
+  Your update method calls {@link
+  android.support.v4.widget.SwipeRefreshLayout#setRefreshing
+  setRefreshing(false)} when it has finished updating the data. Calling this
+  method instructs the {@link android.support.v4.widget.SwipeRefreshLayout} to
+  remove the progress indicator and update the view contents.
+</p>
+
+<p>
+  For example, the following code implements {@link
+  android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener#onRefresh
+  onRefresh()} and invokes the method {@code myUpdateOperation()} to update the
+  data displayed by the {@link android.widget.ListView}:
+</p>
+
+<pre>/*
+ * Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when the user
+ * performs a swipe-to-refresh gesture.
+ */
+mySwipeRefreshLayout.setOnRefreshListener(
+    new SwipeRefreshLayout.OnRefreshListener() {
+        &#64;Override
+        public void onRefresh() {
+            Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");
+
+            // This method performs the actual data-refresh operation.
+            // The method calls setRefreshing(false) when it's finished.
+            myUpdateOperation();
+        }
+    }
+);</pre>
+
+<h2 id="RespondAction">Respond to the Refresh Action</h2>
+
+<p>
+  If the user requests a refresh by using the action bar, the system calls the
+  {@link android.support.v4.app.Fragment#onOptionsItemSelected
+  onOptionsItemSelected()} method. Your app should respond to this call by
+  displaying the progress indicator and refreshing the app's data.
+</p>
+
+<p>
+  To respond to the refresh action, override {@link
+  android.support.v4.app.Fragment#onOptionsItemSelected
+  onOptionsItemSelected()}. In your override method, trigger the {@link
+  android.support.v4.widget.SwipeRefreshLayout} progress indicator by calling
+  {@link android.support.v4.widget.SwipeRefreshLayout#setRefreshing
+  setRefreshing()} with the value {@code true}, then perform the update
+  operation. Once again, you should be doing the actual update in a separate
+  method, so the same method can be called whether the user triggers the update
+  with a swipe or by using the action bar. When the update has finished, call
+  {@link android.support.v4.widget.SwipeRefreshLayout#setRefreshing
+  setRefreshing(false)} to remove the refresh progress indicator.
+</p>
+
+<p>The following code shows how to respond to the request action:
+</p>
+
+<pre>/*
+ * Listen for option item selections so that we receive a notification
+ * when the user requests a refresh by selecting the refresh action bar item.
+ */
+&#64;Override
+public boolean onOptionsItemSelected(MenuItem item) {
+    switch (item.getItemId()) {
+
+        // Check if user triggered a refresh:
+        case R.id.menu_refresh:
+            Log.i(LOG_TAG, "Refresh menu item selected");
+
+            // Signal SwipeRefreshLayout to start the progress indicator
+            mySwipeRefreshLayout.setRefreshing(true);
+
+            // Start the refresh background task.
+            // This method calls setRefreshing(false) when it's finished.
+            myUpdateOperation();
+
+            return true;
+    }
+
+    // User didn't trigger a refresh, let the superclass handle this action
+    return super.onOptionsItemSelected(item);
+
+}</pre>
+
+<p class="note">
+  <strong>Note:</strong> When the user triggers a refresh with a swipe action as
+  described in <a href="#RespondRefresh">Respond to the Refresh Gesture</a>,
+  you do not need to call {@link
+  android.support.v4.widget.SwipeRefreshLayout#setRefreshing setRefreshing()}.
+  The {@link
+  android.support.v4.widget.SwipeRefreshLayout} widget takes care of displaying
+  the progress indicator and removing it when the update has finished. However,
+  if the update is triggered by any means <em>other than</em> a swipe gesture,
+  you need to explicitly turn the progress indicator on with {@link
+  android.support.v4.widget.SwipeRefreshLayout#setRefreshing setRefreshing()}.
+  The method which actually refreshes the data calls {@link
+  android.support.v4.widget.SwipeRefreshLayout#setRefreshing
+  setRefreshing(false)} to signal that the update is finished.
+</p>
diff --git a/docs/html/training/sync-adapters/creating-stub-provider.jd b/docs/html/training/sync-adapters/creating-stub-provider.jd
index b8190d1..e9e18ef 100644
--- a/docs/html/training/sync-adapters/creating-stub-provider.jd
+++ b/docs/html/training/sync-adapters/creating-stub-provider.jd
@@ -85,11 +85,11 @@
         return true;
     }
     /*
-     * Return an empty String for MIME type
+     * Return no type for MIME type
      */
     &#64;Override
-    public String getType() {
-        return new String();
+    public String getType(Uri uri) {
+        return null;
     }
     /*
      * query() always returns no results
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index 3ee7ab7..862663e 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -1195,7 +1195,24 @@
               </li>
           </ul>
       </li>
-
+      <li class="nav-section">
+        <div class="nav-section-header">
+            <a href="<?cs var:toroot ?>training/swipe/index.html"
+            description=
+            "How to modify your app's layout to support manual content updates triggered by the
+             swipe-to-refresh gesture."
+            >Supporting Swipe-to-Refresh</a>
+        </div>
+        <ul>
+            <li>
+                <a href="<?cs var:toroot ?>training/swipe/add-swipe-interface.html"
+                >Adding Swipe-to-Refresh To Your App</a></li>
+            <li>
+                <a href="<?cs var:toroot ?>training/swipe/respond-refresh-request.html"
+                >Responding to a Refresh Gesture</a>
+            </li>
+        </ul>
+      </li>
       <li class="nav-section">
         <div class="nav-section-header">
           <a href="<?cs var:toroot ?>training/search/index.html"
diff --git a/docs/html/training/tv/start/start.jd b/docs/html/training/tv/start/start.jd
index 0f5871f..e55e202 100644
--- a/docs/html/training/tv/start/start.jd
+++ b/docs/html/training/tv/start/start.jd
@@ -1,4 +1,4 @@
-page.title=Getting Started with TV Apps
+page.title=Get Started with TV Apps
 page.tags="leanback","recyclerview","launcher"
 
 trainingnavtop=true
diff --git a/docs/html/tv/index.jd b/docs/html/tv/index.jd
index e4d7f7a..7a0cdcc 100644
--- a/docs/html/tv/index.jd
+++ b/docs/html/tv/index.jd
@@ -1,6 +1,6 @@
 page.title=About Android TV
 page.type=about
-page.image=tv/images/hero.jpg
+page.image=images/cards/android-tv_2x.png
 page.viewport_width=970
 page.tags="tv", "leanback"
 page.metaDescription=Bring your apps, games, and content to the biggest screen in the house.
diff --git a/docs/html/wear/index.jd b/docs/html/wear/index.jd
index 316f5ca..74e4939 100644
--- a/docs/html/wear/index.jd
+++ b/docs/html/wear/index.jd
@@ -3,7 +3,7 @@
 fullpage=true
 no_footer_links=true
 page.type=about
-
+page.image=images/cards/android-wear_2x.png
 @jd:body
 
 <style>
@@ -74,7 +74,7 @@
     </div> <!-- end .landing-section .landing-hero -->
 
 
-    <div class="landing-rest-of-page" style="margin-top:80px">
+    <div class="landing-rest-of-page">
       <div class="landing-section" id="extending-android-to-wearables">
         <div class="wrap">
           <div class="landing-section-header">
diff --git a/graphics/java/android/graphics/Atlas.java b/graphics/java/android/graphics/Atlas.java
index 39a5a53..e0a5345 100644
--- a/graphics/java/android/graphics/Atlas.java
+++ b/graphics/java/android/graphics/Atlas.java
@@ -21,10 +21,12 @@
  */
 public class Atlas {
     /**
-     * This flag indicates whether the packing algorithm will attempt
-     * to rotate entries to make them fit better in the atlas.
+     * WARNING: These flag values are part of the on-disk configuration information,
+     * do not change their values.
      */
-    public static final int FLAG_ALLOW_ROTATIONS = 0x1;
+
+    /** DELETED: FLAG_ROTATION = 0x01 */
+
     /**
      * This flag indicates whether the packing algorithm should leave
      * an empty 1 pixel wide border around each bitmap. This border can
@@ -52,9 +54,7 @@
 
     /**
      * Represents a bitmap packed in the atlas. Each entry has a location in
-     * pixels in the atlas and a rotation flag. If the entry was rotated, the
-     * bitmap must be rotated by 90 degrees (in either direction as long as
-     * the origin remains the same) before being rendered into the atlas.
+     * pixels in the atlas and a rotation flag.
      */
     public static class Entry {
         /**
@@ -65,11 +65,6 @@
          * Location, in pixels, of the bitmap on the Y axis in the atlas.
          */
         public int y;
-
-        /**
-         * If true, the bitmap must be rotated 90 degrees in the atlas.
-         */
-        public boolean rotated;
     }
 
     private final Policy mPolicy;
@@ -239,7 +234,6 @@
 
         private final SplitDecision mSplitDecision;
 
-        private final boolean mAllowRotation;
         private final int mPadding;
 
         /**
@@ -263,7 +257,6 @@
         }
 
         SlicePolicy(int width, int height, int flags, SplitDecision splitDecision) {
-            mAllowRotation = (flags & FLAG_ALLOW_ROTATIONS) != 0;
             mPadding = (flags & FLAG_ADD_PADDING) != 0 ? 1 : 0;
 
             // The entire atlas is empty at first, minus padding
@@ -360,26 +353,9 @@
          *
          * @return True if the rectangle was packed in the atlas, false otherwise
          */
-        @SuppressWarnings("SuspiciousNameCombination")
         private boolean insert(Cell cell, Cell prev, int width, int height, Entry entry) {
-            boolean rotated = false;
-
-            // If the rectangle doesn't fit we'll try to rotate it
-            // if possible before giving up
             if (cell.width < width || cell.height < height) {
-                if (mAllowRotation) {
-                    if (cell.width < height || cell.height < width) {
-                        return false;
-                    }
-
-                    // Rotate the rectangle
-                    int temp = width;
-                    width = height;
-                    height = temp;
-                    rotated = true;
-                } else {
-                    return false;
-                }
+                return false;
             }
 
             // Remaining free space after packing the rectangle
@@ -433,7 +409,6 @@
             // Return the location and rotation of the packed rectangle
             entry.x = cell.x;
             entry.y = cell.y;
-            entry.rotated = rotated;
 
             return true;
         }
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index e2f7799..2d8b0b2 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -41,13 +41,13 @@
      */
     public static final int DENSITY_NONE = 0;
 
-    private final long mSkBitmapPtr;
-
     /**
      * Backing buffer for the Bitmap.
      */
     private byte[] mBuffer;
 
+    // Convenience for JNI access
+    private final long mNativePtr;
     private final BitmapFinalizer mFinalizer;
 
     private final boolean mIsMutable;
@@ -115,17 +115,16 @@
         mRequestPremultiplied = requestPremultiplied;
         mBuffer = buffer;
 
-        // we delete this in our finalizer
-        mSkBitmapPtr = nativeBitmap;
-
         mNinePatchChunk = ninePatchChunk;
         mNinePatchInsets = ninePatchInsets;
         if (density >= 0) {
             mDensity = density;
         }
 
-        int nativeAllocationByteCount = buffer == null ? getByteCount() : 0;
-        mFinalizer = new BitmapFinalizer(nativeBitmap, nativeAllocationByteCount);
+        mNativePtr = nativeBitmap;
+        mFinalizer = new BitmapFinalizer(nativeBitmap);
+        int nativeAllocationByteCount = (buffer == null ? getByteCount() : 0);
+        mFinalizer.setNativeAllocationByteCount(nativeAllocationByteCount);
     }
 
     /**
@@ -223,8 +222,8 @@
             throw new IllegalStateException("native-backed bitmaps may not be reconfigured");
         }
 
-        nativeReconfigure(mSkBitmapPtr, width, height, config.nativeInt, mBuffer.length,
-                mRequestPremultiplied);
+        nativeReconfigure(mFinalizer.mNativeBitmap, width, height, config.nativeInt,
+                mBuffer.length, mRequestPremultiplied);
         mWidth = width;
         mHeight = height;
     }
@@ -301,7 +300,7 @@
      */
     public void recycle() {
         if (!mRecycled && mFinalizer.mNativeBitmap != 0) {
-            if (nativeRecycle(mSkBitmapPtr)) {
+            if (nativeRecycle(mFinalizer.mNativeBitmap)) {
                 // return value indicates whether native pixel object was actually recycled.
                 // false indicates that it is still in use at the native level and these
                 // objects should not be collected now. They will be collected later when the
@@ -331,7 +330,8 @@
      * @return The current generation ID for this bitmap.
      */
     public int getGenerationId() {
-        return nativeGenerationId(mSkBitmapPtr);
+        if (mRecycled) return 0;
+        return nativeGenerationId(mFinalizer.mNativeBitmap);
     }
 
     /**
@@ -487,7 +487,7 @@
             throw new RuntimeException("Buffer not large enough for pixels");
         }
 
-        nativeCopyPixelsToBuffer(mSkBitmapPtr, dst);
+        nativeCopyPixelsToBuffer(mFinalizer.mNativeBitmap, dst);
 
         // now update the buffer's position
         int position = dst.position();
@@ -527,7 +527,7 @@
             throw new RuntimeException("Buffer not large enough for pixels");
         }
 
-        nativeCopyPixelsFromBuffer(mSkBitmapPtr, src);
+        nativeCopyPixelsFromBuffer(mFinalizer.mNativeBitmap, src);
 
         // now update the buffer's position
         int position = src.position();
@@ -549,7 +549,7 @@
      */
     public Bitmap copy(Config config, boolean isMutable) {
         checkRecycled("Can't copy a recycled bitmap");
-        Bitmap b = nativeCopy(mSkBitmapPtr, config.nativeInt, isMutable);
+        Bitmap b = nativeCopy(mFinalizer.mNativeBitmap, config.nativeInt, isMutable);
         if (b != null) {
             b.setPremultiplied(mRequestPremultiplied);
             b.mDensity = mDensity;
@@ -810,7 +810,7 @@
         }
         bm.setHasAlpha(hasAlpha);
         if (config == Config.ARGB_8888 && !hasAlpha) {
-            nativeErase(bm.mSkBitmapPtr, 0xff000000);
+            nativeErase(bm.mFinalizer.mNativeBitmap, 0xff000000);
         }
         // No need to initialize the bitmap to zeroes with other configs;
         // it is backed by a VM byte array which is by definition preinitialized
@@ -1000,8 +1000,8 @@
             throw new IllegalArgumentException("quality must be 0..100");
         }
         Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "Bitmap.compress");
-        boolean result = nativeCompress(mSkBitmapPtr, format.nativeInt, quality,
-                              stream, new byte[WORKING_COMPRESS_STORAGE]);
+        boolean result = nativeCompress(mFinalizer.mNativeBitmap, format.nativeInt,
+                quality, stream, new byte[WORKING_COMPRESS_STORAGE]);
         Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
         return result;
     }
@@ -1041,7 +1041,8 @@
      * @see BitmapFactory.Options#inPremultiplied
      */
     public final boolean isPremultiplied() {
-        return nativeIsPremultiplied(mSkBitmapPtr);
+        if (mRecycled) return false;
+        return nativeIsPremultiplied(mFinalizer.mNativeBitmap);
     }
 
     /**
@@ -1065,8 +1066,9 @@
      * @see BitmapFactory.Options#inPremultiplied
      */
     public final void setPremultiplied(boolean premultiplied) {
+        checkRecycled("setPremultiplied called on a recycled bitmap");
         mRequestPremultiplied = premultiplied;
-        nativeSetPremultiplied(mSkBitmapPtr, premultiplied);
+        nativeSetPremultiplied(mFinalizer.mNativeBitmap, premultiplied);
     }
 
     /** Returns the bitmap's width */
@@ -1158,7 +1160,8 @@
      * @return number of bytes between rows of the native bitmap pixels.
      */
     public final int getRowBytes() {
-        return nativeRowBytes(mSkBitmapPtr);
+        if (mRecycled) return 0;
+        return nativeRowBytes(mFinalizer.mNativeBitmap);
     }
 
     /**
@@ -1201,7 +1204,8 @@
      * that config, otherwise return null.
      */
     public final Config getConfig() {
-        return Config.nativeToConfig(nativeConfig(mSkBitmapPtr));
+        if (mRecycled) return Config.ARGB_8888;
+        return Config.nativeToConfig(nativeConfig(mFinalizer.mNativeBitmap));
     }
 
     /** Returns true if the bitmap's config supports per-pixel alpha, and
@@ -1213,7 +1217,8 @@
      * it will return true by default.
      */
     public final boolean hasAlpha() {
-        return nativeHasAlpha(mSkBitmapPtr);
+        if (mRecycled) return false;
+        return nativeHasAlpha(mFinalizer.mNativeBitmap);
     }
 
     /**
@@ -1227,7 +1232,8 @@
      * non-opaque per-pixel alpha values.
      */
     public void setHasAlpha(boolean hasAlpha) {
-        nativeSetHasAlpha(mSkBitmapPtr, hasAlpha, mRequestPremultiplied);
+        checkRecycled("setHasAlpha called on a recycled bitmap");
+        nativeSetHasAlpha(mFinalizer.mNativeBitmap, hasAlpha, mRequestPremultiplied);
     }
 
     /**
@@ -1248,7 +1254,8 @@
      * @see #setHasMipMap(boolean)
      */
     public final boolean hasMipMap() {
-        return nativeHasMipMap(mSkBitmapPtr);
+        if (mRecycled) return false;
+        return nativeHasMipMap(mFinalizer.mNativeBitmap);
     }
 
     /**
@@ -1272,7 +1279,8 @@
      * @see #hasMipMap()
      */
     public final void setHasMipMap(boolean hasMipMap) {
-        nativeSetHasMipMap(mSkBitmapPtr, hasMipMap);
+        checkRecycled("setHasMipMap called on a recycled bitmap");
+        nativeSetHasMipMap(mFinalizer.mNativeBitmap, hasMipMap);
     }
 
     /**
@@ -1285,7 +1293,7 @@
         if (!isMutable()) {
             throw new IllegalStateException("cannot erase immutable bitmaps");
         }
-        nativeErase(mSkBitmapPtr, c);
+        nativeErase(mFinalizer.mNativeBitmap, c);
     }
 
     /**
@@ -1302,7 +1310,7 @@
     public int getPixel(int x, int y) {
         checkRecycled("Can't call getPixel() on a recycled bitmap");
         checkPixelAccess(x, y);
-        return nativeGetPixel(mSkBitmapPtr, x, y);
+        return nativeGetPixel(mFinalizer.mNativeBitmap, x, y);
     }
 
     /**
@@ -1335,7 +1343,7 @@
             return; // nothing to do
         }
         checkPixelsAccess(x, y, width, height, offset, stride, pixels);
-        nativeGetPixels(mSkBitmapPtr, pixels, offset, stride,
+        nativeGetPixels(mFinalizer.mNativeBitmap, pixels, offset, stride,
                         x, y, width, height);
     }
 
@@ -1416,7 +1424,7 @@
             throw new IllegalStateException();
         }
         checkPixelAccess(x, y);
-        nativeSetPixel(mSkBitmapPtr, x, y, color);
+        nativeSetPixel(mFinalizer.mNativeBitmap, x, y, color);
     }
 
     /**
@@ -1452,7 +1460,7 @@
             return; // nothing to do
         }
         checkPixelsAccess(x, y, width, height, offset, stride, pixels);
-        nativeSetPixels(mSkBitmapPtr, pixels, offset, stride,
+        nativeSetPixels(mFinalizer.mNativeBitmap, pixels, offset, stride,
                         x, y, width, height);
     }
 
@@ -1490,7 +1498,7 @@
      */
     public void writeToParcel(Parcel p, int flags) {
         checkRecycled("Can't parcel a recycled bitmap");
-        if (!nativeWriteToParcel(mSkBitmapPtr, mIsMutable, mDensity, p)) {
+        if (!nativeWriteToParcel(mFinalizer.mNativeBitmap, mIsMutable, mDensity, p)) {
             throw new RuntimeException("native writeToParcel failed");
         }
     }
@@ -1536,7 +1544,7 @@
     public Bitmap extractAlpha(Paint paint, int[] offsetXY) {
         checkRecycled("Can't extractAlpha on a recycled bitmap");
         long nativePaint = paint != null ? paint.getNativeInstance() : 0;
-        Bitmap bm = nativeExtractAlpha(mSkBitmapPtr, nativePaint, offsetXY);
+        Bitmap bm = nativeExtractAlpha(mFinalizer.mNativeBitmap, nativePaint, offsetXY);
         if (bm == null) {
             throw new RuntimeException("Failed to extractAlpha on Bitmap");
         }
@@ -1550,7 +1558,12 @@
      *  If other is null, return false.
      */
     public boolean sameAs(Bitmap other) {
-        return this == other || (other != null && nativeSameAs(mSkBitmapPtr, other.mSkBitmapPtr));
+        checkRecycled("Can't call sameAs on a recycled bitmap!");
+        if (other.isRecycled()) {
+            throw new IllegalArgumentException("Can't compare to a recycled bitmap!");
+        }
+        return this == other || (other != null
+                && nativeSameAs(mFinalizer.mNativeBitmap, other.mFinalizer.mNativeBitmap));
     }
 
     /**
@@ -1565,12 +1578,20 @@
      * and therefore is harmless.
      */
     public void prepareToDraw() {
-        nativePrepareToDraw(mSkBitmapPtr);
+        // TODO: Consider having this start an async upload?
+        // With inPurgeable no-op'd there's currently no use for this
+        // method, but it could have interesting future uses.
+        checkRecycled("Can't prepareToDraw on a recycled bitmap!");
     }
 
-    /** @hide */
-    public final long getSkBitmap() {
-        return mSkBitmapPtr;
+    /**
+     * Refs the underlying SkPixelRef and returns a pointer to it.
+     *
+     * @hide
+     * */
+    public final long refSkPixelRef() {
+        checkRecycled("Can't refSkPixelRef on a recycled bitmap!");
+        return nativeRefPixelRef(mNativePtr);
     }
 
     private static class BitmapFinalizer {
@@ -1578,12 +1599,17 @@
 
         // Native memory allocated for the duration of the Bitmap,
         // if pixel data allocated into native memory, instead of java byte[]
-        private final int mNativeAllocationByteCount;
+        private int mNativeAllocationByteCount;
 
-        BitmapFinalizer(long nativeBitmap, int nativeAllocationByteCount) {
+        BitmapFinalizer(long nativeBitmap) {
             mNativeBitmap = nativeBitmap;
-            mNativeAllocationByteCount = nativeAllocationByteCount;
+        }
 
+        public void setNativeAllocationByteCount(int nativeByteCount) {
+            if (mNativeAllocationByteCount != 0) {
+                VMRuntime.getRuntime().registerNativeFree(mNativeAllocationByteCount);
+            }
+            mNativeAllocationByteCount = nativeByteCount;
             if (mNativeAllocationByteCount != 0) {
                 VMRuntime.getRuntime().registerNativeAllocation(mNativeAllocationByteCount);
             }
@@ -1596,9 +1622,7 @@
             } catch (Throwable t) {
                 // Ignore
             } finally {
-                if (mNativeAllocationByteCount != 0) {
-                    VMRuntime.getRuntime().registerNativeFree(mNativeAllocationByteCount);
-                }
+                setNativeAllocationByteCount(0);
                 nativeDestructor(mNativeBitmap);
                 mNativeBitmap = 0;
             }
@@ -1650,7 +1674,6 @@
                                                     long nativePaint,
                                                     int[] offsetXY);
 
-    private static native void nativePrepareToDraw(long nativeBitmap);
     private static native boolean nativeHasAlpha(long nativeBitmap);
     private static native boolean nativeIsPremultiplied(long nativeBitmap);
     private static native void nativeSetPremultiplied(long nativeBitmap,
@@ -1661,4 +1684,5 @@
     private static native boolean nativeHasMipMap(long nativeBitmap);
     private static native void nativeSetHasMipMap(long nativeBitmap, boolean hasMipMap);
     private static native boolean nativeSameAs(long nativeBitmap0, long nativeBitmap1);
+    private static native long nativeRefPixelRef(long nativeBitmap);
 }
diff --git a/graphics/java/android/graphics/BitmapShader.java b/graphics/java/android/graphics/BitmapShader.java
index f2f890e..bd74bc8 100644
--- a/graphics/java/android/graphics/BitmapShader.java
+++ b/graphics/java/android/graphics/BitmapShader.java
@@ -42,8 +42,7 @@
         mBitmap = bitmap;
         mTileX = tileX;
         mTileY = tileY;
-        final long b = bitmap.getSkBitmap();
-        init(nativeCreate(b, tileX.nativeInt, tileY.nativeInt));
+        init(nativeCreate(bitmap, tileX.nativeInt, tileY.nativeInt));
     }
 
     /**
@@ -56,6 +55,6 @@
         return copy;
     }
 
-    private static native long nativeCreate(long native_bitmap, int shaderTileModeX,
+    private static native long nativeCreate(Bitmap bitmap, int shaderTileModeX,
             int shaderTileModeY);
 }
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 9fe8e0c..392a5b6 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -81,10 +81,6 @@
      */
     protected int mScreenDensity = Bitmap.DENSITY_NONE;
 
-    // Used by native code
-    @SuppressWarnings("UnusedDeclaration")
-    private int mSurfaceFormat;
-
     // Maximum bitmap size as defined in Skia's native code
     // (see SkCanvas.cpp, SkDraw.cpp)
     private static final int MAXMIMUM_BITMAP_SIZE = 32766;
@@ -1327,7 +1323,7 @@
      */
     public void drawBitmap(@NonNull Bitmap bitmap, float left, float top, @Nullable Paint paint) {
         throwIfCannotDraw(bitmap);
-        native_drawBitmap(mNativeCanvasWrapper, bitmap.getSkBitmap(), left, top,
+        native_drawBitmap(mNativeCanvasWrapper, bitmap, left, top,
                 paint != null ? paint.getNativeInstance() : 0, mDensity, mScreenDensity, bitmap.mDensity);
     }
 
@@ -1373,7 +1369,7 @@
           bottom = src.bottom;
       }
 
-      native_drawBitmap(mNativeCanvasWrapper, bitmap.getSkBitmap(), left, top, right, bottom,
+      native_drawBitmap(mNativeCanvasWrapper, bitmap, left, top, right, bottom,
               dst.left, dst.top, dst.right, dst.bottom, nativePaint, mScreenDensity,
               bitmap.mDensity);
   }
@@ -1420,7 +1416,7 @@
             bottom = src.bottom;
         }
 
-        native_drawBitmap(mNativeCanvasWrapper, bitmap.getSkBitmap(), left, top, right, bottom,
+        native_drawBitmap(mNativeCanvasWrapper, bitmap, left, top, right, bottom,
             dst.left, dst.top, dst.right, dst.bottom, nativePaint, mScreenDensity,
             bitmap.mDensity);
     }
@@ -1501,7 +1497,7 @@
      * @param paint  May be null. The paint used to draw the bitmap
      */
     public void drawBitmap(@NonNull Bitmap bitmap, @NonNull Matrix matrix, @Nullable Paint paint) {
-        nativeDrawBitmapMatrix(mNativeCanvasWrapper, bitmap.getSkBitmap(), matrix.ni(),
+        nativeDrawBitmapMatrix(mNativeCanvasWrapper, bitmap, matrix.ni(),
                 paint != null ? paint.getNativeInstance() : 0);
     }
 
@@ -1556,7 +1552,7 @@
             // no mul by 2, since we need only 1 color per vertex
             checkRange(colors.length, colorOffset, count);
         }
-        nativeDrawBitmapMesh(mNativeCanvasWrapper, bitmap.getSkBitmap(), meshWidth, meshHeight,
+        nativeDrawBitmapMesh(mNativeCanvasWrapper, bitmap, meshWidth, meshHeight,
                 verts, vertOffset, colors, colorOffset,
                 paint != null ? paint.getNativeInstance() : 0);
     }
@@ -2066,13 +2062,13 @@
     private static native void native_drawPath(long nativeCanvas,
                                                long nativePath,
                                                long nativePaint);
-    private native void native_drawBitmap(long nativeCanvas, long nativeBitmap,
+    private native void native_drawBitmap(long nativeCanvas, Bitmap bitmap,
                                                  float left, float top,
                                                  long nativePaintOrZero,
                                                  int canvasDensity,
                                                  int screenDensity,
                                                  int bitmapDensity);
-    private native void native_drawBitmap(long nativeCanvas, long nativeBitmap,
+    private native void native_drawBitmap(long nativeCanvas, Bitmap bitmap,
             float srcLeft, float srcTop, float srcRight, float srcBottom,
             float dstLeft, float dstTop, float dstRight, float dstBottom,
             long nativePaintOrZero, int screenDensity, int bitmapDensity);
@@ -2082,11 +2078,11 @@
                                                  boolean hasAlpha,
                                                  long nativePaintOrZero);
     private static native void nativeDrawBitmapMatrix(long nativeCanvas,
-                                                      long nativeBitmap,
+                                                      Bitmap bitmap,
                                                       long nativeMatrix,
                                                       long nativePaint);
     private static native void nativeDrawBitmapMesh(long nativeCanvas,
-                                                    long nativeBitmap,
+                                                    Bitmap bitmap,
                                                     int meshWidth, int meshHeight,
                                                     float[] verts, int vertOffset,
                                                     int[] colors, int colorOffset,
diff --git a/graphics/java/android/graphics/NinePatch.java b/graphics/java/android/graphics/NinePatch.java
index 9c4299a..21a212a 100644
--- a/graphics/java/android/graphics/NinePatch.java
+++ b/graphics/java/android/graphics/NinePatch.java
@@ -98,7 +98,7 @@
     public NinePatch(Bitmap bitmap, byte[] chunk, String srcName) {
         mBitmap = bitmap;
         mSrcName = srcName;
-        mNativeChunk = validateNinePatchChunk(mBitmap.getSkBitmap(), chunk);
+        mNativeChunk = validateNinePatchChunk(chunk);
     }
 
     /**
@@ -199,12 +199,12 @@
     }
 
     void drawSoftware(Canvas canvas, RectF location, Paint paint) {
-        nativeDraw(canvas.getNativeCanvasWrapper(), location, mBitmap.getSkBitmap(), mNativeChunk,
+        nativeDraw(canvas.getNativeCanvasWrapper(), location, mBitmap, mNativeChunk,
                 paint != null ? paint.getNativeInstance() : 0, canvas.mDensity, mBitmap.mDensity);
     }
 
     void drawSoftware(Canvas canvas, Rect location, Paint paint) {
-        nativeDraw(canvas.getNativeCanvasWrapper(), location, mBitmap.getSkBitmap(), mNativeChunk,
+        nativeDraw(canvas.getNativeCanvasWrapper(), location, mBitmap, mNativeChunk,
                 paint != null ? paint.getNativeInstance() : 0, canvas.mDensity, mBitmap.mDensity);
     }
 
@@ -252,7 +252,7 @@
      * that are transparent.
      */
     public final Region getTransparentRegion(Rect bounds) {
-        long r = nativeGetTransparentRegion(mBitmap.getSkBitmap(), mNativeChunk, bounds);
+        long r = nativeGetTransparentRegion(mBitmap, mNativeChunk, bounds);
         return r != 0 ? new Region(r) : null;
     }
 
@@ -271,11 +271,11 @@
      * If validation is successful, this method returns a native Res_png_9patch*
      * object used by the renderers.
      */
-    private static native long validateNinePatchChunk(long bitmap, byte[] chunk);
+    private static native long validateNinePatchChunk(byte[] chunk);
     private static native void nativeFinalize(long chunk);
-    private static native void nativeDraw(long canvas_instance, RectF loc, long bitmap_instance,
+    private static native void nativeDraw(long canvas_instance, RectF loc, Bitmap bitmap_instance,
             long c, long paint_instance_or_null, int destDensity, int srcDensity);
-    private static native void nativeDraw(long canvas_instance, Rect loc, long bitmap_instance,
+    private static native void nativeDraw(long canvas_instance, Rect loc, Bitmap bitmap_instance,
             long c, long paint_instance_or_null, int destDensity, int srcDensity);
-    private static native long nativeGetTransparentRegion(long bitmap, long chunk, Rect location);
+    private static native long nativeGetTransparentRegion(Bitmap bitmap, long chunk, Rect location);
 }
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index b03fe3a..4a06805 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -295,9 +295,9 @@
     @Override
     public void setHotspotBounds(int left, int top, int right, int bottom) {
         if (mHotspotBounds == null) {
-            mHotspotBounds = new Rect(left, top, bottom, right);
+            mHotspotBounds = new Rect(left, top, right, bottom);
         } else {
-            mHotspotBounds.set(left, top, bottom, right);
+            mHotspotBounds.set(left, top, right, bottom);
         }
 
         if (mCurrDrawable != null) {
diff --git a/graphics/java/android/graphics/drawable/Icon.java b/graphics/java/android/graphics/drawable/Icon.java
new file mode 100644
index 0000000..47a1f77
--- /dev/null
+++ b/graphics/java/android/graphics/drawable/Icon.java
@@ -0,0 +1,482 @@
+/*
+ * 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.graphics.drawable;
+
+import android.annotation.DrawableRes;
+import android.content.ContentResolver;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.lang.IllegalArgumentException;
+import java.lang.Override;
+
+/**
+ * An umbrella container for several serializable graphics representations, including Bitmaps,
+ * compressed bitmap images (e.g. JPG or PNG), and drawable resources (including vectors).
+ *
+ * <a href="https://developer.android.com/training/displaying-bitmaps/index.html">Much ink</a>
+ * has been spilled on the best way to load images, and many clients may have different needs when
+ * it comes to threading and fetching. This class is therefore focused on encapsulation rather than
+ * behavior.
+ */
+
+public final class Icon implements Parcelable {
+    private static final String TAG = "Icon";
+
+    private static final int TYPE_BITMAP   = 1;
+    private static final int TYPE_RESOURCE = 2;
+    private static final int TYPE_DATA     = 3;
+    private static final int TYPE_URI      = 4;
+
+    private final int mType;
+
+    // To avoid adding unnecessary overhead, we have a few basic objects that get repurposed
+    // based on the value of mType.
+
+    // TYPE_BITMAP: Bitmap
+    // TYPE_RESOURCE: Resources
+    // TYPE_DATA: DataBytes
+    private Object          mObj1;
+
+    // TYPE_RESOURCE: package name
+    // TYPE_URI: uri string
+    private String          mString1;
+
+    // TYPE_RESOURCE: resId
+    // TYPE_DATA: data length
+    private int             mInt1;
+
+    // TYPE_DATA: data offset
+    private int             mInt2;
+
+    // Internal accessors for different mType variants
+    private Bitmap getBitmap() {
+        if (mType != TYPE_BITMAP) {
+            throw new IllegalStateException("called getBitmap() on " + this);
+        }
+        return (Bitmap) mObj1;
+    }
+
+    private int getDataLength() {
+        if (mType != TYPE_DATA) {
+            throw new IllegalStateException("called getDataLength() on " + this);
+        }
+        synchronized (this) {
+            return mInt1;
+        }
+    }
+
+    private int getDataOffset() {
+        if (mType != TYPE_DATA) {
+            throw new IllegalStateException("called getDataOffset() on " + this);
+        }
+        synchronized (this) {
+            return mInt2;
+        }
+    }
+
+    private byte[] getDataBytes() {
+        if (mType != TYPE_DATA) {
+            throw new IllegalStateException("called getDataBytes() on " + this);
+        }
+        synchronized (this) {
+            return (byte[]) mObj1;
+        }
+    }
+
+    private Resources getResources() {
+        if (mType != TYPE_RESOURCE) {
+            throw new IllegalStateException("called getResources() on " + this);
+        }
+        return (Resources) mObj1;
+    }
+
+    private String getResPackage() {
+        if (mType != TYPE_RESOURCE) {
+            throw new IllegalStateException("called getResPackage() on " + this);
+        }
+        return mString1;
+    }
+
+    private int getResId() {
+        if (mType != TYPE_RESOURCE) {
+            throw new IllegalStateException("called getResId() on " + this);
+        }
+        return mInt1;
+    }
+
+    private String getUriString() {
+        if (mType != TYPE_URI) {
+            throw new IllegalStateException("called getUriString() on " + this);
+        }
+        return mString1;
+    }
+
+    private Uri getUri() {
+        return Uri.parse(getUriString());
+    }
+
+    // Convert a int32 into a four-char string
+    private static final String typeToString(int x) {
+        switch (x) {
+            case TYPE_BITMAP: return "BITMAP";
+            case TYPE_DATA: return "DATA";
+            case TYPE_RESOURCE: return "RESOURCE";
+            case TYPE_URI: return "URI";
+            default: return "UNKNOWN";
+        }
+    }
+
+    /**
+     * Invokes {@link #loadDrawable(Context)} on the given {@link android.os.Handler Handler}
+     * and then sends <code>andThen</code> to the same Handler when finished.
+     *
+     * @param context {@link android.content.Context Context} in which to load the drawable; see
+     *                {@link #loadDrawable(Context)}
+     * @param andThen {@link android.os.Message} to send to its target once the drawable
+     *                is available. The {@link android.os.Message#obj obj}
+     *                property is populated with the Drawable.
+     */
+    public void loadDrawableAsync(Context context, Message andThen) {
+        if (andThen.getTarget() == null) {
+            throw new IllegalArgumentException("callback message must have a target handler");
+        }
+        new LoadDrawableTask(context, andThen).runAsync();
+    }
+
+    /**
+     * Invokes {@link #loadDrawable(Context)} on a background thread
+     * and then runs <code>andThen</code> on the UI thread when finished.
+     *
+     * @param context {@link android.content.Context Context} in which to load the drawable; see
+     *                {@link #loadDrawable(Context)}
+     * @param handler {@link android.os.Handler} on which to run <code>andThen</code>.
+     * @param listener a callback to run on the provided
+     *                 Handler once the drawable is available.
+     */
+    public void loadDrawableAsync(Context context, Handler handler,
+            final OnDrawableLoadedListener listener) {
+        new LoadDrawableTask(context, handler, listener).runAsync();
+    }
+
+    /**
+     * Returns a Drawable that can be used to draw the image inside this Icon, constructing it
+     * if necessary. Depending on the type of image, this may not be something you want to do on
+     * the UI thread, so consider using
+     * {@link #loadDrawableAsync(Context, Message) loadDrawableAsync} instead.
+     *
+     * @param context {@link android.content.Context Context} in which to load the drawable; used
+     *                to access {@link android.content.res.Resources Resources}, for example.
+     * @return A fresh instance of a drawable for this image, yours to keep.
+     */
+    public Drawable loadDrawable(Context context) {
+        switch (mType) {
+            case TYPE_BITMAP:
+                return new BitmapDrawable(context.getResources(), getBitmap());
+            case TYPE_RESOURCE:
+                if (getResources() == null) {
+                    if (getResPackage() == null || "android".equals(getResPackage())) {
+                        mObj1 = Resources.getSystem();
+                    } else {
+                        final PackageManager pm = context.getPackageManager();
+                        try {
+                            mObj1 = pm.getResourcesForApplication(getResPackage());
+                        } catch (PackageManager.NameNotFoundException e) {
+                            Log.e(TAG,
+                                    String.format("Unable to find package '%s'", getResPackage()),
+                                    e);
+                            break;
+                        }
+                    }
+                }
+                return getResources().getDrawable(getResId(), context.getTheme());
+            case TYPE_DATA:
+                return new BitmapDrawable(context.getResources(),
+                    BitmapFactory.decodeByteArray(getDataBytes(), getDataOffset(), getDataLength())
+                );
+            case TYPE_URI:
+                final Uri uri = getUri();
+                final String scheme = uri.getScheme();
+                InputStream is = null;
+                if (ContentResolver.SCHEME_CONTENT.equals(scheme)
+                        || ContentResolver.SCHEME_FILE.equals(scheme)) {
+                    try {
+                        is = context.getContentResolver().openInputStream(uri);
+                    } catch (Exception e) {
+                        Log.w(TAG, "Unable to load image from URI: " + uri, e);
+                    }
+                } else {
+                    try {
+                        is = new FileInputStream(new File(mString1));
+                    } catch (FileNotFoundException e) {
+                        Log.w(TAG, "Unable to load image from path: " + uri, e);
+                    }
+                }
+                if (is != null) {
+                    return new BitmapDrawable(context.getResources(),
+                            BitmapFactory.decodeStream(is));
+                }
+                break;
+        }
+        return null;
+    }
+
+    private Icon(int mType) {
+        this.mType = mType;
+    }
+
+    /**
+     * Create a Icon pointing to a drawable resource.
+     * @param res Resources for a package containing the resource in question
+     * @param resid ID of the drawable resource
+     */
+    public static Icon createWithResource(Resources res, @DrawableRes int resid) {
+        final Icon rep = new Icon(TYPE_RESOURCE);
+        rep.mObj1 = res;
+        rep.mInt1 = resid;
+        rep.mString1 = res.getResourcePackageName(resid);
+        return rep;
+    }
+
+    /**
+     * Create a Icon pointing to a bitmap in memory.
+     * @param bits A valid {@link android.graphics.Bitmap} object
+     */
+    public static Icon createWithBitmap(Bitmap bits) {
+        final Icon rep = new Icon(TYPE_BITMAP);
+        rep.mObj1 = bits;
+        return rep;
+    }
+
+    /**
+     * Create a Icon pointing to a compressed bitmap stored in a byte array.
+     * @param data Byte array storing compressed bitmap data of a type that
+     *             {@link android.graphics.BitmapFactory}
+     *             can decode (see {@link android.graphics.Bitmap.CompressFormat}).
+     * @param offset Offset into <code>data</code> at which the bitmap data starts
+     * @param length Length of the bitmap data
+     */
+    public static Icon createWithData(byte[] data, int offset, int length) {
+        final Icon rep = new Icon(TYPE_DATA);
+        rep.mObj1 = data;
+        rep.mInt1 = length;
+        rep.mInt2 = offset;
+        return rep;
+    }
+
+    /**
+     * Create a Icon pointing to a content specified by URI.
+     *
+     * @param uri A uri referring to local content:// or file:// image data.
+     */
+    public static Icon createWithContentUri(String uri) {
+        final Icon rep = new Icon(TYPE_URI);
+        rep.mString1 = uri;
+        return rep;
+    }
+
+    /**
+     * Create a Icon pointing to a content specified by URI.
+     *
+     * @param uri A uri referring to local content:// or file:// image data.
+     */
+    public static Icon createWithContentUri(Uri uri) {
+        final Icon rep = new Icon(TYPE_URI);
+        rep.mString1 = uri.toString();
+        return rep;
+    }
+
+    /**
+     * Create a Icon pointing to
+     *
+     * @param path A path to a file that contains compressed bitmap data of
+     *           a type that {@link android.graphics.BitmapFactory} can decode.
+     */
+    public static Icon createWithFilePath(String path) {
+        final Icon rep = new Icon(TYPE_URI);
+        rep.mString1 = path;
+        return rep;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("Icon(typ=").append(typeToString(mType));
+        switch (mType) {
+            case TYPE_BITMAP:
+                sb.append(" size=")
+                        .append(getBitmap().getWidth())
+                        .append("x")
+                        .append(getBitmap().getHeight());
+                break;
+            case TYPE_RESOURCE:
+                sb.append(" pkg=")
+                        .append(getResPackage())
+                        .append(" id=")
+                        .append(String.format("%08x", getResId()));
+                break;
+            case TYPE_DATA:
+                sb.append(" len=").append(getDataLength());
+                if (getDataOffset() != 0) {
+                    sb.append(" off=").append(getDataOffset());
+                }
+                break;
+            case TYPE_URI:
+                sb.append(" uri=").append(getUriString());
+                break;
+        }
+        sb.append(")");
+        return sb.toString();
+    }
+
+    /**
+     * Parcelable interface
+     */
+    public int describeContents() {
+        return (mType == TYPE_BITMAP || mType == TYPE_DATA)
+                ? Parcelable.CONTENTS_FILE_DESCRIPTOR : 0;
+    }
+
+    // ===== Parcelable interface ======
+
+    private Icon(Parcel in) {
+        this(in.readInt());
+        switch (mType) {
+            case TYPE_BITMAP:
+                final Bitmap bits = Bitmap.CREATOR.createFromParcel(in);
+                mObj1 = bits;
+                break;
+            case TYPE_RESOURCE:
+                final String pkg = in.readString();
+                final int resId = in.readInt();
+                mString1 = pkg;
+                mInt1 = resId;
+                break;
+            case TYPE_DATA:
+                final int len = in.readInt();
+                final byte[] a = in.readBlob();
+                if (len != a.length) {
+                    throw new RuntimeException("internal unparceling error: blob length ("
+                            + a.length + ") != expected length (" + len + ")");
+                }
+                mInt1 = len;
+                mObj1 = a;
+                break;
+            case TYPE_URI:
+                final String uri = in.readString();
+                mString1 = uri;
+                break;
+            default:
+                throw new RuntimeException("invalid "
+                        + this.getClass().getSimpleName() + " type in parcel: " + mType);
+        }
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        switch (mType) {
+            case TYPE_BITMAP:
+                final Bitmap bits = getBitmap();
+                dest.writeInt(TYPE_BITMAP);
+                getBitmap().writeToParcel(dest, flags);
+                break;
+            case TYPE_RESOURCE:
+                dest.writeInt(TYPE_RESOURCE);
+                dest.writeString(getResPackage());
+                dest.writeInt(getResId());
+                break;
+            case TYPE_DATA:
+                dest.writeInt(TYPE_DATA);
+                dest.writeInt(getDataLength());
+                dest.writeBlob(getDataBytes(), getDataOffset(), getDataLength());
+                break;
+            case TYPE_URI:
+                dest.writeInt(TYPE_URI);
+                dest.writeString(getUriString());
+                break;
+        }
+    }
+
+    public static final Parcelable.Creator<Icon> CREATOR
+            = new Parcelable.Creator<Icon>() {
+        public Icon createFromParcel(Parcel in) {
+            return new Icon(in);
+        }
+
+        public Icon[] newArray(int size) {
+            return new Icon[size];
+        }
+    };
+
+    /**
+     * Implement this interface to receive notification when
+     * {@link #loadDrawableAsync(Context, Handler, OnDrawableLoadedListener) loadDrawableAsync}
+     * is finished and your Drawable is ready.
+     */
+    public interface OnDrawableLoadedListener {
+        void onDrawableLoaded(Drawable d);
+    }
+
+    /**
+     * Wrapper around loadDrawable that does its work on a pooled thread and then
+     * fires back the given (targeted) Message.
+     */
+    private class LoadDrawableTask implements Runnable {
+        final Context mContext;
+        final Message mMessage;
+
+        public LoadDrawableTask(Context context, final Handler handler,
+                final OnDrawableLoadedListener listener) {
+            mContext = context;
+            mMessage = Message.obtain(handler, new Runnable() {
+                    @Override
+                    public void run() {
+                        listener.onDrawableLoaded((Drawable) mMessage.obj);
+                    }
+                });
+        }
+
+        public LoadDrawableTask(Context context, Message message) {
+            mContext = context;
+            mMessage = message;
+        }
+
+        @Override
+        public void run() {
+            mMessage.obj = loadDrawable(mContext);
+            mMessage.sendToTarget();
+        }
+
+        public void runAsync() {
+            AsyncTask.THREAD_POOL_EXECUTOR.execute(this);
+        }
+    }
+}
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index f67dcb3..efc171c 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -53,8 +53,11 @@
  * attribute identifier.
  * <p>
  * A touch feedback drawable may contain multiple child layers, including a
- * special mask layer that is not drawn to the screen. A single layer may be set
- * as the mask by specifying its android:id value as {@link android.R.id#mask}.
+ * special mask layer that is not drawn to the screen. A single layer may be
+ * set as the mask from XML by specifying its {@code android:id} value as
+ * {@link android.R.id#mask}. At run time, a single layer may be set as the
+ * mask using {@code setId(..., android.R.id.mask)} or an existing mask layer
+ * may be replaced using {@code setDrawableByLayerId(android.R.id.mask, ...)}.
  * <pre>
  * <code>&lt!-- A red ripple masked against an opaque rectangle. --/>
  * &ltripple android:color="#ffff0000">
diff --git a/graphics/java/android/graphics/pdf/PdfRenderer.java b/graphics/java/android/graphics/pdf/PdfRenderer.java
index b32dcc6..feb8052 100644
--- a/graphics/java/android/graphics/pdf/PdfRenderer.java
+++ b/graphics/java/android/graphics/pdf/PdfRenderer.java
@@ -380,7 +380,7 @@
 
             final long transformPtr = (transform != null) ? transform.native_instance : 0;
 
-            nativeRenderPage(mNativeDocument, mNativePage, destination.getSkBitmap(), contentLeft,
+            nativeRenderPage(mNativeDocument, mNativePage, destination, contentLeft,
                     contentTop, contentRight, contentBottom, transformPtr, renderMode);
         }
 
@@ -425,7 +425,7 @@
     private static native void nativeClose(long documentPtr);
     private static native int nativeGetPageCount(long documentPtr);
     private static native boolean nativeScaleForPrinting(long documentPtr);
-    private static native void nativeRenderPage(long documentPtr, long pagePtr, long destPtr,
+    private static native void nativeRenderPage(long documentPtr, long pagePtr, Bitmap dest,
             int destLeft, int destTop, int destRight, int destBottom, long matrixPtr, int renderMode);
     private static native long nativeOpenPageAndGetSize(long documentPtr, int pageIndex,
             Point outSize);
diff --git a/graphics/tests/graphicstests/AndroidManifest.xml b/graphics/tests/graphicstests/AndroidManifest.xml
index 5fb5959..e019e28 100644
--- a/graphics/tests/graphicstests/AndroidManifest.xml
+++ b/graphics/tests/graphicstests/AndroidManifest.xml
@@ -24,6 +24,7 @@
     <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
     <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
  
     <application>
diff --git a/graphics/tests/graphicstests/res/drawable-nodpi/landscape.png b/graphics/tests/graphicstests/res/drawable-nodpi/landscape.png
new file mode 100644
index 0000000..ddb3180
--- /dev/null
+++ b/graphics/tests/graphicstests/res/drawable-nodpi/landscape.png
Binary files differ
diff --git a/graphics/tests/graphicstests/src/android/graphics/drawable/IconTest.java b/graphics/tests/graphicstests/src/android/graphics/drawable/IconTest.java
new file mode 100644
index 0000000..2b9bf50
--- /dev/null
+++ b/graphics/tests/graphicstests/src/android/graphics/drawable/IconTest.java
@@ -0,0 +1,345 @@
+/*
+ * Copyright (C) 2006 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.graphics.drawable;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Parcel;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.lang.Override;
+import java.util.Arrays;
+import java.util.ArrayList;
+
+import junit.framework.TestCase;
+
+import com.android.frameworks.graphicstests.R;
+
+public class IconTest extends AndroidTestCase {
+    public static final String TAG = IconTest.class.getSimpleName();
+    public static void L(String s, Object... parts) {
+        Log.d(TAG, (parts.length == 0) ? s : String.format(s, parts));
+    }
+
+    @SmallTest
+    public void testWithBitmap() throws Exception {
+        final Bitmap bm1 = Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_8888);
+        final Bitmap bm2 = Bitmap.createBitmap(100, 200, Bitmap.Config.RGB_565);
+        final Bitmap bm3 = ((BitmapDrawable) getContext().getDrawable(R.drawable.landscape))
+                .getBitmap();
+
+        final Canvas can1 = new Canvas(bm1);
+        can1.drawColor(0xFFFF0000);
+        final Canvas can2 = new Canvas(bm2);
+        can2.drawColor(0xFF00FF00);
+
+        final Icon im1 = Icon.createWithBitmap(bm1);
+        final Icon im2 = Icon.createWithBitmap(bm2);
+        final Icon im3 = Icon.createWithBitmap(bm3);
+
+        final Drawable draw1 = im1.loadDrawable(mContext);
+        final Drawable draw2 = im2.loadDrawable(mContext);
+        final Drawable draw3 = im3.loadDrawable(mContext);
+
+        final Bitmap test1 = Bitmap.createBitmap(draw1.getIntrinsicWidth(),
+                draw1.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+        final Bitmap test2 = Bitmap.createBitmap(draw2.getIntrinsicWidth(),
+                draw2.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+        final Bitmap test3 = Bitmap.createBitmap(draw3.getIntrinsicWidth(),
+                draw3.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+
+        draw1.setBounds(0, 0, draw1.getIntrinsicWidth(), draw1.getIntrinsicHeight());
+        draw1.draw(new Canvas(test1));
+
+        draw2.setBounds(0, 0, draw2.getIntrinsicWidth(), draw2.getIntrinsicHeight());
+        draw2.draw(new Canvas(test2));
+
+        draw3.setBounds(0, 0, draw3.getIntrinsicWidth(), draw3.getIntrinsicHeight());
+        draw3.draw(new Canvas(test3));
+
+        final File dir = getContext().getExternalFilesDir(null);
+        L("writing temp bitmaps to %s...", dir);
+
+        bm1.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "bitmap1-original.png")));
+        test1.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "bitmap1-test.png")));
+        if (!equalBitmaps(bm1, test1)) {
+            findBitmapDifferences(bm1, test1);
+            fail("bitmap1 differs, check " + dir);
+        }
+
+        bm2.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "bitmap2-original.png")));
+        test2.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "bitmap2-test.png")));
+        if (!equalBitmaps(bm2, test2)) {
+            findBitmapDifferences(bm2, test2);
+            fail("bitmap2 differs, check " + dir);
+        }
+
+        bm3.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "bitmap3-original.png")));
+        test3.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "bitmap3-test.png")));
+        if (!equalBitmaps(bm3, test3)) {
+            findBitmapDifferences(bm3, test3);
+            fail("bitmap3 differs, check " + dir);
+        }
+    }
+
+    @SmallTest
+    public void testWithBitmapResource() throws Exception {
+        final Bitmap res1 = ((BitmapDrawable) getContext().getDrawable(R.drawable.landscape))
+                .getBitmap();
+
+        final Icon im1 = Icon.createWithResource(getContext().getResources(),
+                R.drawable.landscape);
+        final Drawable draw1 = im1.loadDrawable(mContext);
+        final Bitmap test1 = Bitmap.createBitmap(draw1.getIntrinsicWidth(),
+                draw1.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+        draw1.setBounds(0, 0, test1.getWidth(), test1.getHeight());
+        draw1.draw(new Canvas(test1));
+
+        final File dir = getContext().getExternalFilesDir(null);
+        res1.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "res1-original.png")));
+        test1.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "res1-test.png")));
+        if (!equalBitmaps(res1, test1)) {
+            findBitmapDifferences(res1, test1);
+            fail("res1 differs, check " + dir);
+        }
+    }
+
+    @SmallTest
+    public void testWithFile() throws Exception {
+        final Bitmap bit1 = ((BitmapDrawable) getContext().getDrawable(R.drawable.landscape))
+                .getBitmap();
+        final File dir = getContext().getExternalFilesDir(null);
+        final File file1 = new File(dir, "file1-original.png");
+        bit1.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(file1));
+
+        final Icon im1 = Icon.createWithFilePath(file1.toString());
+        final Drawable draw1 = im1.loadDrawable(mContext);
+        final Bitmap test1 = Bitmap.createBitmap(draw1.getIntrinsicWidth(),
+                draw1.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+        draw1.setBounds(0, 0, test1.getWidth(), test1.getHeight());
+        draw1.draw(new Canvas(test1));
+
+        test1.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(new File(dir, "file1-test.png")));
+        if (!equalBitmaps(bit1, test1)) {
+            findBitmapDifferences(bit1, test1);
+            fail("testWithFile: file1 differs, check " + dir);
+        }
+    }
+
+    @SmallTest
+    public void testAsync() throws Exception {
+        final Bitmap bit1 = ((BitmapDrawable) getContext().getDrawable(R.drawable.landscape))
+                .getBitmap();
+        final File dir = getContext().getExternalFilesDir(null);
+        final File file1 = new File(dir, "async-original.png");
+        bit1.compress(Bitmap.CompressFormat.PNG, 100,
+                new FileOutputStream(file1));
+
+        final Icon im1 = Icon.createWithFilePath(file1.toString());
+        final HandlerThread thd = new HandlerThread("testAsync");
+        thd.start();
+        final Handler h = new Handler(thd.getLooper());
+        L(TAG, "asyncTest: dispatching load to thread: " + thd);
+        im1.loadDrawableAsync(mContext, h, new Icon.OnDrawableLoadedListener() {
+            @Override
+            public void onDrawableLoaded(Drawable draw1) {
+                L(TAG, "asyncTest: thread: loading drawable");
+                L(TAG, "asyncTest: thread: loaded: %dx%d", draw1.getIntrinsicWidth(),
+                    draw1.getIntrinsicHeight());
+                final Bitmap test1 = Bitmap.createBitmap(draw1.getIntrinsicWidth(),
+                        draw1.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+                draw1.setBounds(0, 0, test1.getWidth(), test1.getHeight());
+                draw1.draw(new Canvas(test1));
+
+                try {
+                    test1.compress(Bitmap.CompressFormat.PNG, 100,
+                            new FileOutputStream(new File(dir, "async-test.png")));
+                } catch (java.io.FileNotFoundException ex) {
+                    fail("couldn't create test file: " + ex);
+                }
+                if (!equalBitmaps(bit1, test1)) {
+                    findBitmapDifferences(bit1, test1);
+                    fail("testAsync: file1 differs, check " + dir);
+                }
+            }
+        });
+        L(TAG, "asyncTest: awaiting result");
+        Thread.sleep(500); // ;_;
+        assertTrue("async-test.png does not exist!", new File(dir, "async-test.png").exists());
+        L(TAG, "asyncTest: done");
+    }
+
+    @SmallTest
+    public void testParcel() throws Exception {
+        final Bitmap originalbits = ((BitmapDrawable) getContext().getDrawable(R.drawable.landscape))
+                .getBitmap();
+
+        final ByteArrayOutputStream ostream = new ByteArrayOutputStream(
+                originalbits.getWidth() * originalbits.getHeight() * 2); // guess 50% compression
+        originalbits.compress(Bitmap.CompressFormat.PNG, 100, ostream);
+        final byte[] pngdata = ostream.toByteArray();
+
+        L("starting testParcel; bitmap: %d bytes, PNG: %d bytes",
+                originalbits.getByteCount(),
+                pngdata.length);
+
+        final File dir = getContext().getExternalFilesDir(null);
+        final File originalfile = new File(dir, "parcel-original.png");
+        new FileOutputStream(originalfile).write(pngdata);
+
+        ArrayList<Icon> imgs = new ArrayList<>();
+        final Icon file1 = Icon.createWithFilePath(originalfile.getAbsolutePath());
+        imgs.add(file1);
+        final Icon bit1 = Icon.createWithBitmap(originalbits);
+        imgs.add(bit1);
+        final Icon data1 = Icon.createWithData(pngdata, 0, pngdata.length);
+        imgs.add(data1);
+        final Icon res1 = Icon.createWithResource(getContext().getResources(), R.drawable.landscape);
+        imgs.add(res1);
+
+        ArrayList<Icon> test = new ArrayList<>();
+        final Parcel parcel = Parcel.obtain();
+        int pos = 0;
+        parcel.writeInt(imgs.size());
+        for (Icon img : imgs) {
+            img.writeToParcel(parcel, 0);
+            L("used %d bytes parceling: %s", parcel.dataPosition() - pos, img);
+            pos = parcel.dataPosition();
+        }
+
+        parcel.setDataPosition(0); // rewind
+        final int N = parcel.readInt();
+        for (int i=0; i<N; i++) {
+            Icon img = Icon.CREATOR.createFromParcel(parcel);
+            L("test %d: read from parcel: %s", i, img);
+            final File testfile = new File(dir,
+                    String.format("parcel-test%02d.png", i));
+
+            final Drawable draw1 = img.loadDrawable(mContext);
+            if (draw1 == null) {
+                fail("null drawable from img: " + img);
+            }
+            final Bitmap test1 = Bitmap.createBitmap(draw1.getIntrinsicWidth(),
+                    draw1.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+            draw1.setBounds(0, 0, test1.getWidth(), test1.getHeight());
+            draw1.draw(new Canvas(test1));
+
+            try {
+                test1.compress(Bitmap.CompressFormat.PNG, 100,
+                        new FileOutputStream(testfile));
+            } catch (java.io.FileNotFoundException ex) {
+                fail("couldn't create test file " + testfile + ": " + ex);
+            }
+            if (!equalBitmaps(originalbits, test1)) {
+                findBitmapDifferences(originalbits, test1);
+                fail(testfile + " differs from original: " + originalfile);
+            }
+
+        }
+    }
+
+
+    // ======== utils ========
+
+    static final char[] GRADIENT = " .:;+=xX$#".toCharArray();
+    static float[] hsv = new float[3];
+    static char colorToChar(int color) {
+        int sum = ((color >> 16) & 0xff)
+                + ((color >> 8)  & 0xff)
+                + ((color)       & 0xff);
+        return GRADIENT[sum * (GRADIENT.length-1) / (3*0xff)];
+    }
+    static void printBits(int[] a, int w, int h) {
+        final StringBuilder sb = new StringBuilder();
+        for (int i=0; i<w; i++) {
+            for (int j=0; j<h; j++) {
+                sb.append(colorToChar(a[i+w*j]));
+            }
+            sb.append('\n');
+        }
+        L(sb.toString());
+    }
+    static void printBits(Bitmap a) {
+        final int w = a.getWidth();
+        final int h = a.getHeight();
+        int[] aPix = new int[w * h];
+        printBits(aPix, w, h);
+    }
+    boolean equalBitmaps(Bitmap a, Bitmap b) {
+        if (a.getWidth() != b.getWidth() || a.getHeight() != b.getHeight()) return false;
+        
+        final int w = a.getWidth();
+        final int h = a.getHeight();
+        int[] aPix = new int[w * h];
+        int[] bPix = new int[w * h];
+
+        a.getPixels(aPix, 0, w, 0, 0, w, h);
+        b.getPixels(bPix, 0, w, 0, 0, w, h);
+
+        return Arrays.equals(aPix, bPix);
+    }
+
+    void findBitmapDifferences(Bitmap a, Bitmap b) {
+        if (a.getWidth() != b.getWidth() || a.getHeight() != b.getHeight()) {
+            L("different sizes: %dx%d vs %dx%d",
+                        a.getWidth(), a.getHeight(), b.getWidth(), b.getHeight());
+            return;
+        }
+        
+        final int w = a.getWidth();
+        final int h = a.getHeight();
+        int[] aPix = new int[w * h];
+        int[] bPix = new int[w * h];
+
+        a.getPixels(aPix, 0, w, 0, 0, w, h);
+        b.getPixels(bPix, 0, w, 0, 0, w, h);
+
+        L("bitmap a (%dx%d)", w, h);
+        printBits(aPix, w, h);
+        L("bitmap b (%dx%d)", w, h);
+        printBits(bPix, w, h);
+
+        StringBuffer sb = new StringBuffer("Different pixels: ");
+        for (int i=0; i<w; i++) {
+            for (int j=0; j<h; j++) {
+                if (aPix[i+w*j] != bPix[i+w*j]) {
+                    sb.append(" ").append(i).append(",").append(j);
+                }
+            }
+        }
+        L(sb.toString());
+    }
+}
diff --git a/include/androidfw/ResourceTypes.h b/include/androidfw/ResourceTypes.h
index df278c8..b15caeb 100644
--- a/include/androidfw/ResourceTypes.h
+++ b/include/androidfw/ResourceTypes.h
@@ -1631,6 +1631,7 @@
 
         status_t applyStyle(uint32_t resID, bool force=false);
         status_t setTo(const Theme& other);
+        status_t clear();
 
         /**
          * Retrieve a value in the theme.  If the theme defines this
@@ -1662,6 +1663,12 @@
                 uint32_t* inoutTypeSpecFlags = NULL,
                 ResTable_config* inoutConfig = NULL) const;
 
+        /**
+         * Returns a bit mask of configuration changes that will impact this
+         * theme (and thus require completely reloading it).
+         */
+        uint32_t getChangingConfigurations() const;
+
         void dumpToLog() const;
         
     private:
@@ -1688,6 +1695,7 @@
 
         const ResTable& mTable;
         package_info*   mPackages[Res_MAXPACKAGE];
+        uint32_t        mTypeSpecFlags;
     };
 
     void setParameters(const ResTable_config* params);
diff --git a/keystore/java/android/security/AndroidKeyPairGenerator.java b/keystore/java/android/security/AndroidKeyPairGenerator.java
index 3b25ba6..3f29c6a 100644
--- a/keystore/java/android/security/AndroidKeyPairGenerator.java
+++ b/keystore/java/android/security/AndroidKeyPairGenerator.java
@@ -54,13 +54,13 @@
 
     public static class RSA extends AndroidKeyPairGenerator {
         public RSA() {
-            super("RSA");
+            super(KeyStoreKeyProperties.Algorithm.RSA);
         }
     }
 
     public static class EC extends AndroidKeyPairGenerator {
         public EC() {
-            super("EC");
+            super(KeyStoreKeyProperties.Algorithm.EC);
         }
     }
 
@@ -83,15 +83,15 @@
     private android.security.KeyStore mKeyStore;
 
     private KeyPairGeneratorSpec mSpec;
-    private String mKeyAlgorithm;
+    private @KeyStoreKeyProperties.AlgorithmEnum String mKeyAlgorithm;
     private int mKeyType;
     private int mKeySize;
 
-    protected AndroidKeyPairGenerator(String algorithm) {
+    protected AndroidKeyPairGenerator(@KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
         mAlgorithm = algorithm;
     }
 
-    public String getAlgorithm() {
+    public @KeyStoreKeyProperties.AlgorithmEnum String getAlgorithm() {
         return mAlgorithm;
     }
 
@@ -197,7 +197,7 @@
         return certGen.generate(privateKey);
     }
 
-    private String getKeyAlgorithm(KeyPairGeneratorSpec spec) {
+    private @KeyStoreKeyProperties.AlgorithmEnum String getKeyAlgorithm(KeyPairGeneratorSpec spec) {
         String result = spec.getKeyType();
         if (result != null) {
             return result;
@@ -248,10 +248,11 @@
         }
     }
 
-    private static String getDefaultSignatureAlgorithmForKeyAlgorithm(String algorithm) {
-        if ("RSA".equalsIgnoreCase(algorithm)) {
+    private static String getDefaultSignatureAlgorithmForKeyAlgorithm(
+            @KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
+        if (KeyStoreKeyProperties.Algorithm.RSA.equalsIgnoreCase(algorithm)) {
             return "sha256WithRSA";
-        } else if ("EC".equalsIgnoreCase(algorithm)) {
+        } else if (KeyStoreKeyProperties.Algorithm.EC.equalsIgnoreCase(algorithm)) {
             return "sha256WithECDSA";
         } else {
             throw new IllegalArgumentException("Unsupported key type " + algorithm);
@@ -287,7 +288,7 @@
         }
 
         KeyPairGeneratorSpec spec = (KeyPairGeneratorSpec) params;
-        String keyAlgorithm = getKeyAlgorithm(spec);
+        @KeyStoreKeyProperties.AlgorithmEnum String keyAlgorithm = getKeyAlgorithm(spec);
         int keyType = KeyStore.getKeyTypeForAlgorithm(keyAlgorithm);
         if (keyType == -1) {
             throw new InvalidAlgorithmParameterException(
diff --git a/keystore/java/android/security/AndroidKeyStore.java b/keystore/java/android/security/AndroidKeyStore.java
index ed91d70..69d80e6 100644
--- a/keystore/java/android/security/AndroidKeyStore.java
+++ b/keystore/java/android/security/AndroidKeyStore.java
@@ -103,8 +103,9 @@
                     keyAliasInKeystore, null, null, keyCharacteristics);
             if ((errorCode != KeymasterDefs.KM_ERROR_OK)
                     && (errorCode != android.security.KeyStore.NO_ERROR)) {
-                throw new UnrecoverableKeyException("Failed to load information about key."
-                        + " Error code: " + errorCode);
+                throw (UnrecoverableKeyException)
+                        new UnrecoverableKeyException("Failed to load information about key")
+                                .initCause(mKeyStore.getInvalidKeyException(alias, errorCode));
             }
 
             int keymasterAlgorithm =
@@ -128,10 +129,11 @@
                 keymasterDigest = keymasterDigests.get(0);
             }
 
-            String keyAlgorithmString;
+            @KeyStoreKeyProperties.AlgorithmEnum String keyAlgorithmString;
             try {
-                keyAlgorithmString = KeymasterUtils.getJcaSecretKeyAlgorithm(
-                        keymasterAlgorithm, keymasterDigest);
+                keyAlgorithmString =
+                        KeyStoreKeyProperties.Algorithm.fromKeymasterSecretKeyAlgorithm(
+                                keymasterAlgorithm, keymasterDigest);
             } catch (IllegalArgumentException e) {
                 throw (UnrecoverableKeyException)
                         new UnrecoverableKeyException("Unsupported secret key type").initCause(e);
@@ -451,10 +453,10 @@
         int keymasterAlgorithm;
         int keymasterDigest;
         try {
-            keymasterAlgorithm = KeymasterUtils.getKeymasterAlgorithmFromJcaSecretKeyAlgorithm(
+            keymasterAlgorithm = KeyStoreKeyProperties.Algorithm.toKeymasterSecretKeyAlgorithm(
                     keyAlgorithmString);
             keymasterDigest =
-                    KeymasterUtils.getKeymasterDigestfromJcaSecretKeyAlgorithm(keyAlgorithmString);
+                    KeyStoreKeyProperties.Algorithm.toKeymasterDigest(keyAlgorithmString);
         } catch (IllegalArgumentException e) {
             throw new KeyStoreException("Unsupported secret key algorithm: " + keyAlgorithmString);
         }
@@ -465,8 +467,7 @@
         int[] keymasterDigests;
         if (params.isDigestsSpecified()) {
             // Digest(s) specified in parameters
-            keymasterDigests =
-                    KeymasterUtils.getKeymasterDigestsFromJcaDigestAlgorithms(params.getDigests());
+            keymasterDigests = KeyStoreKeyProperties.Digest.allToKeymaster(params.getDigests());
             if (keymasterDigest != -1) {
                 // Digest also specified in the JCA key algorithm name.
                 if (!com.android.internal.util.ArrayUtils.contains(
@@ -486,16 +487,6 @@
             }
         }
         args.addInts(KeymasterDefs.KM_TAG_DIGEST, keymasterDigests);
-        if (keymasterDigests.length > 0) {
-            // TODO: Remove MAC length constraint once Keymaster API no longer requires it.
-            // This code will blow up if mode than one digest is specified.
-            int digestOutputSizeBytes =
-                    KeymasterUtils.getDigestOutputSizeBytes(keymasterDigests[0]);
-            if (digestOutputSizeBytes != -1) {
-                // TODO: Switch to bits instead of bytes, once this is fixed in Keymaster
-                args.addInt(KeymasterDefs.KM_TAG_MAC_LENGTH, digestOutputSizeBytes);
-            }
-        }
         if (keymasterAlgorithm == KeymasterDefs.KM_ALGORITHM_HMAC) {
             if (keymasterDigests.length == 0) {
                 throw new KeyStoreException("At least one digest algorithm must be specified"
@@ -504,8 +495,8 @@
         }
 
         @KeyStoreKeyProperties.PurposeEnum int purposes = params.getPurposes();
-        int[] keymasterBlockModes = KeymasterUtils.getKeymasterBlockModesFromJcaBlockModes(
-                params.getBlockModes());
+        int[] keymasterBlockModes =
+                KeyStoreKeyProperties.BlockMode.allToKeymaster(params.getBlockModes());
         if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
                 && (params.isRandomizedEncryptionRequired())) {
             for (int keymasterBlockMode : keymasterBlockModes) {
@@ -513,8 +504,7 @@
                     throw new KeyStoreException(
                             "Randomized encryption (IND-CPA) required but may be violated by block"
                             + " mode: "
-                            + KeymasterUtils.getJcaBlockModeFromKeymasterBlockMode(
-                                    keymasterBlockMode)
+                            + KeyStoreKeyProperties.BlockMode.fromKeymaster(keymasterBlockMode)
                             + ". See KeyStoreParameter documentation.");
                 }
             }
@@ -523,11 +513,11 @@
             args.addInt(KeymasterDefs.KM_TAG_PURPOSE, keymasterPurpose);
         }
         args.addInts(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockModes);
-        int[] keymasterPaddings = ArrayUtils.concat(
-                KeymasterUtils.getKeymasterPaddingsFromJcaEncryptionPaddings(
-                        params.getEncryptionPaddings()),
-                KeymasterUtils.getKeymasterPaddingsFromJcaSignaturePaddings(
-                        params.getSignaturePaddings()));
+        if (params.getSignaturePaddings().length > 0) {
+            throw new KeyStoreException("Signature paddings not supported for symmetric keys");
+        }
+        int[] keymasterPaddings = KeyStoreKeyProperties.EncryptionPadding.allToKeymaster(
+                params.getEncryptionPaddings());
         args.addInts(KeymasterDefs.KM_TAG_PADDING, keymasterPaddings);
         KeymasterUtils.addUserAuthArgs(args,
                 params.getContext(),
diff --git a/keystore/java/android/security/AndroidKeyStoreBCWorkaroundProvider.java b/keystore/java/android/security/AndroidKeyStoreBCWorkaroundProvider.java
new file mode 100644
index 0000000..45329cf
--- /dev/null
+++ b/keystore/java/android/security/AndroidKeyStoreBCWorkaroundProvider.java
@@ -0,0 +1,83 @@
+/*
+ * 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.security;
+
+import java.security.Provider;
+
+/**
+ * {@link Provider} of JCA crypto operations operating on Android KeyStore keys.
+ *
+ * <p>This provider was separated out of {@link AndroidKeyStoreProvider} to work around the issue
+ * that Bouncy Castle provider incorrectly declares that it accepts arbitrary keys (incl. Android
+ * KeyStore ones). This causes JCA to select the Bouncy Castle's implementation of JCA crypto
+ * operations for Android KeyStore keys unless Android KeyStore's own implementations are installed
+ * as higher-priority than Bouncy Castle ones. The purpose of this provider is to do just that: to
+ * offer crypto operations operating on Android KeyStore keys and to be installed at higher priority
+ * than the Bouncy Castle provider.
+ *
+ * <p>Once Bouncy Castle provider is fixed, this provider can be merged into the
+ * {@code AndroidKeyStoreProvider}.
+ *
+ * @hide
+ */
+class AndroidKeyStoreBCWorkaroundProvider extends Provider {
+
+    // IMPLEMENTATION NOTE: Class names are hard-coded in this provider to avoid loading these
+    // classes when this provider is instantiated and installed early on during each app's
+    // initialization process.
+
+    private static final String PACKAGE_NAME = "android.security";
+    private static final String KEYSTORE_SECRET_KEY_CLASS_NAME =
+            PACKAGE_NAME + ".KeyStoreSecretKey";
+
+    AndroidKeyStoreBCWorkaroundProvider() {
+        super("AndroidKeyStoreBCWorkaround",
+                1.0,
+                "Android KeyStore security provider to work around Bouncy Castle");
+
+        // javax.crypto.Mac
+        putMacImpl("HmacSHA1", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA1");
+        putMacImpl("HmacSHA224", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA224");
+        putMacImpl("HmacSHA256", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA256");
+        putMacImpl("HmacSHA384", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA384");
+        putMacImpl("HmacSHA512", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA512");
+
+        // javax.crypto.Cipher
+        putSymmetricCipherImpl("AES/ECB/NoPadding",
+                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$ECB$NoPadding");
+        putSymmetricCipherImpl("AES/ECB/PKCS7Padding",
+                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$ECB$PKCS7Padding");
+
+        putSymmetricCipherImpl("AES/CBC/NoPadding",
+                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CBC$NoPadding");
+        putSymmetricCipherImpl("AES/CBC/PKCS7Padding",
+                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CBC$PKCS7Padding");
+
+        putSymmetricCipherImpl("AES/CTR/NoPadding",
+                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CTR$NoPadding");
+    }
+
+    private void putMacImpl(String algorithm, String implClass) {
+        put("Mac." + algorithm, implClass);
+        put("Mac." + algorithm + " SupportedKeyClasses", KEYSTORE_SECRET_KEY_CLASS_NAME);
+    }
+
+    private void putSymmetricCipherImpl(String transformation, String implClass) {
+        put("Cipher." + transformation, implClass);
+        put("Cipher." + transformation + " SupportedKeyClasses", KEYSTORE_SECRET_KEY_CLASS_NAME);
+    }
+}
diff --git a/keystore/java/android/security/AndroidKeyStoreProvider.java b/keystore/java/android/security/AndroidKeyStoreProvider.java
index 43f3b30..257ab54 100644
--- a/keystore/java/android/security/AndroidKeyStoreProvider.java
+++ b/keystore/java/android/security/AndroidKeyStoreProvider.java
@@ -17,6 +17,7 @@
 package android.security;
 
 import java.security.Provider;
+import java.security.Security;
 
 import javax.crypto.Cipher;
 import javax.crypto.Mac;
@@ -32,10 +33,12 @@
     // IMPLEMENTATION NOTE: Class names are hard-coded in this provider to avoid loading these
     // classes when this provider is instantiated and installed early on during each app's
     // initialization process.
+    //
+    // Crypto operations operating on the AndroidKeyStore keys must not be offered by this provider.
+    // Instead, they need to be offered by AndroidKeyStoreBCWorkaroundProvider. See its Javadoc
+    // for details.
 
     private static final String PACKAGE_NAME = "android.security";
-    private static final String KEYSTORE_SECRET_KEY_CLASS_NAME =
-            PACKAGE_NAME + ".KeyStoreSecretKey";
 
     public AndroidKeyStoreProvider() {
         super(PROVIDER_NAME, 1.0, "Android KeyStore security provider");
@@ -62,56 +65,52 @@
         putSecretKeyFactoryImpl("HmacSHA256");
         putSecretKeyFactoryImpl("HmacSHA384");
         putSecretKeyFactoryImpl("HmacSHA512");
+    }
 
-        // javax.crypto.Mac
-        putMacImpl("HmacSHA1", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA1");
-        putMacImpl("HmacSHA224", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA224");
-        putMacImpl("HmacSHA256", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA256");
-        putMacImpl("HmacSHA384", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA384");
-        putMacImpl("HmacSHA512", PACKAGE_NAME + ".KeyStoreHmacSpi$HmacSHA512");
+    /**
+     * Installs a new instance of this provider (and the
+     * {@link AndroidKeyStoreBCWorkaroundProvider}).
+     */
+    public static void install() {
+        Provider[] providers = Security.getProviders();
+        int bcProviderPosition = -1;
+        for (int position = 0; position < providers.length; position++) {
+            Provider provider = providers[position];
+            if ("BC".equals(provider.getName())) {
+                bcProviderPosition = position;
+                break;
+            }
+        }
 
-        // javax.crypto.Cipher
-        putSymmetricCipherImpl("AES/ECB/NoPadding",
-                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$ECB$NoPadding");
-        putSymmetricCipherImpl("AES/ECB/PKCS7Padding",
-                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$ECB$PKCS7Padding");
-
-        putSymmetricCipherImpl("AES/CBC/NoPadding",
-                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CBC$NoPadding");
-        putSymmetricCipherImpl("AES/CBC/PKCS7Padding",
-                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CBC$PKCS7Padding");
-
-        putSymmetricCipherImpl("AES/CTR/NoPadding",
-                PACKAGE_NAME + ".KeyStoreCipherSpi$AES$CTR$NoPadding");
+        Security.addProvider(new AndroidKeyStoreProvider());
+        Provider workaroundProvider = new AndroidKeyStoreBCWorkaroundProvider();
+        if (bcProviderPosition != -1) {
+            // Bouncy Castle provider found -- install the workaround provider above it.
+            Security.insertProviderAt(workaroundProvider, bcProviderPosition);
+        } else {
+            // Bouncy Castle provider not found -- install the workaround provider at lowest
+            // priority.
+            Security.addProvider(workaroundProvider);
+        }
     }
 
     private void putSecretKeyFactoryImpl(String algorithm) {
         put("SecretKeyFactory." + algorithm, PACKAGE_NAME + ".KeyStoreSecretKeyFactorySpi");
     }
 
-    private void putMacImpl(String algorithm, String implClass) {
-        put("Mac." + algorithm, implClass);
-        put("Mac." + algorithm + " SupportedKeyClasses", KEYSTORE_SECRET_KEY_CLASS_NAME);
-    }
-
-    private void putSymmetricCipherImpl(String transformation, String implClass) {
-        put("Cipher." + transformation, implClass);
-        put("Cipher." + transformation + " SupportedKeyClasses", KEYSTORE_SECRET_KEY_CLASS_NAME);
-    }
-
     /**
      * Gets the {@link KeyStore} operation handle corresponding to the provided JCA crypto
      * primitive.
      *
      * <p>The following primitives are supported: {@link Cipher} and {@link Mac}.
      *
-     * @return KeyStore operation handle or {@code null} if the provided primitive's KeyStore
-     *         operation is not in progress.
+     * @return KeyStore operation handle or {@code 0} if the provided primitive's KeyStore operation
+     *         is not in progress.
      *
      * @throws IllegalArgumentException if the provided primitive is not supported or is not backed
      *         by AndroidKeyStore provider.
      */
-    public static Long getKeyStoreOperationHandle(Object cryptoPrimitive) {
+    public static long getKeyStoreOperationHandle(Object cryptoPrimitive) {
         if (cryptoPrimitive == null) {
             throw new NullPointerException();
         }
diff --git a/keystore/java/android/security/EcIesParameterSpec.java b/keystore/java/android/security/EcIesParameterSpec.java
index a3e5aec..af93519 100644
--- a/keystore/java/android/security/EcIesParameterSpec.java
+++ b/keystore/java/android/security/EcIesParameterSpec.java
@@ -1,6 +1,8 @@
 package android.security;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -50,7 +52,11 @@
 public class EcIesParameterSpec implements AlgorithmParameterSpec {
 
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef(value = {PointFormat.UNCOMPRESSED, PointFormat.COMPRESSED})
+    @IntDef({
+        PointFormat.UNSPECIFIED,
+        PointFormat.UNCOMPRESSED,
+        PointFormat.COMPRESSED,
+        })
     public @interface PointFormatEnum {}
 
     /**
@@ -127,6 +133,7 @@
      * Returns KEM KDF algorithm (e.g., {@code HKDFwithSHA256} or {@code KDF1withSHA1}) or
      * {@code null} if not specified.
      */
+    @Nullable
     public String getKemKdfAlgorithm() {
         return mKemKdfAlgorithm;
     }
@@ -138,6 +145,7 @@
      * @see Cipher#getInstance(String)
      * @see #getDemCipherKeySize()
      */
+    @Nullable
     public String getDemCipherTransformation() {
         return mDemCipherTransformation;
     }
@@ -158,6 +166,7 @@
      * @see Mac#getInstance(String)
      * @see #getDemMacKeySize()
      */
+    @Nullable
     public String getDemMacAlgorithm() {
         return mDemMacAlgorithm;
     }
@@ -194,7 +203,8 @@
          * Sets KEM KDF algorithm. For example, {@code HKDFwithSHA256}, {@code KDF2withSHA256}, or
          * {@code KDF1withSHA1}.
          */
-        public Builder setKemKdfAlgorithm(String algorithm) {
+        @NonNull
+        public Builder setKemKdfAlgorithm(@Nullable String algorithm) {
             mKemKdfAlgorithm = algorithm;
             return this;
         }
@@ -205,7 +215,8 @@
          *
          * @see Cipher#getInstance(String)
          */
-        public Builder setDemCipherTransformation(String transformation) {
+        @NonNull
+        public Builder setDemCipherTransformation(@Nullable String transformation) {
             mDemCipherTransformation = transformation;
             return this;
         }
@@ -217,6 +228,7 @@
          *
          * @see #setDemCipherTransformation(String)
          */
+        @NonNull
         public Builder setDemCipherKeySize(int sizeBits) {
             mDemCipherKeySize = sizeBits;
             return this;
@@ -227,7 +239,8 @@
          *
          * @see Mac#getInstance(String)
          */
-        public Builder setDemMacAlgorithm(String algorithm) {
+        @NonNull
+        public Builder setDemMacAlgorithm(@Nullable String algorithm) {
             mDemMacAlgorithm = algorithm;
             return this;
         }
@@ -239,6 +252,7 @@
          *
          * @see #setDemCipherKeySize(int)
          */
+        @NonNull
         public Builder setDemMacKeySize(int sizeBits) {
             mDemMacKeySize = sizeBits;
             return this;
@@ -247,6 +261,7 @@
         /**
          * Returns a new {@link EcIesParameterSpec} based on the current state of this builder.
          */
+        @NonNull
         public EcIesParameterSpec build() {
             int demMacKeySize = (mDemMacKeySize != -1) ? mDemMacKeySize : mDemCipherKeySize;
             return new EcIesParameterSpec(
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index e9c24dd..d3dbebf 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -15,6 +15,8 @@
  */
 package android.security;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.PendingIntent;
 import android.content.ComponentName;
@@ -217,6 +219,7 @@
      * successfully installed, otherwise {@link
      * Activity#RESULT_CANCELED} will be returned.
      */
+    @NonNull
     public static Intent createInstallIntent() {
         Intent intent = new Intent(ACTION_INSTALL);
         intent.setClassName(CERT_INSTALLER_PACKAGE,
@@ -261,8 +264,10 @@
      * @param alias The alias to preselect if available, or null if
      *     unavailable.
      */
-    public static void choosePrivateKeyAlias(Activity activity, KeyChainAliasCallback response,
-            String[] keyTypes, Principal[] issuers, String host, int port, String alias) {
+    public static void choosePrivateKeyAlias(@NonNull Activity activity,
+            @NonNull KeyChainAliasCallback response,
+            @KeyStoreKeyProperties.AlgorithmEnum String[] keyTypes, Principal[] issuers,
+            @Nullable String host, int port, @Nullable String alias) {
         choosePrivateKeyAlias(activity, response, keyTypes, issuers, host, port, null, alias);
     }
 
@@ -305,10 +310,10 @@
      * @param alias The alias to preselect if available, or null if
      *     unavailable.
      */
-    public static void choosePrivateKeyAlias(Activity activity, KeyChainAliasCallback response,
-                                             String[] keyTypes, Principal[] issuers,
-                                             String host, int port, String url,
-                                             String alias) {
+    public static void choosePrivateKeyAlias(@NonNull Activity activity,
+            @NonNull KeyChainAliasCallback response,
+            @KeyStoreKeyProperties.AlgorithmEnum String[] keyTypes, Principal[] issuers,
+            @Nullable String host, int port, @Nullable String url, @Nullable String alias) {
         /*
          * TODO currently keyTypes, issuers are unused. They are meant
          * to follow the semantics and purpose of X509KeyManager
@@ -361,7 +366,8 @@
      * returned via {@link KeyChainAliasCallback#alias}.
      * @throws KeyChainException if the alias was valid but there was some problem accessing it.
      */
-    public static PrivateKey getPrivateKey(Context context, String alias)
+    @Nullable
+    public static PrivateKey getPrivateKey(@NonNull Context context, @NonNull String alias)
             throws KeyChainException, InterruptedException {
         if (alias == null) {
             throw new NullPointerException("alias == null");
@@ -396,8 +402,9 @@
      * returned via {@link KeyChainAliasCallback#alias}.
      * @throws KeyChainException if the alias was valid but there was some problem accessing it.
      */
-    public static X509Certificate[] getCertificateChain(Context context, String alias)
-            throws KeyChainException, InterruptedException {
+    @Nullable
+    public static X509Certificate[] getCertificateChain(@NonNull Context context,
+            @NonNull String alias) throws KeyChainException, InterruptedException {
         if (alias == null) {
             throw new NullPointerException("alias == null");
         }
@@ -431,9 +438,11 @@
      * specific {@code PrivateKey} type indicated by {@code algorithm} (e.g.,
      * "RSA").
      */
-    public static boolean isKeyAlgorithmSupported(String algorithm) {
+    public static boolean isKeyAlgorithmSupported(
+            @NonNull @KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
         final String algUpper = algorithm.toUpperCase(Locale.US);
-        return "EC".equals(algUpper) || "RSA".equals(algUpper);
+        return KeyStoreKeyProperties.Algorithm.EC.equals(algUpper)
+                || KeyStoreKeyProperties.Algorithm.RSA.equals(algUpper);
     }
 
     /**
@@ -443,7 +452,8 @@
      * hardware support that can be used to bind keys to the device in a way
      * that makes it non-exportable.
      */
-    public static boolean isBoundKeyAlgorithm(String algorithm) {
+    public static boolean isBoundKeyAlgorithm(
+            @NonNull @KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
         if (!isKeyAlgorithmSupported(algorithm)) {
             return false;
         }
@@ -452,7 +462,8 @@
     }
 
     /** @hide */
-    public static X509Certificate toCertificate(byte[] bytes) {
+    @NonNull
+    public static X509Certificate toCertificate(@NonNull byte[] bytes) {
         if (bytes == null) {
             throw new IllegalArgumentException("bytes == null");
         }
@@ -493,14 +504,14 @@
      *
      * Caller should call unbindService on the result when finished.
      */
-    public static KeyChainConnection bind(Context context) throws InterruptedException {
+    public static KeyChainConnection bind(@NonNull Context context) throws InterruptedException {
         return bindAsUser(context, Process.myUserHandle());
     }
 
     /**
      * @hide
      */
-    public static KeyChainConnection bindAsUser(Context context, UserHandle user)
+    public static KeyChainConnection bindAsUser(@NonNull Context context, UserHandle user)
             throws InterruptedException {
         if (context == null) {
             throw new NullPointerException("context == null");
@@ -534,7 +545,7 @@
         return new KeyChainConnection(context, keyChainServiceConnection, q.take());
     }
 
-    private static void ensureNotOnMainThread(Context context) {
+    private static void ensureNotOnMainThread(@NonNull Context context) {
         Looper looper = Looper.myLooper();
         if (looper != null && looper == context.getMainLooper()) {
             throw new IllegalStateException(
diff --git a/keystore/java/android/security/KeyChainAliasCallback.java b/keystore/java/android/security/KeyChainAliasCallback.java
index 2500863..8e41377 100644
--- a/keystore/java/android/security/KeyChainAliasCallback.java
+++ b/keystore/java/android/security/KeyChainAliasCallback.java
@@ -15,6 +15,8 @@
  */
 package android.security;
 
+import android.annotation.Nullable;
+
 /**
  * The KeyChainAliasCallback is the callback for {@link
  * KeyChain#choosePrivateKeyAlias}.
@@ -25,5 +27,5 @@
      * Called with the alias of the certificate chosen by the user, or
      * null if no value was chosen.
      */
-    public void alias(String alias);
+    public void alias(@Nullable String alias);
 }
diff --git a/keystore/java/android/security/KeyGeneratorSpec.java b/keystore/java/android/security/KeyGeneratorSpec.java
index 8f135a6..404f939 100644
--- a/keystore/java/android/security/KeyGeneratorSpec.java
+++ b/keystore/java/android/security/KeyGeneratorSpec.java
@@ -16,6 +16,10 @@
 
 package android.security;
 
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.KeyguardManager;
 import android.content.Context;
 import android.text.TextUtils;
 
@@ -24,19 +28,53 @@
 
 import javax.crypto.Cipher;
 import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
 
 /**
- * {@link AlgorithmParameterSpec} for initializing a {@code KeyGenerator} that works with
- * <a href="{@docRoot}training/articles/keystore.html">Android KeyStore facility</a>.
+ * {@link AlgorithmParameterSpec} for initializing a {@link KeyGenerator} of the
+ * <a href="{@docRoot}training/articles/keystore.html">Android KeyStore facility</a>. This class
+ * specifies whether user authentication is required for using the key, what uses the key is
+ * authorized for (e.g., only in {@code CBC} mode), whether the key should be encrypted at rest, the
+ * key's and validity start and end dates.
  *
- * <p>The Android KeyStore facility is accessed through a {@link KeyGenerator} API using the
- * {@code AndroidKeyStore} provider. The {@code context} passed in may be used to pop up some UI to
- * ask the user to unlock or initialize the Android KeyStore facility.
+ * <p>To generate a key, create an instance of this class using the {@link Builder}, initialize a
+ * {@code KeyGenerator} of the desired key type (e.g., {@code AES} or {@code HmacSHA256}) from the
+ * {@code AndroidKeyStore} provider with the {@code KeyGeneratorSpec} instance, and then generate a
+ * key using {@link KeyGenerator#generateKey()}.
  *
- * <p>After generation, the {@code keyStoreAlias} is used with the
- * {@link java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter)}
- * interface to retrieve the {@link SecretKey}.
+ * <p>The generated key will be returned by the {@code KeyGenerator} and also stored in the Android
+ * KeyStore under the alias specified in this {@code KeyGeneratorSpec}. To obtain the key from the
+ * Android KeyStore use
+ * {@link java.security.KeyStore#getKey(String, char[]) KeyStore.getKey(String, null)} or
+ * {@link java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter) KeyStore.getEntry(String, null)}.
+ *
+ * <p>NOTE: The key material of the keys generating using the {@code KeyGeneratorSpec} is not
+ * accessible.
+ *
+ * <p><h3>Example</h3>
+ * The following example illustrates how to generate an HMAC key in the Android KeyStore under alias
+ * {@code key1} authorized to be used only for HMAC with SHA-256 digest and only if the user has
+ * been authenticated within the last five minutes.
+ * <pre> {@code
+ * KeyGenerator keyGenerator = KeyGenerator.getInstance(
+ *         KeyStoreKeyProperties.Algorithm.HMAC_SHA256,
+ *         "AndroidKeyStore");
+ * keyGenerator.initialize(
+ *         new KeyGeneratorSpec.Builder(context)
+ *                 .setAlias("key1")
+ *                 .setPurposes(KeyStoreKeyProperties.Purpose.SIGN
+ *                         | KeyStoreKeyProperties.Purpose.VERIFY)
+ *                 // Only permit this key to be used if the user authenticated
+ *                 // within the last five minutes.
+ *                 .setUserAuthenticationRequired(true)
+ *                 .setUserAuthenticationValidityDurationSeconds(5 * 60)
+ *                 .build());
+ * SecretKey key = keyGenerator.generateKey();
+ *
+ * // The key can also be obtained from the Android KeyStore any time as follows:
+ * KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
+ * keyStore.load(null);
+ * SecretKey key = (SecretKey) keyStore.getKey("key1", null);
+ * }</pre>
  */
 public class KeyGeneratorSpec implements AlgorithmParameterSpec {
 
@@ -48,8 +86,8 @@
     private final Date mKeyValidityForOriginationEnd;
     private final Date mKeyValidityForConsumptionEnd;
     private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
-    private final String[] mEncryptionPaddings;
-    private final String[] mBlockModes;
+    private final @KeyStoreKeyProperties.EncryptionPaddingEnum String[] mEncryptionPaddings;
+    private final @KeyStoreKeyProperties.BlockModeEnum String[] mBlockModes;
     private final boolean mRandomizedEncryptionRequired;
     private final boolean mUserAuthenticationRequired;
     private final int mUserAuthenticationValidityDurationSeconds;
@@ -63,8 +101,8 @@
             Date keyValidityForOriginationEnd,
             Date keyValidityForConsumptionEnd,
             @KeyStoreKeyProperties.PurposeEnum int purposes,
-            String[] encryptionPaddings,
-            String[] blockModes,
+            @KeyStoreKeyProperties.EncryptionPaddingEnum String[] encryptionPaddings,
+            @KeyStoreKeyProperties.BlockModeEnum String[] blockModes,
             boolean randomizedEncryptionRequired,
             boolean userAuthenticationRequired,
             int userAuthenticationValidityDurationSeconds) {
@@ -128,6 +166,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityStart() {
         return mKeyValidityStart;
     }
@@ -137,6 +176,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForConsumptionEnd() {
         return mKeyValidityForConsumptionEnd;
     }
@@ -146,6 +186,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForOriginationEnd() {
         return mKeyValidityForOriginationEnd;
     }
@@ -160,14 +201,16 @@
     /**
      * Gets the set of padding schemes with which the key can be used when encrypting/decrypting.
      */
-    public String[] getEncryptionPaddings() {
+    @NonNull
+    public @KeyStoreKeyProperties.EncryptionPaddingEnum String[] getEncryptionPaddings() {
         return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
     }
 
     /**
      * Gets the set of block modes with which the key can be used.
      */
-    public String[] getBlockModes() {
+    @NonNull
+    public @KeyStoreKeyProperties.BlockModeEnum String[] getBlockModes() {
         return ArrayUtils.cloneIfNotEmpty(mBlockModes);
     }
 
@@ -195,17 +238,20 @@
 
     /**
      * Gets the duration of time (seconds) for which this key can be used after the user is
-     * successfully authenticated.
+     * successfully authenticated. This has effect only if user authentication is required.
      *
-     * @return duration in seconds or {@code -1} if not restricted. {@code 0} means authentication
-     *         is required for every use of the key.
+     * @return duration in seconds or {@code -1} if authentication is required for every use of the
+     *         key.
+     *
+     * @see #isUserAuthenticationRequired()
      */
     public int getUserAuthenticationValidityDurationSeconds() {
         return mUserAuthenticationValidityDurationSeconds;
     }
 
     /**
-     * Returns {@code true} if the key must be encrypted in the {@link java.security.KeyStore}.
+     * Returns {@code true} if the key must be encrypted at rest. This will protect the key with the
+     * secure lock screen credential (e.g., password, PIN, or pattern).
      */
     public boolean isEncryptionRequired() {
         return (mFlags & KeyStore.FLAG_ENCRYPTED) != 0;
@@ -220,8 +266,8 @@
         private Date mKeyValidityForOriginationEnd;
         private Date mKeyValidityForConsumptionEnd;
         private @KeyStoreKeyProperties.PurposeEnum int mPurposes;
-        private String[] mEncryptionPaddings;
-        private String[] mBlockModes;
+        private @KeyStoreKeyProperties.EncryptionPaddingEnum String[] mEncryptionPaddings;
+        private @KeyStoreKeyProperties.BlockModeEnum String[] mBlockModes;
         private boolean mRandomizedEncryptionRequired = true;
         private boolean mUserAuthenticationRequired;
         private int mUserAuthenticationValidityDurationSeconds = -1;
@@ -231,7 +277,7 @@
          * {@code context} passed in may be used to pop up some UI to ask the user to unlock or
          * initialize the Android KeyStore facility.
          */
-        public Builder(Context context) {
+        public Builder(@NonNull Context context) {
             if (context == null) {
                 throw new NullPointerException("context == null");
             }
@@ -244,7 +290,8 @@
          *
          * <p>The alias must be provided. There is no default.
          */
-        public Builder setAlias(String alias) {
+        @NonNull
+        public Builder setAlias(@NonNull String alias) {
             if (alias == null) {
                 throw new NullPointerException("alias == null");
             }
@@ -258,22 +305,27 @@
          * <p>By default, the key size will be determines based on the key algorithm. For example,
          * for {@code HmacSHA256}, the key size will default to {@code 256}.
          */
+        @NonNull
         public Builder setKeySize(int keySize) {
             mKeySize = keySize;
             return this;
         }
 
         /**
-         * Indicates that this key must be encrypted at rest on storage. Note that enabling this
-         * will require that the user enable a strong lock screen (e.g., PIN, password) before
-         * creating or using the generated key is successful.
+         * Indicates that this key must be encrypted at rest. This will protect the key with the
+         * secure lock screen credential (e.g., password, PIN, or pattern).
+         *
+         * <p>Note that this feature requires that the secure lock screen (e.g., password, PIN,
+         * pattern) is set up, otherwise key generation will fail. Moreover, this key will be
+         * deleted when the secure lock screen is disabled or reset (e.g., by the user or a Device
+         * Administrator). Finally, this key cannot be used until the user unlocks the secure lock
+         * screen after boot.
+         *
+         * @see KeyguardManager#isDeviceSecure()
          */
-        public Builder setEncryptionRequired(boolean required) {
-            if (required) {
-                mFlags |= KeyStore.FLAG_ENCRYPTED;
-            } else {
-                mFlags &= ~KeyStore.FLAG_ENCRYPTED;
-            }
+        @NonNull
+        public Builder setEncryptionRequired() {
+            mFlags |= KeyStore.FLAG_ENCRYPTED;
             return this;
         }
 
@@ -284,6 +336,7 @@
          *
          * @see #setKeyValidityEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityStart(Date startDate) {
             mKeyValidityStart = startDate;
             return this;
@@ -298,6 +351,7 @@
          * @see #setKeyValidityForConsumptionEnd(Date)
          * @see #setKeyValidityForOriginationEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityEnd(Date endDate) {
             setKeyValidityForOriginationEnd(endDate);
             setKeyValidityForConsumptionEnd(endDate);
@@ -311,6 +365,7 @@
          *
          * @see #setKeyValidityForConsumptionEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityForOriginationEnd(Date endDate) {
             mKeyValidityForOriginationEnd = endDate;
             return this;
@@ -324,6 +379,7 @@
          *
          * @see #setKeyValidityForOriginationEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityForConsumptionEnd(Date endDate) {
             mKeyValidityForConsumptionEnd = endDate;
             return this;
@@ -334,6 +390,7 @@
          *
          * <p>This must be specified for all keys. There is no default.
          */
+        @NonNull
         public Builder setPurposes(@KeyStoreKeyProperties.PurposeEnum int purposes) {
             mPurposes = purposes;
             return this;
@@ -346,7 +403,9 @@
          *
          * <p>This must be specified for keys which are used for encryption/decryption.
          */
-        public Builder setEncryptionPaddings(String... paddings) {
+        @NonNull
+        public Builder setEncryptionPaddings(
+                @KeyStoreKeyProperties.EncryptionPaddingEnum String... paddings) {
             mEncryptionPaddings = ArrayUtils.cloneIfNotEmpty(paddings);
             return this;
         }
@@ -357,7 +416,8 @@
          *
          * <p>This must be specified for encryption/decryption keys.
          */
-        public Builder setBlockModes(String... blockModes) {
+        @NonNull
+        public Builder setBlockModes(@KeyStoreKeyProperties.BlockModeEnum String... blockModes) {
             mBlockModes = ArrayUtils.cloneIfNotEmpty(blockModes);
             return this;
         }
@@ -394,6 +454,7 @@
          * ciphertext.</li>
          * </ul>
          */
+        @NonNull
         public Builder setRandomizedEncryptionRequired(boolean required) {
             mRandomizedEncryptionRequired = required;
             return this;
@@ -414,6 +475,7 @@
          *
          * @see #setUserAuthenticationValidityDurationSeconds(int)
          */
+        @NonNull
         public Builder setUserAuthenticationRequired(boolean required) {
             mUserAuthenticationRequired = required;
             return this;
@@ -425,12 +487,14 @@
          *
          * <p>By default, the user needs to authenticate for every use of the key.
          *
-         * @param seconds duration in seconds or {@code 0} if the user needs to authenticate for
+         * @param seconds duration in seconds or {@code -1} if the user needs to authenticate for
          *        every use of the key.
          *
          * @see #setUserAuthenticationRequired(boolean)
          */
-        public Builder setUserAuthenticationValidityDurationSeconds(int seconds) {
+        @NonNull
+        public Builder setUserAuthenticationValidityDurationSeconds(
+                @IntRange(from = -1) int seconds) {
             mUserAuthenticationValidityDurationSeconds = seconds;
             return this;
         }
@@ -440,6 +504,7 @@
          *
          * @throws IllegalArgumentException if a required field is missing or violates a constraint.
          */
+        @NonNull
         public KeyGeneratorSpec build() {
             return new KeyGeneratorSpec(mContext,
                     mKeystoreAlias,
diff --git a/keystore/java/android/security/KeyPairGeneratorSpec.java b/keystore/java/android/security/KeyPairGeneratorSpec.java
index d6d3789..2086ccb 100644
--- a/keystore/java/android/security/KeyPairGeneratorSpec.java
+++ b/keystore/java/android/security/KeyPairGeneratorSpec.java
@@ -16,10 +16,15 @@
 
 package android.security;
 
+import android.app.KeyguardManager;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.text.TextUtils;
 
 import java.math.BigInteger;
+import java.security.KeyPairGenerator;
 import java.security.NoSuchAlgorithmException;
 import java.security.PrivateKey;
 import java.security.cert.Certificate;
@@ -29,26 +34,64 @@
 import javax.security.auth.x500.X500Principal;
 
 /**
- * This provides the required parameters needed for initializing the
- * {@code KeyPairGenerator} that works with
- * <a href="{@docRoot}training/articles/keystore.html">Android KeyStore
- * facility</a>. The Android KeyStore facility is accessed through a
- * {@link java.security.KeyPairGenerator} API using the {@code AndroidKeyStore}
- * provider. The {@code context} passed in may be used to pop up some UI to ask
- * the user to unlock or initialize the Android KeyStore facility.
- * <p>
- * After generation, the {@code keyStoreAlias} is used with the
- * {@link java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter)}
- * interface to retrieve the {@link PrivateKey} and its associated
- * {@link Certificate} chain.
- * <p>
- * The KeyPair generator will create a self-signed certificate with the subject
- * as its X.509v3 Subject Distinguished Name and as its X.509v3 Issuer
- * Distinguished Name along with the other parameters specified with the
- * {@link Builder}.
- * <p>
- * The self-signed X.509 certificate may be replaced at a later time by a
- * certificate signed by a real Certificate Authority.
+ * {@link AlgorithmParameterSpec} for initializing a {@link KeyPairGenerator} of the
+ * <a href="{@docRoot}training/articles/keystore.html">Android KeyStore facility</a>. This class
+ * specifies whether user authentication is required for using the private key, what uses the
+ * private key is authorized for (e.g., only for signing -- decryption not permitted), whether the
+ * private key should be encrypted at rest, the private key's and validity start and end dates.
+ *
+ * <p>To generate a key pair, create an instance of this class using the {@link Builder}, initialize
+ * a {@code KeyPairGenerator} of the desired key type (e.g., {@code EC} or {@code RSA}) from the
+ * {@code AndroidKeyStore} provider with the {@code KeyPairGeneratorSpec} instance, and then
+ * generate a key pair using {@link KeyPairGenerator#generateKeyPair()}.
+ *
+ * <p>The generated key pair will be returned by the {@code KeyPairGenerator} and also stored in the
+ * Android KeyStore under the alias specified in this {@code KeyPairGeneratorSpec}. To obtain the
+ * private key from the Android KeyStore use
+ * {@link java.security.KeyStore#getKey(String, char[]) KeyStore.getKey(String, null)} or
+ * {@link java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter) KeyStore.getEntry(String, null)}.
+ * To obtain the public key from the Android KeyStore use
+ * {@link java.security.KeyStore#getCertificate(String)} and then
+ * {@link Certificate#getPublicKey()}.
+ *
+ * <p>A self-signed X.509 certificate will be also generated and stored in the Android KeyStore.
+ * This is because the {@link java.security.KeyStore} abstraction does not support storing key pairs
+ * without a certificate. The subject, serial number, and validity dates of the certificate can be
+ * specified in this {@code KeyPairGeneratorSpec}. The self-signed certificate may be replaced at a
+ * later time by a certificate signed by a Certificate Authority (CA).
+ *
+ * <p>NOTE: The key material of the private keys generating using the {@code KeyPairGeneratorSpec}
+ * is not accessible. The key material of the public keys is accessible.
+ *
+ * <p><h3>Example</h3>
+ * The following example illustrates how to generate an EC key pair in the Android KeyStore under
+ * alias {@code key2} authorized to be used only for signing using SHA-256, SHA-384, or SHA-512
+ * digest and only if the user has been authenticated within the last five minutes.
+ * <pre> {@code
+ * KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(
+ *         KeyStoreKeyProperties.Algorithm.EC,
+ *         "AndroidKeyStore");
+ * keyPairGenerator.initialize(
+ *         new KeyGeneratorSpec.Builder(context)
+ *                 .setAlias("key2")
+ *                 .setPurposes(KeyStoreKeyProperties.Purpose.SIGN
+ *                         | KeyStoreKeyProperties.Purpose.VERIFY)
+ *                 .setDigests(KeyStoreKeyProperties.Digest.SHA256
+ *                         | KeyStoreKeyProperties.Digest.SHA384
+ *                         | KeyStoreKeyProperties.Digest.SHA512)
+ *                 // Only permit this key to be used if the user authenticated
+ *                 // within the last five minutes.
+ *                 .setUserAuthenticationRequired(true)
+ *                 .setUserAuthenticationValidityDurationSeconds(5 * 60)
+ *                 .build());
+ * KeyPair keyPair = keyPairGenerator.generateKey();
+ *
+ * // The key pair can also be obtained from the Android KeyStore any time as follows:
+ * KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
+ * keyStore.load(null);
+ * PrivateKey privateKey = (PrivateKey) keyStore.getKey("key2", null);
+ * PublicKey publicKey = keyStore.getCertificate("key2").getPublicKey();
+ * }</pre>
  */
 public final class KeyPairGeneratorSpec implements AlgorithmParameterSpec {
 
@@ -85,13 +128,13 @@
 
     private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
 
-    private final String[] mDigests;
+    private final @KeyStoreKeyProperties.DigestEnum String[] mDigests;
 
-    private final String[] mEncryptionPaddings;
+    private final @KeyStoreKeyProperties.EncryptionPaddingEnum String[] mEncryptionPaddings;
 
-    private final String[] mSignaturePaddings;
+    private final @KeyStoreKeyProperties.SignaturePaddingEnum String[] mSignaturePaddings;
 
-    private final String[] mBlockModes;
+    private final @KeyStoreKeyProperties.BlockModeEnum String[] mBlockModes;
 
     private final boolean mRandomizedEncryptionRequired;
 
@@ -138,10 +181,10 @@
             Date keyValidityForOriginationEnd,
             Date keyValidityForConsumptionEnd,
             @KeyStoreKeyProperties.PurposeEnum int purposes,
-            String[] digests,
-            String[] encryptionPaddings,
-            String[] signaturePaddings,
-            String[] blockModes,
+            @KeyStoreKeyProperties.DigestEnum String[] digests,
+            @KeyStoreKeyProperties.EncryptionPaddingEnum String[] encryptionPaddings,
+            @KeyStoreKeyProperties.SignaturePaddingEnum String[] signaturePaddings,
+            @KeyStoreKeyProperties.BlockModeEnum String[] blockModes,
             boolean randomizedEncryptionRequired,
             boolean userAuthenticationRequired,
             int userAuthenticationValidityDurationSeconds) {
@@ -246,7 +289,8 @@
     /**
      * Returns the key type (e.g., "EC", "RSA") specified by this parameter.
      */
-    public String getKeyType() {
+    @Nullable
+    public @KeyStoreKeyProperties.AlgorithmEnum String getKeyType() {
         return mKeyType;
     }
 
@@ -263,6 +307,7 @@
      * Returns the {@link AlgorithmParameterSpec} that will be used for creation
      * of the key pair.
      */
+    @NonNull
     public AlgorithmParameterSpec getAlgorithmParameterSpec() {
         return mSpec;
     }
@@ -271,6 +316,7 @@
      * Gets the subject distinguished name to be used on the X.509 certificate
      * that will be put in the {@link java.security.KeyStore}.
      */
+    @NonNull
     public X500Principal getSubjectDN() {
         return mSubjectDN;
     }
@@ -279,6 +325,7 @@
      * Gets the serial number to be used on the X.509 certificate that will be
      * put in the {@link java.security.KeyStore}.
      */
+    @NonNull
     public BigInteger getSerialNumber() {
         return mSerialNumber;
     }
@@ -287,6 +334,7 @@
      * Gets the start date to be used on the X.509 certificate that will be put
      * in the {@link java.security.KeyStore}.
      */
+    @NonNull
     public Date getStartDate() {
         return mStartDate;
     }
@@ -295,6 +343,7 @@
      * Gets the end date to be used on the X.509 certificate that will be put in
      * the {@link java.security.KeyStore}.
      */
+    @NonNull
     public Date getEndDate() {
         return mEndDate;
     }
@@ -307,8 +356,8 @@
     }
 
     /**
-     * Returns {@code true} if this parameter will require generated keys to be
-     * encrypted in the {@link java.security.KeyStore}.
+     * Returns {@code true} if the key must be encrypted at rest. This will protect the key pair
+     * with the secure lock screen credential (e.g., password, PIN, or pattern).
      */
     public boolean isEncryptionRequired() {
         return (mFlags & KeyStore.FLAG_ENCRYPTED) != 0;
@@ -319,6 +368,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityStart() {
         return mKeyValidityStart;
     }
@@ -329,6 +379,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForConsumptionEnd() {
         return mKeyValidityForConsumptionEnd;
     }
@@ -338,6 +389,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForOriginationEnd() {
         return mKeyValidityForOriginationEnd;
     }
@@ -352,28 +404,32 @@
     /**
      * Gets the set of digest algorithms with which the key can be used.
      */
-    public String[] getDigests() {
+    @NonNull
+    public @KeyStoreKeyProperties.DigestEnum String[] getDigests() {
         return ArrayUtils.cloneIfNotEmpty(mDigests);
     }
 
     /**
      * Gets the set of padding schemes with which the key can be used when encrypting/decrypting.
      */
-    public String[] getEncryptionPaddings() {
+    @NonNull
+    public @KeyStoreKeyProperties.EncryptionPaddingEnum String[] getEncryptionPaddings() {
         return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
     }
 
     /**
      * Gets the set of padding schemes with which the key can be used when signing/verifying.
      */
-    public String[] getSignaturePaddings() {
+    @NonNull
+    public @KeyStoreKeyProperties.SignaturePaddingEnum String[] getSignaturePaddings() {
         return ArrayUtils.cloneIfNotEmpty(mSignaturePaddings);
     }
 
     /**
      * Gets the set of block modes with which the key can be used.
      */
-    public String[] getBlockModes() {
+    @NonNull
+    public @KeyStoreKeyProperties.BlockModeEnum String[] getBlockModes() {
         return ArrayUtils.cloneIfNotEmpty(mBlockModes);
     }
 
@@ -403,14 +459,14 @@
     }
 
     /**
-     * Gets the duration of time (seconds) for which the private key can be used after the user
-     * is successfully authenticated.
+     * Gets the duration of time (seconds) for which this key can be used after the user is
+     * successfully authenticated. This has effect only if user authentication is required.
      *
      * <p>This restriction applies only to private key operations. Public key operations are not
      * restricted.
      *
-     * @return duration in seconds or {@code -1} if not restricted. {@code 0} means authentication
-     *         is required for every use of the key.
+     * @return duration in seconds or {@code -1} if authentication is required for every use of the
+     *         key.
      *
      * @see #isUserAuthenticationRequired()
      */
@@ -468,13 +524,13 @@
 
         private @KeyStoreKeyProperties.PurposeEnum int mPurposes;
 
-        private String[] mDigests;
+        private @KeyStoreKeyProperties.DigestEnum String[] mDigests;
 
-        private String[] mEncryptionPaddings;
+        private @KeyStoreKeyProperties.EncryptionPaddingEnum String[] mEncryptionPaddings;
 
-        private String[] mSignaturePaddings;
+        private @KeyStoreKeyProperties.SignaturePaddingEnum String[] mSignaturePaddings;
 
-        private String[] mBlockModes;
+        private @KeyStoreKeyProperties.BlockModeEnum String[] mBlockModes;
 
         private boolean mRandomizedEncryptionRequired = true;
 
@@ -488,7 +544,7 @@
          * some UI to ask the user to unlock or initialize the Android KeyStore
          * facility.
          */
-        public Builder(Context context) {
+        public Builder(@NonNull Context context) {
             if (context == null) {
                 throw new NullPointerException("context == null");
             }
@@ -500,7 +556,8 @@
          * {@link java.security.KeyStore} instance using the
          * {@code AndroidKeyStore} provider.
          */
-        public Builder setAlias(String alias) {
+        @NonNull
+        public Builder setAlias(@NonNull String alias) {
             if (alias == null) {
                 throw new NullPointerException("alias == null");
             }
@@ -511,7 +568,9 @@
         /**
          * Sets the key type (e.g., EC, RSA) of the keypair to be created.
          */
-        public Builder setKeyType(String keyType) throws NoSuchAlgorithmException {
+        @NonNull
+        public Builder setKeyType(@NonNull @KeyStoreKeyProperties.AlgorithmEnum String keyType)
+                throws NoSuchAlgorithmException {
             if (keyType == null) {
                 throw new NullPointerException("keyType == null");
             } else {
@@ -528,6 +587,7 @@
          * key type of RSA this will set the modulus size and for a key type of
          * EC it will select a curve with a matching field size.
          */
+        @NonNull
         public Builder setKeySize(int keySize) {
             if (keySize < 0) {
                 throw new IllegalArgumentException("keySize < 0");
@@ -540,7 +600,7 @@
          * Sets the algorithm-specific key generation parameters. For example, for RSA keys
          * this may be an instance of {@link java.security.spec.RSAKeyGenParameterSpec}.
          */
-        public Builder setAlgorithmParameterSpec(AlgorithmParameterSpec spec) {
+        public Builder setAlgorithmParameterSpec(@NonNull AlgorithmParameterSpec spec) {
             if (spec == null) {
                 throw new NullPointerException("spec == null");
             }
@@ -556,7 +616,8 @@
          * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
          * newer platforms the subject defaults to {@code CN=fake} if not specified.
          */
-        public Builder setSubject(X500Principal subject) {
+        @NonNull
+        public Builder setSubject(@NonNull X500Principal subject) {
             if (subject == null) {
                 throw new NullPointerException("subject == null");
             }
@@ -572,7 +633,8 @@
          * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
          * newer platforms the serial number defaults to {@code 1} if not specified.
          */
-        public Builder setSerialNumber(BigInteger serialNumber) {
+        @NonNull
+        public Builder setSerialNumber(@NonNull BigInteger serialNumber) {
             if (serialNumber == null) {
                 throw new NullPointerException("serialNumber == null");
             }
@@ -588,7 +650,8 @@
          * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
          * newer platforms the date defaults to {@code Jan 1 1970} if not specified.
          */
-        public Builder setStartDate(Date startDate) {
+        @NonNull
+        public Builder setStartDate(@NonNull Date startDate) {
             if (startDate == null) {
                 throw new NullPointerException("startDate == null");
             }
@@ -604,7 +667,8 @@
          * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
          * newer platforms the date defaults to {@code Jan 1 2048} if not specified.
          */
-        public Builder setEndDate(Date endDate) {
+        @NonNull
+        public Builder setEndDate(@NonNull Date endDate) {
             if (endDate == null) {
                 throw new NullPointerException("endDate == null");
             }
@@ -613,11 +677,18 @@
         }
 
         /**
-         * Indicates that this key must be encrypted at rest on storage. Note
-         * that enabling this will require that the user enable a strong lock
-         * screen (e.g., PIN, password) before creating or using the generated
-         * key is successful.
+         * Indicates that this key pair must be encrypted at rest. This will protect the key pair
+         * with the secure lock screen credential (e.g., password, PIN, or pattern).
+         *
+         * <p>Note that this feature requires that the secure lock screen (e.g., password, PIN,
+         * pattern) is set up, otherwise key pair generation will fail. Moreover, this key pair will
+         * be deleted when the secure lock screen is disabled or reset (e.g., by the user or a
+         * Device Administrator). Finally, this key pair cannot be used until the user unlocks the
+         * secure lock screen after boot.
+         *
+         * @see KeyguardManager#isDeviceSecure()
          */
+        @NonNull
         public Builder setEncryptionRequired() {
             mFlags |= KeyStore.FLAG_ENCRYPTED;
             return this;
@@ -628,8 +699,11 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect.
+         *
          * @see #setKeyValidityEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityStart(Date startDate) {
             mKeyValidityStart = startDate;
             return this;
@@ -640,10 +714,13 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect.
+         *
          * @see #setKeyValidityStart(Date)
          * @see #setKeyValidityForConsumptionEnd(Date)
          * @see #setKeyValidityForOriginationEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityEnd(Date endDate) {
             setKeyValidityForOriginationEnd(endDate);
             setKeyValidityForConsumptionEnd(endDate);
@@ -655,8 +732,11 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect.
+         *
          * @see #setKeyValidityForConsumptionEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityForOriginationEnd(Date endDate) {
             mKeyValidityForOriginationEnd = endDate;
             return this;
@@ -668,8 +748,11 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect.
+         *
          * @see #setKeyValidityForOriginationEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityForConsumptionEnd(Date endDate) {
             mKeyValidityForConsumptionEnd = endDate;
             return this;
@@ -679,7 +762,16 @@
          * Sets the set of purposes for which the key can be used.
          *
          * <p>This must be specified for all keys. There is no default.
+         *
+         * <p>If the set of purposes for which the key can be used does not contain
+         * {@link KeyStoreKeyProperties.Purpose#SIGN}, the self-signed certificate generated by
+         * {@link KeyPairGenerator} of {@code AndroidKeyStore} provider will contain an invalid
+         * signature. This is OK if the certificate is only used for obtaining the public key from
+         * Android KeyStore.
+         *
+         * <p><b>NOTE: This has currently no effect.
          */
+        @NonNull
         public Builder setPurposes(@KeyStoreKeyProperties.PurposeEnum int purposes) {
             mPurposes = purposes;
             return this;
@@ -690,8 +782,11 @@
          * to use the key with any other digest will be rejected.
          *
          * <p>This must be specified for keys which are used for signing/verification.
+         *
+         * <p><b>NOTE: This has currently no effect.
          */
-        public Builder setDigests(String... digests) {
+        @NonNull
+        public Builder setDigests(@KeyStoreKeyProperties.DigestEnum String... digests) {
             mDigests = ArrayUtils.cloneIfNotEmpty(digests);
             return this;
         }
@@ -702,8 +797,12 @@
          * rejected.
          *
          * <p>This must be specified for keys which are used for encryption/decryption.
+         *
+         * <p><b>NOTE: This has currently no effect.
          */
-        public Builder setEncryptionPaddings(String... paddings) {
+        @NonNull
+        public Builder setEncryptionPaddings(
+                @KeyStoreKeyProperties.EncryptionPaddingEnum String... paddings) {
             mEncryptionPaddings = ArrayUtils.cloneIfNotEmpty(paddings);
             return this;
         }
@@ -714,8 +813,12 @@
          * rejected.
          *
          * <p>This must be specified for RSA keys which are used for signing/verification.
+         *
+         * <p><b>NOTE: This has currently no effect.
          */
-        public Builder setSignaturePaddings(String... paddings) {
+        @NonNull
+        public Builder setSignaturePaddings(
+                @KeyStoreKeyProperties.SignaturePaddingEnum String... paddings) {
             mSignaturePaddings = ArrayUtils.cloneIfNotEmpty(paddings);
             return this;
         }
@@ -725,8 +828,11 @@
          * Attempts to use the key with any other block modes will be rejected.
          *
          * <p>This must be specified for encryption/decryption keys.
+         *
+         * <p><b>NOTE: This has currently no effect.
          */
-        public Builder setBlockModes(String... blockModes) {
+        @NonNull
+        public Builder setBlockModes(@KeyStoreKeyProperties.BlockModeEnum String... blockModes) {
             mBlockModes = ArrayUtils.cloneIfNotEmpty(blockModes);
             return this;
         }
@@ -750,7 +856,10 @@
          * <li>If you are using RSA encryption without padding, consider switching to padding
          * schemes which offer {@code IND-CPA}, such as PKCS#1 or OAEP.</li>
          * </ul>
+         *
+         * <p><b>NOTE: This has currently no effect.
          */
+        @NonNull
         public Builder setRandomizedEncryptionRequired(boolean required) {
             mRandomizedEncryptionRequired = required;
             return this;
@@ -772,8 +881,11 @@
          * <p>This restriction applies only to private key operations. Public key operations are not
          * restricted.
          *
+         * <p><b>NOTE: This has currently no effect.
+         *
          * @see #setUserAuthenticationValidityDurationSeconds(int)
          */
+        @NonNull
         public Builder setUserAuthenticationRequired(boolean required) {
             mUserAuthenticationRequired = required;
             return this;
@@ -788,12 +900,16 @@
          * <p>This restriction applies only to private key operations. Public key operations are not
          * restricted.
          *
-         * @param seconds duration in seconds or {@code 0} if the user needs to authenticate for
+         * <p><b>NOTE: This has currently no effect.
+         *
+         * @param seconds duration in seconds or {@code -1} if the user needs to authenticate for
          *        every use of the key.
          *
          * @see #setUserAuthenticationRequired(boolean)
          */
-        public Builder setUserAuthenticationValidityDurationSeconds(int seconds) {
+        @NonNull
+        public Builder setUserAuthenticationValidityDurationSeconds(
+                @IntRange(from = -1) int seconds) {
             mUserAuthenticationValidityDurationSeconds = seconds;
             return this;
         }
@@ -804,6 +920,7 @@
          * @throws IllegalArgumentException if a required field is missing
          * @return built instance of {@code KeyPairGeneratorSpec}
          */
+        @NonNull
         public KeyPairGeneratorSpec build() {
             return new KeyPairGeneratorSpec(mContext,
                     mKeystoreAlias,
diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java
index 1563863..3ed8899 100644
--- a/keystore/java/android/security/KeyStore.java
+++ b/keystore/java/android/security/KeyStore.java
@@ -16,14 +16,19 @@
 
 package android.security;
 
+import android.app.ActivityThread;
+import android.app.Application;
+import android.app.KeyguardManager;
 import com.android.org.conscrypt.NativeConstants;
 
 import android.content.Context;
-import android.hardware.fingerprint.IFingerprintService;
+import android.hardware.fingerprint.FingerprintManager;
 import android.os.Binder;
 import android.os.IBinder;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.UserHandle;
 import android.security.keymaster.ExportResult;
 import android.security.keymaster.KeyCharacteristics;
 import android.security.keymaster.KeymasterArguments;
@@ -69,6 +74,19 @@
 
     // Flags for "put" "import" and "generate"
     public static final int FLAG_NONE = 0;
+
+    /**
+     * Indicates that this key (or key pair) must be encrypted at rest. This will protect the key
+     * (or key pair) with the secure lock screen credential (e.g., password, PIN, or pattern).
+     *
+     * <p>Note that this requires that the secure lock screen (e.g., password, PIN, pattern) is set
+     * up, otherwise key (or key pair) generation or import will fail. Moreover, this key (or key
+     * pair) will be deleted when the secure lock screen is disabled or reset (e.g., by the user or
+     * a Device Administrator). Finally, this key (or key pair) cannot be used until the user
+     * unlocks the secure lock screen after boot.
+     *
+     * @see KeyguardManager#isDeviceSecure()
+     */
     public static final int FLAG_ENCRYPTED = 1;
 
     // States
@@ -77,11 +95,27 @@
     private int mError = NO_ERROR;
 
     private final IKeystoreService mBinder;
+    private final Context mContext;
 
     private IBinder mToken;
 
     private KeyStore(IKeystoreService binder) {
         mBinder = binder;
+        mContext = getContext();
+    }
+
+    private static Context getContext() {
+        ActivityThread activityThread = ActivityThread.currentActivityThread();
+        if (activityThread == null) {
+            throw new IllegalStateException(
+                    "Failed to obtain application Context: no ActivityThread");
+        }
+        Application application = activityThread.getApplication();
+        if (application == null) {
+            throw new IllegalStateException(
+                    "Failed to obtain application Context: no Application");
+        }
+        return application;
     }
 
     public static KeyStore getInstance() {
@@ -97,10 +131,10 @@
         return mToken;
     }
 
-    static int getKeyTypeForAlgorithm(String keyType) {
-        if ("RSA".equalsIgnoreCase(keyType)) {
+    static int getKeyTypeForAlgorithm(@KeyStoreKeyProperties.AlgorithmEnum String keyType) {
+        if (KeyStoreKeyProperties.Algorithm.RSA.equalsIgnoreCase(keyType)) {
             return NativeConstants.EVP_PKEY_RSA;
-        } else if ("EC".equalsIgnoreCase(keyType)) {
+        } else if (KeyStoreKeyProperties.Algorithm.EC.equalsIgnoreCase(keyType)) {
             return NativeConstants.EVP_PKEY_EC;
         } else {
             return -1;
@@ -194,15 +228,6 @@
         }
     }
 
-    public boolean password(String password) {
-        try {
-            return mBinder.password(password) == NO_ERROR;
-        } catch (RemoteException e) {
-            Log.w(TAG, "Cannot connect to keystore", e);
-            return false;
-        }
-    }
-
     public boolean lock() {
         try {
             return mBinder.lock() == NO_ERROR;
@@ -212,9 +237,20 @@
         }
     }
 
-    public boolean unlock(String password) {
+    /**
+     * Attempt to unlock the keystore for {@code user} with the password {@code password}.
+     * This is required before keystore entries created with FLAG_ENCRYPTED can be accessed or
+     * created.
+     *
+     * @param user Android user ID to operate on
+     * @param password user's keystore password. Should be the most recent value passed to
+     * {@link #onUserPasswordChanged} for the user.
+     *
+     * @return whether the keystore was unlocked.
+     */
+    public boolean unlock(int userId, String password) {
         try {
-            mError = mBinder.unlock(password);
+            mError = mBinder.unlock(userId, password);
             return mError == NO_ERROR;
         } catch (RemoteException e) {
             Log.w(TAG, "Cannot connect to keystore", e);
@@ -222,6 +258,10 @@
         }
     }
 
+    public boolean unlock(String password) {
+        return unlock(UserHandle.getUserId(Process.myUid()), password);
+    }
+
     public boolean isEmpty() {
         try {
             return mBinder.zero() == KEY_NOT_FOUND;
@@ -522,6 +562,30 @@
     }
 
     /**
+     * Notify keystore that a user's password has changed.
+     *
+     * @param userId the user whose password changed.
+     * @param newPassword the new password or "" if the password was removed.
+     */
+    public boolean onUserPasswordChanged(int userId, String newPassword) {
+        // Parcel.cpp doesn't support deserializing null strings and treats them as "". Make that
+        // explicit here.
+        if (newPassword == null) {
+            newPassword = "";
+        }
+        try {
+            return mBinder.onUserPasswordChanged(userId, newPassword) == NO_ERROR;
+        } catch (RemoteException e) {
+            Log.w(TAG, "Cannot connect to keystore", e);
+            return false;
+        }
+    }
+
+    public boolean onUserPasswordChanged(String newPassword) {
+        return onUserPasswordChanged(UserHandle.getUserId(Process.myUid()), newPassword);
+    }
+
+    /**
      * Returns a {@link KeyStoreException} corresponding to the provided keystore/keymaster error
      * code.
      */
@@ -532,7 +596,7 @@
                 case NO_ERROR:
                     return new KeyStoreException(errorCode, "OK");
                 case LOCKED:
-                    return new KeyStoreException(errorCode, "Keystore locked");
+                    return new KeyStoreException(errorCode, "User authentication required");
                 case UNINITIALIZED:
                     return new KeyStoreException(errorCode, "Keystore not initialized");
                 case SYSTEM_ERROR:
@@ -569,6 +633,8 @@
      */
     InvalidKeyException getInvalidKeyException(String keystoreKeyAlias, KeyStoreException e) {
         switch (e.getErrorCode()) {
+            case LOCKED:
+                return new UserNotAuthenticatedException();
             case KeymasterDefs.KM_ERROR_KEY_EXPIRED:
                 return new KeyExpiredException();
             case KeymasterDefs.KM_ERROR_KEY_NOT_YET_VALID:
@@ -618,23 +684,18 @@
         }
     }
 
-    private static long getFingerprintOnlySid() {
-        IFingerprintService service = IFingerprintService.Stub.asInterface(
-                ServiceManager.getService(Context.FINGERPRINT_SERVICE));
-        if (service == null) {
+    private long getFingerprintOnlySid() {
+        FingerprintManager fingerprintManager =
+                mContext.getSystemService(FingerprintManager.class);
+        if (fingerprintManager == null) {
             return 0;
         }
 
-        try {
-            long deviceId = 0; // TODO: plumb hardware id to FPMS
-            if (!service.isHardwareDetected(deviceId)) {
-                return 0;
-            }
-
-            return service.getAuthenticatorId();
-        } catch (RemoteException e) {
-            throw new IllegalStateException("Failed to communicate with fingerprint service", e);
+        if (!fingerprintManager.isHardwareDetected()) {
+            return 0;
         }
+
+        return fingerprintManager.getAuthenticatorId();
     }
 
     /**
diff --git a/keystore/java/android/security/KeyStoreCipherSpi.java b/keystore/java/android/security/KeyStoreCipherSpi.java
index 917f716..bd601bc 100644
--- a/keystore/java/android/security/KeyStoreCipherSpi.java
+++ b/keystore/java/android/security/KeyStoreCipherSpi.java
@@ -22,10 +22,12 @@
 import android.security.keymaster.OperationResult;
 
 import java.security.AlgorithmParameters;
+import java.security.GeneralSecurityException;
 import java.security.InvalidAlgorithmParameterException;
 import java.security.InvalidKeyException;
 import java.security.Key;
 import java.security.NoSuchAlgorithmException;
+import java.security.ProviderException;
 import java.security.SecureRandom;
 import java.security.spec.AlgorithmParameterSpec;
 import java.security.spec.InvalidParameterSpecException;
@@ -133,7 +135,7 @@
      * error conditions in between.
      */
     private IBinder mOperationToken;
-    private Long mOperationHandle;
+    private long mOperationHandle;
     private KeyStoreCryptoOperationChunkedStreamer mMainDataStreamer;
 
     /**
@@ -246,7 +248,7 @@
         mIvHasBeenUsed = false;
         mAdditionalEntropyForBegin = null;
         mOperationToken = null;
-        mOperationHandle = null;
+        mOperationHandle = 0;
         mMainDataStreamer = null;
         mCachedException = null;
     }
@@ -257,7 +259,7 @@
             mOperationToken = null;
             mKeyStore.abort(operationToken);
         }
-        mOperationHandle = null;
+        mOperationHandle = 0;
         mMainDataStreamer = null;
         mAdditionalEntropyForBegin = null;
         mCachedException = null;
@@ -298,38 +300,39 @@
         mAdditionalEntropyForBegin = null;
         if (opResult == null) {
             throw new KeyStoreConnectException();
-        } else if ((opResult.resultCode != KeyStore.NO_ERROR)
-                && (opResult.resultCode != KeyStore.OP_AUTH_NEEDED)) {
-            switch (opResult.resultCode) {
-                case KeymasterDefs.KM_ERROR_INVALID_NONCE:
-                    throw new InvalidAlgorithmParameterException("Invalid IV");
-            }
-            throw mKeyStore.getInvalidKeyException(mKey.getAlias(), opResult.resultCode);
         }
 
-        if (opResult.token == null) {
-            throw new IllegalStateException("Keystore returned null operation token");
-        }
-        // The operation handle/token is now either valid for use immediately or needs to be
-        // authorized through user authentication (if the error code was OP_AUTH_NEEDED).
+        // Store operation token and handle regardless of the error code returned by KeyStore to
+        // ensure that the operation gets aborted immediately if the code below throws an exception.
         mOperationToken = opResult.token;
         mOperationHandle = opResult.operationHandle;
+
+        // If necessary, throw an exception due to KeyStore operation having failed.
+        GeneralSecurityException e = KeyStoreCryptoOperationUtils.getExceptionForCipherInit(
+                mKeyStore, mKey, opResult.resultCode);
+        if (e != null) {
+            if (e instanceof InvalidKeyException) {
+                throw (InvalidKeyException) e;
+            } else if (e instanceof InvalidAlgorithmParameterException) {
+                throw (InvalidAlgorithmParameterException) e;
+            } else {
+                throw new ProviderException("Unexpected exception type", e);
+            }
+        }
+
+        if (mOperationToken == null) {
+            throw new ProviderException("Keystore returned null operation token");
+        }
+        if (mOperationHandle == 0) {
+            throw new ProviderException("Keystore returned invalid operation handle");
+        }
+
         loadAlgorithmSpecificParametersFromBeginResult(keymasterOutputArgs);
         mFirstOperationInitiated = true;
         mIvHasBeenUsed = true;
         mMainDataStreamer = new KeyStoreCryptoOperationChunkedStreamer(
                 new KeyStoreCryptoOperationChunkedStreamer.MainDataStream(
                         mKeyStore, opResult.token));
-
-        if (opResult.resultCode != KeyStore.NO_ERROR) {
-            // The operation requires user authentication. Check whether such authentication is
-            // possible (e.g., the key may have been permanently invalidated).
-            InvalidKeyException e =
-                    mKeyStore.getInvalidKeyException(mKey.getAlias(), opResult.resultCode);
-            if (!(e instanceof UserNotAuthenticatedException)) {
-                throw e;
-            }
-        }
     }
 
     @Override
@@ -472,7 +475,7 @@
     }
 
     @Override
-    public Long getOperationHandle() {
+    public long getOperationHandle() {
         return mOperationHandle;
     }
 
@@ -492,13 +495,14 @@
         }
         if ((mIv != null) && (mIv.length > 0)) {
             try {
-                AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
+                AlgorithmParameters params =
+                        AlgorithmParameters.getInstance(KeyStoreKeyProperties.Algorithm.AES);
                 params.init(new IvParameterSpec(mIv));
                 return params;
             } catch (NoSuchAlgorithmException e) {
-                throw new RuntimeException("Failed to obtain AES AlgorithmParameters", e);
+                throw new ProviderException("Failed to obtain AES AlgorithmParameters", e);
             } catch (InvalidParameterSpecException e) {
-                throw new RuntimeException(
+                throw new ProviderException(
                         "Failed to initialize AES AlgorithmParameters with an IV", e);
             }
         }
@@ -631,10 +635,9 @@
                 if ((mIv == null) && (mEncrypting)) {
                     // IV was not provided by the caller and thus will be generated by keymaster.
                     // Mix in some additional entropy from the provided SecureRandom.
-                    if (mRng != null) {
-                        mAdditionalEntropyForBegin = new byte[mBlockSizeBytes];
-                        mRng.nextBytes(mAdditionalEntropyForBegin);
-                    }
+                    mAdditionalEntropyForBegin =
+                            KeyStoreCryptoOperationUtils.getRandomBytesToMixIntoKeystoreRng(
+                                    mRng, mBlockSizeBytes);
                 }
             }
         }
@@ -666,11 +669,11 @@
             if (mIv == null) {
                 mIv = returnedIv;
             } else if ((returnedIv != null) && (!Arrays.equals(returnedIv, mIv))) {
-                throw new IllegalStateException("IV in use differs from provided IV");
+                throw new ProviderException("IV in use differs from provided IV");
             }
         } else {
             if (returnedIv != null) {
-                throw new IllegalStateException(
+                throw new ProviderException(
                         "IV in use despite IV not being used by this transformation");
             }
         }
diff --git a/keystore/java/android/security/KeyStoreConnectException.java b/keystore/java/android/security/KeyStoreConnectException.java
index 1aa3aec..885f1f7 100644
--- a/keystore/java/android/security/KeyStoreConnectException.java
+++ b/keystore/java/android/security/KeyStoreConnectException.java
@@ -16,12 +16,14 @@
 
 package android.security;
 
+import java.security.ProviderException;
+
 /**
  * Indicates a communications error with keystore service.
  *
  * @hide
  */
-public class KeyStoreConnectException extends IllegalStateException {
+public class KeyStoreConnectException extends ProviderException {
     public KeyStoreConnectException() {
         super("Failed to communicate with keystore service");
     }
diff --git a/keystore/java/android/security/KeyStoreCryptoOperation.java b/keystore/java/android/security/KeyStoreCryptoOperation.java
index 19abd05..c5cf211 100644
--- a/keystore/java/android/security/KeyStoreCryptoOperation.java
+++ b/keystore/java/android/security/KeyStoreCryptoOperation.java
@@ -25,7 +25,7 @@
     /**
      * Gets the KeyStore operation handle of this crypto operation.
      *
-     * @return handle or {@code null} if the KeyStore operation is not in progress.
+     * @return handle or {@code 0} if the KeyStore operation is not in progress.
      */
-    Long getOperationHandle();
+    long getOperationHandle();
 }
diff --git a/keystore/java/android/security/KeyStoreCryptoOperationUtils.java b/keystore/java/android/security/KeyStoreCryptoOperationUtils.java
new file mode 100644
index 0000000..311278b
--- /dev/null
+++ b/keystore/java/android/security/KeyStoreCryptoOperationUtils.java
@@ -0,0 +1,112 @@
+/*
+ * 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.security;
+
+import android.security.keymaster.KeymasterDefs;
+
+import java.security.GeneralSecurityException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.SecureRandom;
+
+/**
+ * Assorted utility methods for implementing crypto operations on top of KeyStore.
+ *
+ * @hide
+ */
+abstract class KeyStoreCryptoOperationUtils {
+
+    private static volatile SecureRandom sRng;
+
+    private KeyStoreCryptoOperationUtils() {}
+
+    /**
+     * Returns the {@link InvalidKeyException} to be thrown by the {@code init} method of
+     * the crypto operation in response to {@code KeyStore.begin} operation or {@code null} if
+     * the {@code init} method should succeed.
+     */
+    static InvalidKeyException getInvalidKeyExceptionForInit(
+            KeyStore keyStore, KeyStoreKey key, int beginOpResultCode) {
+        if (beginOpResultCode == KeyStore.NO_ERROR) {
+            return null;
+        }
+
+        // An error occured. However, some errors should not lead to init throwing an exception.
+        // See below.
+        InvalidKeyException e =
+                keyStore.getInvalidKeyException(key.getAlias(), beginOpResultCode);
+        switch (beginOpResultCode) {
+            case KeyStore.OP_AUTH_NEEDED:
+                // Operation needs to be authorized by authenticating the user. Don't throw an
+                // exception is such authentication is possible for this key
+                // (UserNotAuthenticatedException). An example of when it's not possible is where
+                // the key is permanently invalidated (KeyPermanentlyInvalidatedException).
+                if (e instanceof UserNotAuthenticatedException) {
+                    return null;
+                }
+                break;
+        }
+        return e;
+    }
+
+    /**
+     * Returns the exception to be thrown by the {@code Cipher.init} method of the crypto operation
+     * in response to {@code KeyStore.begin} operation or {@code null} if the {@code init} method
+     * should succeed.
+     */
+    static GeneralSecurityException getExceptionForCipherInit(
+            KeyStore keyStore, KeyStoreKey key, int beginOpResultCode) {
+        if (beginOpResultCode == KeyStore.NO_ERROR) {
+            return null;
+        }
+
+        // Cipher-specific cases
+        switch (beginOpResultCode) {
+            case KeymasterDefs.KM_ERROR_INVALID_NONCE:
+                return new InvalidAlgorithmParameterException("Invalid IV");
+            case KeymasterDefs.KM_ERROR_CALLER_NONCE_PROHIBITED:
+                return new InvalidAlgorithmParameterException("Caller-provided IV not permitted");
+        }
+
+        // General cases
+        return getInvalidKeyExceptionForInit(keyStore, key, beginOpResultCode);
+    }
+
+    /**
+     * Returns the requested number of random bytes to mix into keystore/keymaster RNG.
+     *
+     * @param rng RNG from which to obtain the random bytes or {@code null} for the platform-default
+     *        RNG.
+     */
+    static byte[] getRandomBytesToMixIntoKeystoreRng(SecureRandom rng, int sizeBytes) {
+        if (rng == null) {
+            rng = getRng();
+        }
+        byte[] result = new byte[sizeBytes];
+        rng.nextBytes(result);
+        return result;
+    }
+
+    private static SecureRandom getRng() {
+        // IMPLEMENTATION NOTE: It's OK to share a SecureRandom instance because SecureRandom is
+        // required to be thread-safe.
+        if (sRng == null) {
+            sRng = new SecureRandom();
+        }
+        return sRng;
+    }
+}
diff --git a/keystore/java/android/security/KeyStoreHmacSpi.java b/keystore/java/android/security/KeyStoreHmacSpi.java
index 4590b9c..5089a25 100644
--- a/keystore/java/android/security/KeyStoreHmacSpi.java
+++ b/keystore/java/android/security/KeyStoreHmacSpi.java
@@ -24,6 +24,7 @@
 import java.security.InvalidAlgorithmParameterException;
 import java.security.InvalidKeyException;
 import java.security.Key;
+import java.security.ProviderException;
 import java.security.spec.AlgorithmParameterSpec;
 
 import javax.crypto.MacSpi;
@@ -67,7 +68,7 @@
 
     private final KeyStore mKeyStore = KeyStore.getInstance();
     private final int mKeymasterDigest;
-    private final int mMacSizeBytes;
+    private final int mMacSizeBits;
 
     // Fields below are populated by engineInit and should be preserved after engineDoFinal.
     private KeyStoreSecretKey mKey;
@@ -75,16 +76,16 @@
     // Fields below are reset when engineDoFinal succeeds.
     private KeyStoreCryptoOperationChunkedStreamer mChunkedStreamer;
     private IBinder mOperationToken;
-    private Long mOperationHandle;
+    private long mOperationHandle;
 
     protected KeyStoreHmacSpi(int keymasterDigest) {
         mKeymasterDigest = keymasterDigest;
-        mMacSizeBytes = KeymasterUtils.getDigestOutputSizeBytes(keymasterDigest);
+        mMacSizeBits = KeymasterUtils.getDigestOutputSizeBits(keymasterDigest);
     }
 
     @Override
     protected int engineGetMacLength() {
-        return mMacSizeBytes;
+        return (mMacSizeBits + 7) / 8;
     }
 
     @Override
@@ -128,7 +129,7 @@
             mOperationToken = null;
             mKeyStore.abort(operationToken);
         }
-        mOperationHandle = null;
+        mOperationHandle = 0;
         mChunkedStreamer = null;
     }
 
@@ -138,7 +139,7 @@
             mOperationToken = null;
             mKeyStore.abort(operationToken);
         }
-        mOperationHandle = null;
+        mOperationHandle = 0;
         mChunkedStreamer = null;
     }
 
@@ -158,41 +159,42 @@
         KeymasterArguments keymasterArgs = new KeymasterArguments();
         keymasterArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_HMAC);
         keymasterArgs.addInt(KeymasterDefs.KM_TAG_DIGEST, mKeymasterDigest);
+        keymasterArgs.addInt(KeymasterDefs.KM_TAG_MAC_LENGTH, mMacSizeBits);
 
+        KeymasterArguments keymasterOutputArgs = new KeymasterArguments();
         OperationResult opResult = mKeyStore.begin(
                 mKey.getAlias(),
                 KeymasterDefs.KM_PURPOSE_SIGN,
                 true,
                 keymasterArgs,
-                null,
-                new KeymasterArguments());
+                null, // no additional entropy needed for HMAC because it's deterministic
+                keymasterOutputArgs);
         if (opResult == null) {
             throw new KeyStoreConnectException();
-        } else if ((opResult.resultCode != KeyStore.NO_ERROR)
-                && (opResult.resultCode != KeyStore.OP_AUTH_NEEDED)) {
-            throw mKeyStore.getInvalidKeyException(mKey.getAlias(), opResult.resultCode);
         }
 
-        if (opResult.token == null) {
-            throw new IllegalStateException("Keystore returned null operation token");
-        }
-        // The operation handle/token is now either valid for use immediately or needs to be
-        // authorized through user authentication (if the error code was OP_AUTH_NEEDED).
+        // Store operation token and handle regardless of the error code returned by KeyStore to
+        // ensure that the operation gets aborted immediately if the code below throws an exception.
         mOperationToken = opResult.token;
         mOperationHandle = opResult.operationHandle;
+
+        // If necessary, throw an exception due to KeyStore operation having failed.
+        InvalidKeyException e = KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(
+                mKeyStore, mKey, opResult.resultCode);
+        if (e != null) {
+            throw e;
+        }
+
+        if (mOperationToken == null) {
+            throw new ProviderException("Keystore returned null operation token");
+        }
+        if (mOperationHandle == 0) {
+            throw new ProviderException("Keystore returned invalid operation handle");
+        }
+
         mChunkedStreamer = new KeyStoreCryptoOperationChunkedStreamer(
                 new KeyStoreCryptoOperationChunkedStreamer.MainDataStream(
                         mKeyStore, mOperationToken));
-
-        if (opResult.resultCode != KeyStore.NO_ERROR) {
-            // The operation requires user authentication. Check whether such authentication is
-            // possible (e.g., the key may have been permanently invalidated).
-            InvalidKeyException e =
-                    mKeyStore.getInvalidKeyException(mKey.getAlias(), opResult.resultCode);
-            if (!(e instanceof UserNotAuthenticatedException)) {
-                throw e;
-            }
-        }
     }
 
     @Override
@@ -205,17 +207,17 @@
         try {
             ensureKeystoreOperationInitialized();
         } catch (InvalidKeyException e) {
-            throw new IllegalStateException("Failed to reinitialize MAC", e);
+            throw new ProviderException("Failed to reinitialize MAC", e);
         }
 
         byte[] output;
         try {
             output = mChunkedStreamer.update(input, offset, len);
         } catch (KeyStoreException e) {
-            throw new IllegalStateException("Keystore operation failed", e);
+            throw new ProviderException("Keystore operation failed", e);
         }
         if ((output != null) && (output.length != 0)) {
-            throw new IllegalStateException("Update operation unexpectedly produced output");
+            throw new ProviderException("Update operation unexpectedly produced output");
         }
     }
 
@@ -224,14 +226,14 @@
         try {
             ensureKeystoreOperationInitialized();
         } catch (InvalidKeyException e) {
-            throw new IllegalStateException("Failed to reinitialize MAC", e);
+            throw new ProviderException("Failed to reinitialize MAC", e);
         }
 
         byte[] result;
         try {
             result = mChunkedStreamer.doFinal(null, 0, 0);
         } catch (KeyStoreException e) {
-            throw new IllegalStateException("Keystore operation failed", e);
+            throw new ProviderException("Keystore operation failed", e);
         }
 
         resetWhilePreservingInitState();
@@ -251,7 +253,7 @@
     }
 
     @Override
-    public Long getOperationHandle() {
+    public long getOperationHandle() {
         return mOperationHandle;
     }
 }
diff --git a/keystore/java/android/security/KeyStoreKey.java b/keystore/java/android/security/KeyStoreKey.java
new file mode 100644
index 0000000..7a34829
--- /dev/null
+++ b/keystore/java/android/security/KeyStoreKey.java
@@ -0,0 +1,55 @@
+/*
+ * 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.security;
+
+import java.security.Key;
+
+/**
+ * {@link Key} backed by AndroidKeyStore.
+ *
+ * @hide
+ */
+public class KeyStoreKey implements Key {
+    private final String mAlias;
+    private final String mAlgorithm;
+
+    public KeyStoreKey(String alias, String algorithm) {
+        mAlias = alias;
+        mAlgorithm = algorithm;
+    }
+
+    String getAlias() {
+        return mAlias;
+    }
+
+    @Override
+    public String getAlgorithm() {
+        return mAlgorithm;
+    }
+
+    @Override
+    public String getFormat() {
+        // This key does not export its key material
+        return null;
+    }
+
+    @Override
+    public byte[] getEncoded() {
+        // This key does not export its key material
+        return null;
+    }
+}
diff --git a/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java b/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java
index 20f6042..4b914c2 100644
--- a/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java
+++ b/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java
@@ -21,6 +21,7 @@
 import android.security.keymaster.KeymasterDefs;
 
 import java.security.InvalidAlgorithmParameterException;
+import java.security.ProviderException;
 import java.security.SecureRandom;
 import java.security.spec.AlgorithmParameterSpec;
 import java.util.Date;
@@ -39,13 +40,24 @@
         public AES() {
             super(KeymasterDefs.KM_ALGORITHM_AES, 128);
         }
+
+        @Override
+        protected void engineInit(AlgorithmParameterSpec params, SecureRandom random)
+                throws InvalidAlgorithmParameterException {
+            super.engineInit(params, random);
+            if ((mKeySizeBits != 128) && (mKeySizeBits != 192) && (mKeySizeBits != 256)) {
+                throw new InvalidAlgorithmParameterException(
+                        "Unsupported key size: " + mKeySizeBits
+                        + ". Supported: 128, 192, 256.");
+            }
+        }
     }
 
     protected static abstract class HmacBase extends KeyStoreKeyGeneratorSpi {
         protected HmacBase(int keymasterDigest) {
             super(KeymasterDefs.KM_ALGORITHM_HMAC,
                     keymasterDigest,
-                    KeymasterUtils.getDigestOutputSizeBytes(keymasterDigest) * 8);
+                    KeymasterUtils.getDigestOutputSizeBits(keymasterDigest));
         }
     }
 
@@ -87,6 +99,11 @@
     private KeyGeneratorSpec mSpec;
     private SecureRandom mRng;
 
+    protected int mKeySizeBits;
+    private int[] mKeymasterPurposes;
+    private int[] mKeymasterBlockModes;
+    private int[] mKeymasterPaddings;
+
     protected KeyStoreKeyGeneratorSpi(
             int keymasterAlgorithm,
             int defaultKeySizeBits) {
@@ -100,6 +117,97 @@
         mKeymasterAlgorithm = keymasterAlgorithm;
         mKeymasterDigest = keymasterDigest;
         mDefaultKeySizeBits = defaultKeySizeBits;
+        if (mDefaultKeySizeBits <= 0) {
+            throw new IllegalArgumentException("Default key size must be positive");
+        }
+
+        if ((mKeymasterAlgorithm == KeymasterDefs.KM_ALGORITHM_HMAC) && (mKeymasterDigest == -1)) {
+            throw new IllegalArgumentException(
+                    "Digest algorithm must be specified for HMAC key");
+        }
+    }
+
+    @Override
+    protected void engineInit(SecureRandom random) {
+        throw new UnsupportedOperationException("Cannot initialize without an "
+                + KeyGeneratorSpec.class.getName() + " parameter");
+    }
+
+    @Override
+    protected void engineInit(int keySize, SecureRandom random) {
+        throw new UnsupportedOperationException("Cannot initialize without a "
+                + KeyGeneratorSpec.class.getName() + " parameter");
+    }
+
+    @Override
+    protected void engineInit(AlgorithmParameterSpec params, SecureRandom random)
+            throws InvalidAlgorithmParameterException {
+        resetAll();
+
+        boolean success = false;
+        try {
+            if ((params == null) || (!(params instanceof KeyGeneratorSpec))) {
+                throw new InvalidAlgorithmParameterException("Cannot initialize without an "
+                        + KeyGeneratorSpec.class.getName() + " parameter");
+            }
+            KeyGeneratorSpec spec = (KeyGeneratorSpec) params;
+            if (spec.getKeystoreAlias() == null) {
+                throw new InvalidAlgorithmParameterException("KeyStore entry alias not provided");
+            }
+
+            mRng = random;
+            mSpec = spec;
+
+            mKeySizeBits = (spec.getKeySize() != -1) ? spec.getKeySize() : mDefaultKeySizeBits;
+            if (mKeySizeBits <= 0) {
+                throw new InvalidAlgorithmParameterException(
+                        "Key size must be positive: " + mKeySizeBits);
+            } else if ((mKeySizeBits % 8) != 0) {
+                throw new InvalidAlgorithmParameterException(
+                        "Key size in must be a multiple of 8: " + mKeySizeBits);
+            }
+
+            try {
+                mKeymasterPurposes =
+                        KeyStoreKeyProperties.Purpose.allToKeymaster(spec.getPurposes());
+                mKeymasterPaddings = KeyStoreKeyProperties.EncryptionPadding.allToKeymaster(
+                        spec.getEncryptionPaddings());
+                mKeymasterBlockModes =
+                        KeyStoreKeyProperties.BlockMode.allToKeymaster(spec.getBlockModes());
+                if (((spec.getPurposes() & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
+                        && (spec.isRandomizedEncryptionRequired())) {
+                    for (int keymasterBlockMode : mKeymasterBlockModes) {
+                        if (!KeymasterUtils.isKeymasterBlockModeIndCpaCompatible(
+                                keymasterBlockMode)) {
+                            throw new InvalidAlgorithmParameterException(
+                                    "Randomized encryption (IND-CPA) required but may be violated"
+                                    + " by block mode: "
+                                    + KeyStoreKeyProperties.BlockMode.fromKeymaster(
+                                            keymasterBlockMode)
+                                    + ". See " + KeyGeneratorSpec.class.getName()
+                                    + " documentation.");
+                        }
+                    }
+                }
+            } catch (IllegalArgumentException e) {
+                throw new InvalidAlgorithmParameterException(e);
+            }
+
+            success = true;
+        } finally {
+            if (!success) {
+                resetAll();
+            }
+        }
+    }
+
+    private void resetAll() {
+        mSpec = null;
+        mRng = null;
+        mKeySizeBits = -1;
+        mKeymasterPurposes = null;
+        mKeymasterPaddings = null;
+        mKeymasterBlockModes = null;
     }
 
     @Override
@@ -117,50 +225,14 @@
         }
 
         KeymasterArguments args = new KeymasterArguments();
+        args.addInt(KeymasterDefs.KM_TAG_KEY_SIZE, mKeySizeBits);
         args.addInt(KeymasterDefs.KM_TAG_ALGORITHM, mKeymasterAlgorithm);
         if (mKeymasterDigest != -1) {
             args.addInt(KeymasterDefs.KM_TAG_DIGEST, mKeymasterDigest);
-            int digestOutputSizeBytes =
-                    KeymasterUtils.getDigestOutputSizeBytes(mKeymasterDigest);
-            if (digestOutputSizeBytes != -1) {
-                // TODO: Remove MAC length constraint once Keymaster API no longer requires it.
-                // TODO: Switch to bits instead of bytes, once this is fixed in Keymaster
-                args.addInt(KeymasterDefs.KM_TAG_MAC_LENGTH, digestOutputSizeBytes);
-            }
         }
-        if (mKeymasterAlgorithm == KeymasterDefs.KM_ALGORITHM_HMAC) {
-            if (mKeymasterDigest == -1) {
-                throw new IllegalStateException("Digest algorithm must be specified for HMAC key");
-            }
-        }
-        int keySizeBits = (spec.getKeySize() != -1) ? spec.getKeySize() : mDefaultKeySizeBits;
-        args.addInt(KeymasterDefs.KM_TAG_KEY_SIZE, keySizeBits);
-        @KeyStoreKeyProperties.PurposeEnum int purposes = spec.getPurposes();
-        int[] keymasterBlockModes = KeymasterUtils.getKeymasterBlockModesFromJcaBlockModes(
-                spec.getBlockModes());
-        if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
-                && (spec.isRandomizedEncryptionRequired())) {
-            for (int keymasterBlockMode : keymasterBlockModes) {
-                if (!KeymasterUtils.isKeymasterBlockModeIndCpaCompatible(keymasterBlockMode)) {
-                    throw new IllegalStateException(
-                            "Randomized encryption (IND-CPA) required but may be violated by block"
-                            + " mode: "
-                            + KeymasterUtils.getJcaBlockModeFromKeymasterBlockMode(
-                                    keymasterBlockMode)
-                            + ". See KeyGeneratorSpec documentation.");
-                }
-            }
-        }
-
-        for (int keymasterPurpose :
-            KeyStoreKeyProperties.Purpose.allToKeymaster(purposes)) {
-            args.addInt(KeymasterDefs.KM_TAG_PURPOSE, keymasterPurpose);
-        }
-        args.addInts(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockModes);
-        args.addInts(
-                KeymasterDefs.KM_TAG_PADDING,
-                KeymasterUtils.getKeymasterPaddingsFromJcaEncryptionPaddings(
-                        spec.getEncryptionPaddings()));
+        args.addInts(KeymasterDefs.KM_TAG_PURPOSE, mKeymasterPurposes);
+        args.addInts(KeymasterDefs.KM_TAG_BLOCK_MODE, mKeymasterBlockModes);
+        args.addInts(KeymasterDefs.KM_TAG_PADDING, mKeymasterPaddings);
         KeymasterUtils.addUserAuthArgs(args,
                 spec.getContext(),
                 spec.isUserAuthenticationRequired(),
@@ -175,57 +247,31 @@
                 (spec.getKeyValidityForConsumptionEnd() != null)
                 ? spec.getKeyValidityForConsumptionEnd() : new Date(Long.MAX_VALUE));
 
-        if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
+        if (((spec.getPurposes() & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
                 && (!spec.isRandomizedEncryptionRequired())) {
             // Permit caller-provided IV when encrypting with this key
             args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
         }
 
-        byte[] additionalEntropy = null;
-        SecureRandom rng = mRng;
-        if (rng != null) {
-            additionalEntropy = new byte[(keySizeBits + 7) / 8];
-            rng.nextBytes(additionalEntropy);
-        }
-
+        byte[] additionalEntropy =
+                KeyStoreCryptoOperationUtils.getRandomBytesToMixIntoKeystoreRng(
+                        mRng, (mKeySizeBits + 7) / 8);
         int flags = spec.getFlags();
         String keyAliasInKeystore = Credentials.USER_SECRET_KEY + spec.getKeystoreAlias();
+        KeyCharacteristics resultingKeyCharacteristics = new KeyCharacteristics();
         int errorCode = mKeyStore.generateKey(
-                keyAliasInKeystore, args, additionalEntropy, flags, new KeyCharacteristics());
+                keyAliasInKeystore, args, additionalEntropy, flags, resultingKeyCharacteristics);
         if (errorCode != KeyStore.NO_ERROR) {
-            throw new IllegalStateException(
+            throw new ProviderException(
                     "Keystore operation failed", KeyStore.getKeyStoreException(errorCode));
         }
-        String keyAlgorithmJCA =
-                KeymasterUtils.getJcaSecretKeyAlgorithm(mKeymasterAlgorithm, mKeymasterDigest);
+        String keyAlgorithmJCA;
+        try {
+            keyAlgorithmJCA = KeyStoreKeyProperties.Algorithm.fromKeymasterSecretKeyAlgorithm(
+                    mKeymasterAlgorithm, mKeymasterDigest);
+        } catch (IllegalArgumentException e) {
+            throw new ProviderException("Failed to obtain JCA secret key algorithm name", e);
+        }
         return new KeyStoreSecretKey(keyAliasInKeystore, keyAlgorithmJCA);
     }
-
-    @Override
-    protected void engineInit(SecureRandom random) {
-        throw new UnsupportedOperationException("Cannot initialize without an "
-                + KeyGeneratorSpec.class.getName() + " parameter");
-    }
-
-    @Override
-    protected void engineInit(AlgorithmParameterSpec params, SecureRandom random)
-            throws InvalidAlgorithmParameterException {
-        if ((params == null) || (!(params instanceof KeyGeneratorSpec))) {
-            throw new InvalidAlgorithmParameterException("Cannot initialize without an "
-                    + KeyGeneratorSpec.class.getName() + " parameter");
-        }
-        KeyGeneratorSpec spec = (KeyGeneratorSpec) params;
-        if (spec.getKeystoreAlias() == null) {
-            throw new InvalidAlgorithmParameterException("KeyStore entry alias not provided");
-        }
-
-        mSpec = spec;
-        mRng = random;
-    }
-
-    @Override
-    protected void engineInit(int keySize, SecureRandom random) {
-        throw new UnsupportedOperationException("Cannot initialize without a "
-                + KeyGeneratorSpec.class.getName() + " parameter");
-    }
 }
diff --git a/keystore/java/android/security/KeyStoreKeyProperties.java b/keystore/java/android/security/KeyStoreKeyProperties.java
index b85ec53..d1b0e5b 100644
--- a/keystore/java/android/security/KeyStoreKeyProperties.java
+++ b/keystore/java/android/security/KeyStoreKeyProperties.java
@@ -17,13 +17,25 @@
 package android.security;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.StringDef;
 import android.security.keymaster.KeymasterDefs;
 
 import libcore.util.EmptyArray;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.security.Key;
+import java.security.KeyFactory;
+import java.security.KeyPairGenerator;
 import java.util.Collection;
+import java.util.Locale;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.Mac;
+import javax.crypto.SecretKeyFactory;
 
 /**
  * Properties of {@code AndroidKeyStore} keys.
@@ -37,7 +49,7 @@
     public @interface PurposeEnum {}
 
     /**
-     * Purpose of key.
+     * Purposes of key.
      */
     public static abstract class Purpose {
         private Purpose() {}
@@ -101,6 +113,7 @@
         /**
          * @hide
          */
+        @NonNull
         public static int[] allToKeymaster(@PurposeEnum int purposes) {
             int[] result = getSetFlags(purposes);
             for (int i = 0; i < result.length; i++) {
@@ -112,7 +125,7 @@
         /**
          * @hide
          */
-        public static @PurposeEnum int allFromKeymaster(Collection<Integer> purposes) {
+        public static @PurposeEnum int allFromKeymaster(@NonNull Collection<Integer> purposes) {
             @PurposeEnum int result = 0;
             for (int keymasterPurpose : purposes) {
                 result |= fromKeymaster(keymasterPurpose);
@@ -122,6 +135,524 @@
     }
 
     @Retention(RetentionPolicy.SOURCE)
+    @StringDef({
+        Algorithm.RSA,
+        Algorithm.EC,
+        Algorithm.AES,
+        Algorithm.HMAC_SHA1,
+        Algorithm.HMAC_SHA224,
+        Algorithm.HMAC_SHA256,
+        Algorithm.HMAC_SHA384,
+        Algorithm.HMAC_SHA512,
+        })
+    public @interface AlgorithmEnum {}
+
+    /**
+     * Key algorithms.
+     *
+     * <p>These are standard names which can be used to obtain instances of {@link KeyGenerator},
+     * {@link KeyPairGenerator}, {@link Cipher} (as part of the transformation string), {@link Mac},
+     * {@link KeyFactory}, {@link SecretKeyFactory}. These are also the names used by
+     * {@link Key#getAlgorithm()}.
+     */
+    public static abstract class Algorithm {
+        private Algorithm() {}
+
+        /** Rivest Shamir Adleman (RSA) key. */
+        public static final String RSA = "RSA";
+
+        /** Elliptic Curve (EC) key. */
+        public static final String EC = "EC";
+
+        /** Advanced Encryption Standard (AES) key. */
+        public static final String AES = "AES";
+
+        /** Keyed-Hash Message Authentication Code (HMAC) key using SHA-1 as the hash. */
+        public static final String HMAC_SHA1 = "HmacSHA1";
+
+        /** Keyed-Hash Message Authentication Code (HMAC) key using SHA-224 as the hash. */
+        public static final String HMAC_SHA224 = "HmacSHA224";
+
+        /** Keyed-Hash Message Authentication Code (HMAC) key using SHA-256 as the hash. */
+        public static final String HMAC_SHA256 = "HmacSHA256";
+
+        /** Keyed-Hash Message Authentication Code (HMAC) key using SHA-384 as the hash. */
+        public static final String HMAC_SHA384 = "HmacSHA384";
+
+        /** Keyed-Hash Message Authentication Code (HMAC) key using SHA-512 as the hash. */
+        public static final String HMAC_SHA512 = "HmacSHA512";
+
+        /**
+         * @hide
+         */
+        static int toKeymasterSecretKeyAlgorithm(@NonNull @AlgorithmEnum String algorithm) {
+            if (AES.equalsIgnoreCase(algorithm)) {
+                return KeymasterDefs.KM_ALGORITHM_AES;
+            } else if (algorithm.toUpperCase(Locale.US).startsWith("HMAC")) {
+                return KeymasterDefs.KM_ALGORITHM_HMAC;
+            } else {
+                throw new IllegalArgumentException(
+                        "Unsupported secret key algorithm: " + algorithm);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static @AlgorithmEnum String fromKeymasterSecretKeyAlgorithm(
+                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 AES;
+                case KeymasterDefs.KM_ALGORITHM_HMAC:
+                    switch (keymasterDigest) {
+                        case KeymasterDefs.KM_DIGEST_SHA1:
+                            return HMAC_SHA1;
+                        case KeymasterDefs.KM_DIGEST_SHA_2_224:
+                            return HMAC_SHA224;
+                        case KeymasterDefs.KM_DIGEST_SHA_2_256:
+                            return HMAC_SHA256;
+                        case KeymasterDefs.KM_DIGEST_SHA_2_384:
+                            return HMAC_SHA384;
+                        case KeymasterDefs.KM_DIGEST_SHA_2_512:
+                            return HMAC_SHA512;
+                        default:
+                            throw new IllegalArgumentException("Unsupported HMAC digest: "
+                                    + Digest.fromKeymaster(keymasterDigest));
+                    }
+                default:
+                    throw new IllegalArgumentException(
+                            "Unsupported algorithm: " + keymasterAlgorithm);
+            }
+        }
+
+        /**
+         * @hide
+         *
+         * @return keymaster digest or {@code -1} if the algorithm does not involve a digest.
+         */
+        static int toKeymasterDigest(@NonNull @AlgorithmEnum String algorithm) {
+            String algorithmUpper = algorithm.toUpperCase(Locale.US);
+            if (algorithmUpper.startsWith("HMAC")) {
+                String digestUpper = algorithmUpper.substring("HMAC".length());
+                switch (digestUpper) {
+                    case "SHA1":
+                        return KeymasterDefs.KM_DIGEST_SHA1;
+                    case "SHA224":
+                        return KeymasterDefs.KM_DIGEST_SHA_2_224;
+                    case "SHA256":
+                        return KeymasterDefs.KM_DIGEST_SHA_2_256;
+                    case "SHA384":
+                        return KeymasterDefs.KM_DIGEST_SHA_2_384;
+                    case "SHA512":
+                        return KeymasterDefs.KM_DIGEST_SHA_2_512;
+                    default:
+                        throw new IllegalArgumentException(
+                                "Unsupported HMAC digest: " + digestUpper);
+                }
+            } else {
+                return -1;
+            }
+        }
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
+    @StringDef({
+        BlockMode.ECB,
+        BlockMode.CBC,
+        BlockMode.CTR,
+        BlockMode.GCM,
+        })
+    public @interface BlockModeEnum {}
+
+    /**
+     * Block modes that can be used when encrypting/decrypting using a key.
+     */
+    public static abstract class BlockMode {
+        private BlockMode() {}
+
+        /** Electronic Codebook (ECB) block mode. */
+        public static final String ECB = "ECB";
+
+        /** Cipher Block Chaining (CBC) block mode. */
+        public static final String CBC = "CBC";
+
+        /** Counter (CTR) block mode. */
+        public static final String CTR = "CTR";
+
+        /** Galois/Counter Mode (GCM) block mode. */
+        public static final String GCM = "GCM";
+
+        /**
+         * @hide
+         */
+        static int toKeymaster(@NonNull @BlockModeEnum String blockMode) {
+            if (ECB.equalsIgnoreCase(blockMode)) {
+                return KeymasterDefs.KM_MODE_ECB;
+            } else if (CBC.equalsIgnoreCase(blockMode)) {
+                return KeymasterDefs.KM_MODE_CBC;
+            } else if (CTR.equalsIgnoreCase(blockMode)) {
+                return KeymasterDefs.KM_MODE_CTR;
+            } else if (GCM.equalsIgnoreCase(blockMode)) {
+                return KeymasterDefs.KM_MODE_GCM;
+            } else {
+                throw new IllegalArgumentException("Unsupported block mode: " + blockMode);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static @BlockModeEnum String fromKeymaster(int blockMode) {
+            switch (blockMode) {
+                case KeymasterDefs.KM_MODE_ECB:
+                    return ECB;
+                case KeymasterDefs.KM_MODE_CBC:
+                    return CBC;
+                case KeymasterDefs.KM_MODE_CTR:
+                    return CTR;
+                case KeymasterDefs.KM_MODE_GCM:
+                    return GCM;
+                default:
+                    throw new IllegalArgumentException("Unsupported block mode: " + blockMode);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static @BlockModeEnum String[] allFromKeymaster(@NonNull Collection<Integer> blockModes) {
+            if ((blockModes == null) || (blockModes.isEmpty())) {
+                return EmptyArray.STRING;
+            }
+            @BlockModeEnum String[] result = new String[blockModes.size()];
+            int offset = 0;
+            for (int blockMode : blockModes) {
+                result[offset] = fromKeymaster(blockMode);
+                offset++;
+            }
+            return result;
+        }
+
+        /**
+         * @hide
+         */
+        static int[] allToKeymaster(@Nullable @BlockModeEnum String[] blockModes) {
+            if ((blockModes == null) || (blockModes.length == 0)) {
+                return EmptyArray.INT;
+            }
+            int[] result = new int[blockModes.length];
+            for (int i = 0; i < blockModes.length; i++) {
+                result[i] = toKeymaster(blockModes[i]);
+            }
+            return result;
+        }
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
+    @StringDef({
+        EncryptionPadding.NONE,
+        EncryptionPadding.PKCS7,
+        EncryptionPadding.RSA_PKCS1,
+        EncryptionPadding.RSA_OAEP,
+        })
+    public @interface EncryptionPaddingEnum {}
+
+    /**
+     * Padding schemes for encryption/decryption.
+     */
+    public static abstract class EncryptionPadding {
+        private EncryptionPadding() {}
+
+        /**
+         * No padding.
+         */
+        public static final String NONE = "NoPadding";
+
+        /**
+         * PKCS#7 padding.
+         */
+        public static final String PKCS7 = "PKCS7Padding";
+
+        /**
+         * RSA PKCS#1 v1.5 padding for encryption/decryption.
+         */
+        public static final String RSA_PKCS1 = "PKCS1Padding";
+
+        /**
+         * RSA Optimal Asymmetric Encryption Padding (OAEP).
+         */
+        public static final String RSA_OAEP = "OAEPPadding";
+
+        /**
+         * @hide
+         */
+        static int toKeymaster(@NonNull @EncryptionPaddingEnum String padding) {
+            if (NONE.equalsIgnoreCase(padding)) {
+                return KeymasterDefs.KM_PAD_NONE;
+            } else if (PKCS7.equalsIgnoreCase(padding)) {
+                return KeymasterDefs.KM_PAD_PKCS7;
+            } else if (RSA_PKCS1.equalsIgnoreCase(padding)) {
+                return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT;
+            } else if (RSA_OAEP.equalsIgnoreCase(padding)) {
+                return KeymasterDefs.KM_PAD_RSA_OAEP;
+            } else {
+                throw new IllegalArgumentException(
+                        "Unsupported encryption padding scheme: " + padding);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static @EncryptionPaddingEnum String fromKeymaster(int padding) {
+            switch (padding) {
+                case KeymasterDefs.KM_PAD_NONE:
+                    return NONE;
+                case KeymasterDefs.KM_PAD_PKCS7:
+                    return PKCS7;
+                case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT:
+                    return RSA_PKCS1;
+                case KeymasterDefs.KM_PAD_RSA_OAEP:
+                    return RSA_OAEP;
+                default:
+                    throw new IllegalArgumentException(
+                            "Unsupported encryption padding: " + padding);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static int[] allToKeymaster(@Nullable @EncryptionPaddingEnum String[] paddings) {
+            if ((paddings == null) || (paddings.length == 0)) {
+                return EmptyArray.INT;
+            }
+            int[] result = new int[paddings.length];
+            for (int i = 0; i < paddings.length; i++) {
+                result[i] = toKeymaster(paddings[i]);
+            }
+            return result;
+        }
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
+    @StringDef({
+        SignaturePadding.RSA_PKCS1,
+        SignaturePadding.RSA_PSS,
+        })
+    public @interface SignaturePaddingEnum {}
+
+    /**
+     * Padding schemes for signing/verification.
+     */
+    public static abstract class SignaturePadding {
+        private SignaturePadding() {}
+
+        /**
+         * RSA PKCS#1 v1.5 padding for signatures.
+         */
+        public static final String RSA_PKCS1 = "PKCS1";
+
+        /**
+         * RSA PKCS#1 v2.1 Probabilistic Signature Scheme (PSS) padding.
+         */
+        public static final String RSA_PSS = "PSS";
+
+        /**
+         * @hide
+         */
+        static int toKeymaster(@NonNull @SignaturePaddingEnum String padding) {
+            switch (padding.toUpperCase(Locale.US)) {
+                case RSA_PKCS1:
+                    return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN;
+                case RSA_PSS:
+                    return KeymasterDefs.KM_PAD_RSA_PSS;
+                default:
+                    throw new IllegalArgumentException(
+                            "Unsupported signature padding scheme: " + padding);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static @SignaturePaddingEnum String fromKeymaster(int padding) {
+            switch (padding) {
+                case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN:
+                    return RSA_PKCS1;
+                case KeymasterDefs.KM_PAD_RSA_PSS:
+                    return RSA_PSS;
+                default:
+                    throw new IllegalArgumentException("Unsupported signature padding: " + padding);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static int[] allToKeymaster(@Nullable @SignaturePaddingEnum String[] paddings) {
+            if ((paddings == null) || (paddings.length == 0)) {
+                return EmptyArray.INT;
+            }
+            int[] result = new int[paddings.length];
+            for (int i = 0; i < paddings.length; i++) {
+                result[i] = toKeymaster(paddings[i]);
+            }
+            return result;
+        }
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
+    @StringDef({
+        Digest.NONE,
+        Digest.MD5,
+        Digest.SHA1,
+        Digest.SHA224,
+        Digest.SHA256,
+        Digest.SHA384,
+        Digest.SHA512,
+        })
+    public @interface DigestEnum {}
+
+    /**
+     * Digests that can be used with a key when signing or generating Message Authentication
+     * Codes (MACs).
+     */
+    public static abstract class Digest {
+        private Digest() {}
+
+        /**
+         * No digest: sign/authenticate the raw message.
+         */
+        public static final String NONE = "NONE";
+
+        /**
+         * MD5 digest.
+         */
+        public static final String MD5 = "MD5";
+
+        /**
+         * SHA-1 digest.
+         */
+        public static final String SHA1 = "SHA-1";
+
+        /**
+         * SHA-2 224 (aka SHA-224) digest.
+         */
+        public static final String SHA224 = "SHA-224";
+
+        /**
+         * SHA-2 256 (aka SHA-256) digest.
+         */
+        public static final String SHA256 = "SHA-256";
+
+        /**
+         * SHA-2 384 (aka SHA-384) digest.
+         */
+        public static final String SHA384 = "SHA-384";
+
+        /**
+         * SHA-2 512 (aka SHA-512) digest.
+         */
+        public static final String SHA512 = "SHA-512";
+
+        /**
+         * @hide
+         */
+        static int toKeymaster(@NonNull @DigestEnum String digest) {
+            switch (digest.toUpperCase(Locale.US)) {
+                case SHA1:
+                    return KeymasterDefs.KM_DIGEST_SHA1;
+                case SHA224:
+                    return KeymasterDefs.KM_DIGEST_SHA_2_224;
+                case SHA256:
+                    return KeymasterDefs.KM_DIGEST_SHA_2_256;
+                case SHA384:
+                    return KeymasterDefs.KM_DIGEST_SHA_2_384;
+                case SHA512:
+                    return KeymasterDefs.KM_DIGEST_SHA_2_512;
+                case NONE:
+                    return KeymasterDefs.KM_DIGEST_NONE;
+                case MD5:
+                    return KeymasterDefs.KM_DIGEST_MD5;
+                default:
+                    throw new IllegalArgumentException("Unsupported digest algorithm: " + digest);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static @DigestEnum String fromKeymaster(int digest) {
+            switch (digest) {
+                case KeymasterDefs.KM_DIGEST_NONE:
+                    return NONE;
+                case KeymasterDefs.KM_DIGEST_MD5:
+                    return MD5;
+                case KeymasterDefs.KM_DIGEST_SHA1:
+                    return SHA1;
+                case KeymasterDefs.KM_DIGEST_SHA_2_224:
+                    return SHA224;
+                case KeymasterDefs.KM_DIGEST_SHA_2_256:
+                    return SHA256;
+                case KeymasterDefs.KM_DIGEST_SHA_2_384:
+                    return SHA384;
+                case KeymasterDefs.KM_DIGEST_SHA_2_512:
+                    return SHA512;
+                default:
+                    throw new IllegalArgumentException("Unsupported digest algorithm: " + digest);
+            }
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static @DigestEnum String[] allFromKeymaster(@NonNull Collection<Integer> digests) {
+            if (digests.isEmpty()) {
+                return EmptyArray.STRING;
+            }
+            String[] result = new String[digests.size()];
+            int offset = 0;
+            for (int digest : digests) {
+                result[offset] = fromKeymaster(digest);
+                offset++;
+            }
+            return result;
+        }
+
+        /**
+         * @hide
+         */
+        @NonNull
+        static int[] allToKeymaster(@Nullable @DigestEnum String[] digests) {
+            if ((digests == null) || (digests.length == 0)) {
+                return EmptyArray.INT;
+            }
+            int[] result = new int[digests.length];
+            int offset = 0;
+            for (@DigestEnum String digest : digests) {
+                result[offset] = toKeymaster(digest);
+                offset++;
+            }
+            return result;
+        }
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
     @IntDef({Origin.GENERATED, Origin.IMPORTED, Origin.UNKNOWN})
     public @interface OriginEnum {}
 
@@ -138,7 +669,7 @@
         public static final int IMPORTED = 1 << 1;
 
         /**
-         * Origin of the key is unknown. This can occur only for keys backed by an old TEE
+         * Origin of the key is unknown. This can occur only for keys backed by an old TEE-backed
          * implementation which does not record origin information.
          */
         public static final int UNKNOWN = 1 << 2;
diff --git a/keystore/java/android/security/KeyStoreKeySpec.java b/keystore/java/android/security/KeyStoreKeySpec.java
index 96d58d8..81a19bb 100644
--- a/keystore/java/android/security/KeyStoreKeySpec.java
+++ b/keystore/java/android/security/KeyStoreKeySpec.java
@@ -16,50 +16,90 @@
 
 package android.security;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import java.security.PrivateKey;
 import java.security.spec.KeySpec;
 import java.util.Date;
 
+import javax.crypto.SecretKey;
+
 /**
  * Information about a key from the <a href="{@docRoot}training/articles/keystore.html">Android
- * KeyStore</a>.
+ * KeyStore</a>. This class describes whether the key material is available in
+ * plaintext outside of secure hardware, whether user authentication is required for using the key
+ * and whether this requirement is enforced by secure hardware, the key's origin, what uses the key
+ * is authorized for (e.g., only in {@code CBC} mode, or signing only), whether the key should be
+ * encrypted at rest, the key's and validity start and end dates.
+ *
+ * <p><h3>Example: Symmetric Key</h3>
+ * The following example illustrates how to obtain a {@link KeyStoreKeySpec} describing the provided
+ * Android KeyStore {@link SecretKey}.
+ * <pre> {@code
+ * SecretKey key = ...; // Android KeyStore key
+ *
+ * SecretKeyFactory factory = SecretKeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
+ * KeyStoreKeySpec spec;
+ * try &#123;
+ *     spec = (KeyStoreKeySpec) factory.getKeySpec(key, KeyStoreKeySpec.class);
+ * &#125; catch (InvalidKeySpecException e) &#123;
+ *     // Not an Android KeyStore key.
+ * &#125;
+ * }</pre>
+ *
+ * <p><h3>Example: Private Key</h3>
+ * The following example illustrates how to obtain a {@link KeyStoreKeySpec} describing the provided
+ * Android KeyStore {@link PrivateKey}.
+ * <pre> {@code
+ * PrivateKey key = ...; // Android KeyStore key
+ *
+ * KeyFactory factory = KeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
+ * KeyStoreKeySpec spec;
+ * try &#123;
+ *     spec = factory.getKeySpec(key, KeyStoreKeySpec.class);
+ * &#125; catch (InvalidKeySpecException e) &#123;
+ *     // Not an Android KeyStore key.
+ * &#125;
+ * }</pre>
  */
 public class KeyStoreKeySpec implements KeySpec {
     private final String mKeystoreAlias;
     private final int mKeySize;
-    private final boolean mTeeBacked;
+    private final boolean mInsideSecureHardware;
     private final @KeyStoreKeyProperties.OriginEnum int mOrigin;
     private final Date mKeyValidityStart;
     private final Date mKeyValidityForOriginationEnd;
     private final Date mKeyValidityForConsumptionEnd;
     private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
-    private final String[] mEncryptionPaddings;
-    private final String[] mSignaturePaddings;
-    private final String[] mDigests;
-    private final String[] mBlockModes;
+    private final @KeyStoreKeyProperties.EncryptionPaddingEnum String[] mEncryptionPaddings;
+    private final @KeyStoreKeyProperties.SignaturePaddingEnum String[] mSignaturePaddings;
+    private final @KeyStoreKeyProperties.DigestEnum String[] mDigests;
+    private final @KeyStoreKeyProperties.BlockModeEnum String[] mBlockModes;
     private final boolean mUserAuthenticationRequired;
     private final int mUserAuthenticationValidityDurationSeconds;
-    private final boolean mUserAuthenticationRequirementTeeEnforced;
+    private final boolean mUserAuthenticationRequirementEnforcedBySecureHardware;
 
     /**
      * @hide
      */
     KeyStoreKeySpec(String keystoreKeyAlias,
-            boolean teeBacked,
+            boolean insideSecureHardware,
             @KeyStoreKeyProperties.OriginEnum int origin,
             int keySize,
             Date keyValidityStart,
             Date keyValidityForOriginationEnd,
             Date keyValidityForConsumptionEnd,
             @KeyStoreKeyProperties.PurposeEnum int purposes,
-            String[] encryptionPaddings,
-            String[] signaturePaddings,
-            String[] digests,
-            String[] blockModes,
+            @KeyStoreKeyProperties.EncryptionPaddingEnum String[] encryptionPaddings,
+            @KeyStoreKeyProperties.SignaturePaddingEnum String[] signaturePaddings,
+            @KeyStoreKeyProperties.DigestEnum String[] digests,
+            @KeyStoreKeyProperties.BlockModeEnum String[] blockModes,
             boolean userAuthenticationRequired,
             int userAuthenticationValidityDurationSeconds,
-            boolean userAuthenticationRequirementTeeEnforced) {
+            boolean userAuthenticationRequirementEnforcedBySecureHardware) {
         mKeystoreAlias = keystoreKeyAlias;
-        mTeeBacked = teeBacked;
+        mInsideSecureHardware = insideSecureHardware;
         mOrigin = origin;
         mKeySize = keySize;
         mKeyValidityStart = keyValidityStart;
@@ -74,7 +114,8 @@
         mBlockModes = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(blockModes));
         mUserAuthenticationRequired = userAuthenticationRequired;
         mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
-        mUserAuthenticationRequirementTeeEnforced = userAuthenticationRequirementTeeEnforced;
+        mUserAuthenticationRequirementEnforcedBySecureHardware =
+                userAuthenticationRequirementEnforcedBySecureHardware;
     }
 
     /**
@@ -85,11 +126,12 @@
     }
 
     /**
-     * Returns {@code true} if the key is TEE-backed. Key material of TEE-backed keys is available
-     * in plaintext only inside the TEE.
+     * Returns {@code true} if the key resides inside secure hardware (e.g., Trusted Execution
+     * Environment (TEE) or Secure Element (SE)). Key material of such keys is available in
+     * plaintext only inside the secure hardware and is not exposed outside of it.
      */
-    public boolean isTeeBacked() {
-        return mTeeBacked;
+    public boolean isInsideSecureHardware() {
+        return mInsideSecureHardware;
     }
 
     /**
@@ -111,6 +153,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityStart() {
         return mKeyValidityStart;
     }
@@ -120,6 +163,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForConsumptionEnd() {
         return mKeyValidityForConsumptionEnd;
     }
@@ -129,6 +173,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForOriginationEnd() {
         return mKeyValidityForOriginationEnd;
     }
@@ -143,28 +188,32 @@
     /**
      * Gets the set of block modes with which the key can be used.
      */
-    public String[] getBlockModes() {
+    @NonNull
+    public @KeyStoreKeyProperties.BlockModeEnum String[] getBlockModes() {
         return ArrayUtils.cloneIfNotEmpty(mBlockModes);
     }
 
     /**
      * Gets the set of padding modes with which the key can be used when encrypting/decrypting.
      */
-    public String[] getEncryptionPaddings() {
+    @NonNull
+    public @KeyStoreKeyProperties.EncryptionPaddingEnum String[] getEncryptionPaddings() {
         return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
     }
 
     /**
      * Gets the set of padding modes with which the key can be used when signing/verifying.
      */
-    public String[] getSignaturePaddings() {
+    @NonNull
+    public @KeyStoreKeyProperties.SignaturePaddingEnum String[] getSignaturePaddings() {
         return ArrayUtils.cloneIfNotEmpty(mSignaturePaddings);
     }
 
     /**
      * Gets the set of digest algorithms with which the key can be used.
      */
-    public String[] getDigests() {
+    @NonNull
+    public @KeyStoreKeyProperties.DigestEnum String[] getDigests() {
         return ArrayUtils.cloneIfNotEmpty(mDigests);
     }
 
@@ -179,10 +228,10 @@
 
     /**
      * Gets the duration of time (seconds) for which this key can be used after the user is
-     * successfully authenticated.
+     * successfully authenticated. This has effect only if user authentication is required.
      *
-     * @return duration in seconds or {@code -1} if not restricted. {@code 0} means authentication
-     *         is required for every use of the key.
+     * @return duration in seconds or {@code -1} if authentication is required for every use of the
+     *         key.
      *
      * @see #isUserAuthenticationRequired()
      */
@@ -192,11 +241,12 @@
 
     /**
      * Returns {@code true} if the requirement that this key can only be used if the user has been
-     * authenticated if enforced by the TEE.
+     * authenticated if enforced by secure hardware (e.g., Trusted Execution Environment (TEE) or
+     * Secure Element (SE)).
      *
      * @see #isUserAuthenticationRequired()
      */
-    public boolean isUserAuthenticationRequirementTeeEnforced() {
-        return mUserAuthenticationRequirementTeeEnforced;
+    public boolean isUserAuthenticationRequirementEnforcedBySecureHardware() {
+        return mUserAuthenticationRequirementEnforcedBySecureHardware;
     }
 }
diff --git a/keystore/java/android/security/KeyStoreParameter.java b/keystore/java/android/security/KeyStoreParameter.java
index b4747e9..4a736c3 100644
--- a/keystore/java/android/security/KeyStoreParameter.java
+++ b/keystore/java/android/security/KeyStoreParameter.java
@@ -16,27 +16,92 @@
 
 package android.security;
 
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.KeyguardManager;
 import android.content.Context;
 
 import java.security.Key;
 import java.security.KeyStore.ProtectionParameter;
+import java.security.cert.Certificate;
 import java.util.Date;
 
 import javax.crypto.Cipher;
 
 /**
- * Parameters specifying how to secure and restrict the use of a key being
- * imported into the
- * <a href="{@docRoot}training/articles/keystore.html">Android KeyStore
- * facility</a>. The Android KeyStore facility is accessed through a
- * {@link java.security.KeyStore} API using the {@code AndroidKeyStore}
- * provider. The {@code context} passed in may be used to pop up some UI to ask
- * the user to unlock or initialize the Android KeyStore facility.
- * <p>
- * Any entries placed in the {@code KeyStore} may be retrieved later. Note that
- * there is only one logical instance of the {@code KeyStore} per application
- * UID so apps using the {@code sharedUid} facility will also share a
- * {@code KeyStore}.
+ * Parameters specifying how to secure and restrict the use of a key or key pair being imported into
+ * the <a href="{@docRoot}training/articles/keystore.html">Android KeyStore facility</a>. This class
+ * specifies whether user authentication is required for using the key, what uses the key is
+ * authorized for (e.g., only in {@code CTR} mode, or only for signing -- decryption not permitted),
+ * whether the key should be encrypted at rest, the key's and validity start and end dates.
+ *
+ * <p>To import a key or key pair into the Android KeyStore, create an instance of this class using
+ * the {@link Builder} and pass the instance into {@link java.security.KeyStore#setEntry(String, java.security.KeyStore.Entry, ProtectionParameter) KeyStore.setEntry}
+ * with the key or key pair being imported.
+ *
+ * <p>To obtain the secret/symmetric or private key from the Android KeyStore use
+ * {@link java.security.KeyStore#getKey(String, char[]) KeyStore.getKey(String, null)} or
+ * {@link java.security.KeyStore#getEntry(String, java.security.KeyStore.ProtectionParameter) KeyStore.getEntry(String, null)}.
+ * To obtain the public key from the Android KeyStore use
+ * {@link java.security.KeyStore#getCertificate(String)} and then
+ * {@link Certificate#getPublicKey()}.
+ *
+ * <p>NOTE: The key material of keys stored in the Android KeyStore is not accessible.
+ *
+ * <p><h3>Example: Symmetric Key</h3>
+ * The following example illustrates how to import an AES key into the Android KeyStore under alias
+ * {@code key1} authorized to be used only for encryption/decryption in CBC mode with PKCS#7
+ * padding. The key must export its key material via {@link Key#getEncoded()} in {@code RAW} format.
+ * <pre> {@code
+ * SecretKey key = ...; // AES key
+ *
+ * KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
+ * keyStore.load(null);
+ * keyStore.setEntry(
+ *         "key1",
+ *         new KeyStore.SecretKeyEntry(key),
+ *         new KeyStoreParameter.Builder(context)
+ *                 .setPurposes(KeyStoreKeyProperties.Purpose.ENCRYPT
+ *                         | KeyStoreKeyProperties.Purpose.DECRYPT)
+ *                 .setBlockMode(KeyStoreKeyProperties.BlockMode.CBC)
+ *                 .setEncryptionPaddings(
+ *                         KeyStoreKeyProperties.EncryptionPaddings.PKCS7)
+ *                 .build());
+ * // Key imported, obtain a reference to it.
+ * SecretKey keyStoreKey = (SecretKey) keyStore.getKey("key1", null);
+ * // The original key can now be thrown away.
+ * }</pre>
+ *
+ * <p><h3>Example: Asymmetric Key Pair</h3>
+ * The following example illustrates how to import an EC key pair into the Android KeyStore under
+ * alias {@code key2} authorized to be used only for signing with SHA-256 digest and only if
+ * the user has been authenticated within the last ten minutes. Both the private and the public key
+ * must export their key material via {@link Key#getEncoded()} in {@code PKCS#8} and {@code X.509}
+ * format respectively.
+ * <pre> {@code
+ * PrivateKey privateKey = ...;   // EC private key
+ * Certificate[] certChain = ...; // Certificate chain with the first certificate
+ *                                // containing the corresponding EC public key.
+ *
+ * KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
+ * keyStore.load(null);
+ * keyStore.setEntry(
+ *         "key2",
+ *         new KeyStore.PrivateKeyEntry(privateKey, certChain),
+ *         new KeyStoreParameter.Builder(context)
+ *                 .setPurposes(KeyStoreKeyProperties.Purpose.SIGN)
+ *                 .setDigests(KeyStoreKeyProperties.Digest.SHA256)
+ *                 // Only permit this key to be used if the user
+ *                 // authenticated within the last ten minutes.
+ *                 .setUserAuthenticationRequired(true)
+ *                 .setUserAuthenticationValidityDurationSeconds(10 * 60)
+ *                 .build());
+ * // Key pair imported, obtain a reference to it.
+ * PrivateKey keyStorePrivateKey = (PrivateKey) keyStore.getKey("key2", null);
+ * PublicKey publicKey = keyStore.getCertificate("key2").getPublicKey();
+ * // The original private key can now be thrown away.
+ * }</pre>
  */
 public final class KeyStoreParameter implements ProtectionParameter {
     private final Context mContext;
@@ -45,10 +110,10 @@
     private final Date mKeyValidityForOriginationEnd;
     private final Date mKeyValidityForConsumptionEnd;
     private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
-    private final String[] mEncryptionPaddings;
-    private final String[] mSignaturePaddings;
-    private final String[] mDigests;
-    private final String[] mBlockModes;
+    private final @KeyStoreKeyProperties.EncryptionPaddingEnum String[] mEncryptionPaddings;
+    private final @KeyStoreKeyProperties.SignaturePaddingEnum String[] mSignaturePaddings;
+    private final @KeyStoreKeyProperties.DigestEnum String[] mDigests;
+    private final @KeyStoreKeyProperties.BlockModeEnum String[] mBlockModes;
     private final boolean mRandomizedEncryptionRequired;
     private final boolean mUserAuthenticationRequired;
     private final int mUserAuthenticationValidityDurationSeconds;
@@ -60,10 +125,10 @@
             Date keyValidityForOriginationEnd,
             Date keyValidityForConsumptionEnd,
             @KeyStoreKeyProperties.PurposeEnum int purposes,
-            String[] encryptionPaddings,
-            String[] signaturePaddings,
-            String[] digests,
-            String[] blockModes,
+            @KeyStoreKeyProperties.EncryptionPaddingEnum String[] encryptionPaddings,
+            @KeyStoreKeyProperties.SignaturePaddingEnum String[] signaturePaddings,
+            @KeyStoreKeyProperties.DigestEnum String[] digests,
+            @KeyStoreKeyProperties.BlockModeEnum String[] blockModes,
             boolean randomizedEncryptionRequired,
             boolean userAuthenticationRequired,
             int userAuthenticationValidityDurationSeconds) {
@@ -107,8 +172,9 @@
     }
 
     /**
-     * Returns {@code true} if this parameter requires entries to be encrypted
-     * on the disk.
+     * Returns {@code true} if the {@link java.security.KeyStore} entry must be encrypted at rest.
+     * This will protect the entry with the secure lock screen credential (e.g., password, PIN, or
+     * pattern).
      */
     public boolean isEncryptionRequired() {
         return (mFlags & KeyStore.FLAG_ENCRYPTED) != 0;
@@ -119,6 +185,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityStart() {
         return mKeyValidityStart;
     }
@@ -128,6 +195,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForConsumptionEnd() {
         return mKeyValidityForConsumptionEnd;
     }
@@ -137,6 +205,7 @@
      *
      * @return instant or {@code null} if not restricted.
      */
+    @Nullable
     public Date getKeyValidityForOriginationEnd() {
         return mKeyValidityForOriginationEnd;
     }
@@ -151,7 +220,8 @@
     /**
      * Gets the set of padding schemes with which the key can be used when encrypting/decrypting.
      */
-    public String[] getEncryptionPaddings() {
+    @NonNull
+    public @KeyStoreKeyProperties.EncryptionPaddingEnum String[] getEncryptionPaddings() {
         return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
     }
 
@@ -159,7 +229,8 @@
      * Gets the set of padding schemes with which the key can be used when signing or verifying
      * signatures.
      */
-    public String[] getSignaturePaddings() {
+    @NonNull
+    public @KeyStoreKeyProperties.SignaturePaddingEnum String[] getSignaturePaddings() {
         return ArrayUtils.cloneIfNotEmpty(mSignaturePaddings);
     }
 
@@ -170,7 +241,8 @@
      *
      * @see #isDigestsSpecified()
      */
-    public String[] getDigests() {
+    @NonNull
+    public @KeyStoreKeyProperties.DigestEnum String[] getDigests() {
         if (mDigests == null) {
             throw new IllegalStateException("Digests not specified");
         }
@@ -183,6 +255,7 @@
      *
      * @see #getDigests()
      */
+    @NonNull
     public boolean isDigestsSpecified() {
         return mDigests != null;
     }
@@ -190,7 +263,8 @@
     /**
      * Gets the set of block modes with which the key can be used.
      */
-    public String[] getBlockModes() {
+    @NonNull
+    public @KeyStoreKeyProperties.BlockModeEnum String[] getBlockModes() {
         return ArrayUtils.cloneIfNotEmpty(mBlockModes);
     }
 
@@ -218,10 +292,12 @@
 
     /**
      * Gets the duration of time (seconds) for which this key can be used after the user is
-     * successfully authenticated.
+     * successfully authenticated. This has effect only if user authentication is required.
      *
-     * @return duration in seconds or {@code -1} if not restricted. {@code 0} means authentication
-     *         is required for every use of the key.
+     * @return duration in seconds or {@code -1} if authentication is required for every use of the
+     *         key.
+     *
+     * @see #isUserAuthenticationRequired()
      */
     public int getUserAuthenticationValidityDurationSeconds() {
         return mUserAuthenticationValidityDurationSeconds;
@@ -240,7 +316,7 @@
      *
      * <pre class="prettyprint">
      * KeyStoreParameter params = new KeyStoreParameter.Builder(mContext)
-     *         .setEncryptionRequired()
+     *         .setEncryptionRequired(true)
      *         .build();
      * </pre>
      */
@@ -251,10 +327,10 @@
         private Date mKeyValidityForOriginationEnd;
         private Date mKeyValidityForConsumptionEnd;
         private @KeyStoreKeyProperties.PurposeEnum int mPurposes;
-        private String[] mEncryptionPaddings;
-        private String[] mSignaturePaddings;
-        private String[] mDigests;
-        private String[] mBlockModes;
+        private @KeyStoreKeyProperties.EncryptionPaddingEnum String[] mEncryptionPaddings;
+        private @KeyStoreKeyProperties.SignaturePaddingEnum String[] mSignaturePaddings;
+        private @KeyStoreKeyProperties.DigestEnum String[] mDigests;
+        private @KeyStoreKeyProperties.BlockModeEnum String[] mBlockModes;
         private boolean mRandomizedEncryptionRequired = true;
         private boolean mUserAuthenticationRequired;
         private int mUserAuthenticationValidityDurationSeconds = -1;
@@ -265,7 +341,7 @@
          * some UI to ask the user to unlock or initialize the Android KeyStore
          * facility.
          */
-        public Builder(Context context) {
+        public Builder(@NonNull Context context) {
             if (context == null) {
                 throw new NullPointerException("context == null");
             }
@@ -273,11 +349,19 @@
         }
 
         /**
-         * Indicates that this key must be encrypted at rest on storage. Note
-         * that enabling this will require that the user enable a strong lock
-         * screen (e.g., PIN, password) before creating or using the generated
-         * key is successful.
+         * Sets whether this {@link java.security.KeyStore} entry must be encrypted at rest.
+         * Encryption at rest will protect the entry with the secure lock screen credential (e.g.,
+         * password, PIN, or pattern).
+         *
+         * <p>Note that enabling this feature requires that the secure lock screen (e.g., password,
+         * PIN, pattern) is set up, otherwise setting the {@code KeyStore} entry will fail.
+         * Moreover, this entry will be deleted when the secure lock screen is disabled or reset
+         * (e.g., by the user or a Device Administrator). Finally, this entry cannot be used until
+         * the user unlocks the secure lock screen after boot.
+         *
+         * @see KeyguardManager#isDeviceSecure()
          */
+        @NonNull
         public Builder setEncryptionRequired(boolean required) {
             if (required) {
                 mFlags |= KeyStore.FLAG_ENCRYPTED;
@@ -292,8 +376,11 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
+         *
          * @see #setKeyValidityEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityStart(Date startDate) {
             mKeyValidityStart = startDate;
             return this;
@@ -304,10 +391,13 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
+         *
          * @see #setKeyValidityStart(Date)
          * @see #setKeyValidityForConsumptionEnd(Date)
          * @see #setKeyValidityForOriginationEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityEnd(Date endDate) {
             setKeyValidityForOriginationEnd(endDate);
             setKeyValidityForConsumptionEnd(endDate);
@@ -319,8 +409,11 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
+         *
          * @see #setKeyValidityForConsumptionEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityForOriginationEnd(Date endDate) {
             mKeyValidityForOriginationEnd = endDate;
             return this;
@@ -332,8 +425,11 @@
          *
          * <p>By default, the key is valid at any instant.
          *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
+         *
          * @see #setKeyValidityForOriginationEnd(Date)
          */
+        @NonNull
         public Builder setKeyValidityForConsumptionEnd(Date endDate) {
             mKeyValidityForConsumptionEnd = endDate;
             return this;
@@ -343,7 +439,10 @@
          * Sets the set of purposes for which the key can be used.
          *
          * <p>This must be specified for all keys. There is no default.
+         *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
          */
+        @NonNull
         public Builder setPurposes(@KeyStoreKeyProperties.PurposeEnum int purposes) {
             mPurposes = purposes;
             return this;
@@ -355,8 +454,12 @@
          * rejected.
          *
          * <p>This must be specified for keys which are used for encryption/decryption.
+         *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
          */
-        public Builder setEncryptionPaddings(String... paddings) {
+        @NonNull
+        public Builder setEncryptionPaddings(
+                @KeyStoreKeyProperties.EncryptionPaddingEnum String... paddings) {
             mEncryptionPaddings = ArrayUtils.cloneIfNotEmpty(paddings);
             return this;
         }
@@ -367,8 +470,12 @@
          * rejected.
          *
          * <p>This must be specified for RSA keys which are used for signing/verification.
+         *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
          */
-        public Builder setSignaturePaddings(String... paddings) {
+        @NonNull
+        public Builder setSignaturePaddings(
+                @KeyStoreKeyProperties.SignaturePaddingEnum String... paddings) {
             mSignaturePaddings = ArrayUtils.cloneIfNotEmpty(paddings);
             return this;
         }
@@ -380,8 +487,11 @@
          *
          * <p>For HMAC keys, the default is the digest specified in {@link Key#getAlgorithm()}. For
          * asymmetric signing keys this constraint must be specified.
+         *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
          */
-        public Builder setDigests(String... digests) {
+        @NonNull
+        public Builder setDigests(@KeyStoreKeyProperties.DigestEnum String... digests) {
             mDigests = ArrayUtils.cloneIfNotEmpty(digests);
             return this;
         }
@@ -391,8 +501,11 @@
          * Attempts to use the key with any other block modes will be rejected.
          *
          * <p>This must be specified for encryption/decryption keys.
+         *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
          */
-        public Builder setBlockModes(String... blockModes) {
+        @NonNull
+        public Builder setBlockModes(@KeyStoreKeyProperties.BlockModeEnum String... blockModes) {
             mBlockModes = ArrayUtils.cloneIfNotEmpty(blockModes);
             return this;
         }
@@ -430,7 +543,10 @@
          * <li>If you are using RSA encryption without padding, consider switching to padding
          * schemes which offer {@code IND-CPA}, such as PKCS#1 or OAEP.</li>
          * </ul>
+         *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
          */
+        @NonNull
         public Builder setRandomizedEncryptionRequired(boolean required) {
             mRandomizedEncryptionRequired = required;
             return this;
@@ -449,8 +565,11 @@
          * <a href="{@docRoot}training/articles/keystore.html#UserAuthentication">More
          * information</a>.
          *
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
+         *
          * @see #setUserAuthenticationValidityDurationSeconds(int)
          */
+        @NonNull
         public Builder setUserAuthenticationRequired(boolean required) {
             mUserAuthenticationRequired = required;
             return this;
@@ -462,12 +581,16 @@
          *
          * <p>By default, the user needs to authenticate for every use of the key.
          *
-         * @param seconds duration in seconds or {@code 0} if the user needs to authenticate for
+         * <p><b>NOTE: This has currently no effect on asymmetric key pairs.
+         *
+         * @param seconds duration in seconds or {@code -1} if the user needs to authenticate for
          *        every use of the key.
          *
          * @see #setUserAuthenticationRequired(boolean)
          */
-        public Builder setUserAuthenticationValidityDurationSeconds(int seconds) {
+        @NonNull
+        public Builder setUserAuthenticationValidityDurationSeconds(
+                @IntRange(from = -1) int seconds) {
             mUserAuthenticationValidityDurationSeconds = seconds;
             return this;
         }
@@ -478,6 +601,7 @@
          * @throws IllegalArgumentException if a required field is missing
          * @return built instance of {@code KeyStoreParameter}
          */
+        @NonNull
         public KeyStoreParameter build() {
             return new KeyStoreParameter(
                     mContext,
diff --git a/keystore/java/android/security/KeyStoreSecretKey.java b/keystore/java/android/security/KeyStoreSecretKey.java
index 7f0e3d3..ee25465 100644
--- a/keystore/java/android/security/KeyStoreSecretKey.java
+++ b/keystore/java/android/security/KeyStoreSecretKey.java
@@ -23,33 +23,9 @@
  *
  * @hide
  */
-public class KeyStoreSecretKey implements SecretKey {
-    private final String mAlias;
-    private final String mAlgorithm;
+public class KeyStoreSecretKey extends KeyStoreKey implements SecretKey {
 
     public KeyStoreSecretKey(String alias, String algorithm) {
-        mAlias = alias;
-        mAlgorithm = algorithm;
-    }
-
-    String getAlias() {
-        return mAlias;
-    }
-
-    @Override
-    public String getAlgorithm() {
-        return mAlgorithm;
-    }
-
-    @Override
-    public String getFormat() {
-        // This key does not export its key material
-        return null;
-    }
-
-    @Override
-    public byte[] getEncoded() {
-        // This key does not export its key material
-        return null;
+        super(alias, algorithm);
     }
 }
diff --git a/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java b/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java
index bfe09e3..548296b 100644
--- a/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java
+++ b/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java
@@ -74,22 +74,22 @@
                     + " Keystore error: " + errorCode);
         }
 
-        boolean teeBacked;
+        boolean insideSecureHardware;
         @KeyStoreKeyProperties.OriginEnum int origin;
         int keySize;
         @KeyStoreKeyProperties.PurposeEnum int purposes;
         String[] encryptionPaddings;
-        String[] digests;
-        String[] blockModes;
+        @KeyStoreKeyProperties.DigestEnum String[] digests;
+        @KeyStoreKeyProperties.BlockModeEnum String[] blockModes;
         int keymasterSwEnforcedUserAuthenticators;
         int keymasterHwEnforcedUserAuthenticators;
         try {
             if (keyCharacteristics.hwEnforced.containsTag(KeymasterDefs.KM_TAG_ORIGIN)) {
-                teeBacked = true;
+                insideSecureHardware = true;
                 origin = KeyStoreKeyProperties.Origin.fromKeymaster(
                         keyCharacteristics.hwEnforced.getInt(KeymasterDefs.KM_TAG_ORIGIN, -1));
             } else if (keyCharacteristics.swEnforced.containsTag(KeymasterDefs.KM_TAG_ORIGIN)) {
-                teeBacked = false;
+                insideSecureHardware = false;
                 origin = KeyStoreKeyProperties.Origin.fromKeymaster(
                         keyCharacteristics.swEnforced.getInt(KeymasterDefs.KM_TAG_ORIGIN, -1));
             } else {
@@ -105,10 +105,10 @@
 
             List<String> encryptionPaddingsList = new ArrayList<String>();
             for (int keymasterPadding : keyCharacteristics.getInts(KeymasterDefs.KM_TAG_PADDING)) {
-                String jcaPadding;
+                @KeyStoreKeyProperties.EncryptionPaddingEnum String jcaPadding;
                 try {
-                    jcaPadding = KeymasterUtils.getJcaEncryptionPaddingFromKeymasterPadding(
-                            keymasterPadding);
+                    jcaPadding =
+                            KeyStoreKeyProperties.EncryptionPadding.fromKeymaster(keymasterPadding);
                 } catch (IllegalArgumentException e) {
                     throw new InvalidKeySpecException(
                             "Unsupported encryption padding: " + keymasterPadding);
@@ -118,9 +118,9 @@
             encryptionPaddings =
                     encryptionPaddingsList.toArray(new String[encryptionPaddingsList.size()]);
 
-            digests = KeymasterUtils.getJcaDigestAlgorithmsFromKeymasterDigests(
+            digests = KeyStoreKeyProperties.Digest.allFromKeymaster(
                     keyCharacteristics.getInts(KeymasterDefs.KM_TAG_DIGEST));
-            blockModes = KeymasterUtils.getJcaBlockModesFromKeymasterBlockModes(
+            blockModes = KeyStoreKeyProperties.BlockMode.allFromKeymaster(
                     keyCharacteristics.getInts(KeymasterDefs.KM_TAG_BLOCK_MODE));
             keymasterSwEnforcedUserAuthenticators =
                     keyCharacteristics.swEnforced.getInt(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, 0);
@@ -150,12 +150,12 @@
                 !keyCharacteristics.getBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
         int userAuthenticationValidityDurationSeconds =
                 keyCharacteristics.getInt(KeymasterDefs.KM_TAG_AUTH_TIMEOUT, -1);
-        boolean userAuthenticationRequirementEnforcedInTee = (userAuthenticationRequired)
+        boolean userAuthenticationRequirementEnforcedBySecureHardware = (userAuthenticationRequired)
                 && (keymasterHwEnforcedUserAuthenticators != 0)
                 && (keymasterSwEnforcedUserAuthenticators == 0);
 
         return new KeyStoreKeySpec(entryAlias,
-                teeBacked,
+                insideSecureHardware,
                 origin,
                 keySize,
                 keyValidityStart,
@@ -168,7 +168,7 @@
                 blockModes,
                 userAuthenticationRequired,
                 userAuthenticationValidityDurationSeconds,
-                userAuthenticationRequirementEnforcedInTee);
+                userAuthenticationRequirementEnforcedBySecureHardware);
     }
 
     @Override
diff --git a/keystore/java/android/security/KeymasterUtils.java b/keystore/java/android/security/KeymasterUtils.java
index 3ccb588..df67ae7 100644
--- a/keystore/java/android/security/KeymasterUtils.java
+++ b/keystore/java/android/security/KeymasterUtils.java
@@ -21,11 +21,6 @@
 import android.security.keymaster.KeymasterArguments;
 import android.security.keymaster.KeymasterDefs;
 
-import libcore.util.EmptyArray;
-
-import java.util.Collection;
-import java.util.Locale;
-
 /**
  * @hide
  */
@@ -33,227 +28,27 @@
 
     private KeymasterUtils() {}
 
-    public static int getKeymasterAlgorithmFromJcaSecretKeyAlgorithm(String jcaKeyAlgorithm) {
-        if ("AES".equalsIgnoreCase(jcaKeyAlgorithm)) {
-            return KeymasterDefs.KM_ALGORITHM_AES;
-        } else if (jcaKeyAlgorithm.toUpperCase(Locale.US).startsWith("HMAC")) {
-            return KeymasterDefs.KM_ALGORITHM_HMAC;
-        } else {
-            throw new IllegalArgumentException(
-                    "Unsupported secret key algorithm: " + jcaKeyAlgorithm);
-        }
-    }
-
-    public static String getJcaSecretKeyAlgorithm(int keymasterAlgorithm, int keymasterDigest) {
-        switch (keymasterAlgorithm) {
-            case KeymasterDefs.KM_ALGORITHM_AES:
-                if (keymasterDigest != -1) {
-                    throw new IllegalArgumentException(
-                            "Digest not supported for AES key: " + keymasterDigest);
-                }
-                return "AES";
-            case KeymasterDefs.KM_ALGORITHM_HMAC:
-                switch (keymasterDigest) {
-                    case KeymasterDefs.KM_DIGEST_SHA1:
-                        return "HmacSHA1";
-                    case KeymasterDefs.KM_DIGEST_SHA_2_224:
-                        return "HmacSHA224";
-                    case KeymasterDefs.KM_DIGEST_SHA_2_256:
-                        return "HmacSHA256";
-                    case KeymasterDefs.KM_DIGEST_SHA_2_384:
-                        return "HmacSHA384";
-                    case KeymasterDefs.KM_DIGEST_SHA_2_512:
-                        return "HmacSHA512";
-                    default:
-                        throw new IllegalArgumentException(
-                                "Unsupported HMAC digest: " + keymasterDigest);
-                }
-            default:
-                throw new IllegalArgumentException("Unsupported algorithm: " + keymasterAlgorithm);
-        }
-    }
-
-    public static String getJcaKeyPairAlgorithmFromKeymasterAlgorithm(int keymasterAlgorithm) {
-        switch (keymasterAlgorithm) {
-            case KeymasterDefs.KM_ALGORITHM_RSA:
-                return "RSA";
-            case KeymasterDefs.KM_ALGORITHM_EC:
-                return "EC";
-            default:
-                throw new IllegalArgumentException("Unsupported algorithm: " + keymasterAlgorithm);
-        }
-    }
-
-    public static int getKeymasterDigestfromJcaSecretKeyAlgorithm(String jcaKeyAlgorithm) {
-        String algorithmUpper = jcaKeyAlgorithm.toUpperCase(Locale.US);
-        if (algorithmUpper.startsWith("HMAC")) {
-            String digestUpper = algorithmUpper.substring("HMAC".length());
-            switch (digestUpper) {
-                case "MD5":
-                    return KeymasterDefs.KM_DIGEST_MD5;
-                case "SHA1":
-                    return KeymasterDefs.KM_DIGEST_SHA1;
-                case "SHA224":
-                    return KeymasterDefs.KM_DIGEST_SHA_2_224;
-                case "SHA256":
-                    return KeymasterDefs.KM_DIGEST_SHA_2_256;
-                case "SHA384":
-                    return KeymasterDefs.KM_DIGEST_SHA_2_384;
-                case "SHA512":
-                    return KeymasterDefs.KM_DIGEST_SHA_2_512;
-                default:
-                    throw new IllegalArgumentException("Unsupported HMAC digest: " + digestUpper);
-            }
-        } else {
-            return -1;
-        }
-    }
-
-    public static int getKeymasterDigestFromJcaDigestAlgorithm(String jcaDigestAlgorithm) {
-        if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-1")) {
-            return KeymasterDefs.KM_DIGEST_SHA1;
-        } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-224")) {
-            return KeymasterDefs.KM_DIGEST_SHA_2_224;
-        } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-256")) {
-            return KeymasterDefs.KM_DIGEST_SHA_2_256;
-        } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-384")) {
-            return KeymasterDefs.KM_DIGEST_SHA_2_384;
-        } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-512")) {
-            return KeymasterDefs.KM_DIGEST_SHA_2_512;
-        } else if (jcaDigestAlgorithm.equalsIgnoreCase("NONE")) {
-            return KeymasterDefs.KM_DIGEST_NONE;
-        } else if (jcaDigestAlgorithm.equalsIgnoreCase("MD5")) {
-            return KeymasterDefs.KM_DIGEST_MD5;
-        } else {
-            throw new IllegalArgumentException(
-                    "Unsupported digest algorithm: " + jcaDigestAlgorithm);
-        }
-    }
-
-    public static String getJcaDigestAlgorithmFromKeymasterDigest(int keymasterDigest) {
-        switch (keymasterDigest) {
-            case KeymasterDefs.KM_DIGEST_NONE:
-                return "NONE";
-            case KeymasterDefs.KM_DIGEST_MD5:
-                return "MD5";
-            case KeymasterDefs.KM_DIGEST_SHA1:
-                return "SHA-1";
-            case KeymasterDefs.KM_DIGEST_SHA_2_224:
-                return "SHA-224";
-            case KeymasterDefs.KM_DIGEST_SHA_2_256:
-                return "SHA-256";
-            case KeymasterDefs.KM_DIGEST_SHA_2_384:
-                return "SHA-384";
-            case KeymasterDefs.KM_DIGEST_SHA_2_512:
-                return "SHA-512";
-            default:
-                throw new IllegalArgumentException(
-                        "Unsupported digest algorithm: " + keymasterDigest);
-        }
-    }
-
-    public static String[] getJcaDigestAlgorithmsFromKeymasterDigests(
-            Collection<Integer> keymasterDigests) {
-        if (keymasterDigests.isEmpty()) {
-            return EmptyArray.STRING;
-        }
-        String[] result = new String[keymasterDigests.size()];
-        int offset = 0;
-        for (int keymasterDigest : keymasterDigests) {
-            result[offset] = getJcaDigestAlgorithmFromKeymasterDigest(keymasterDigest);
-            offset++;
-        }
-        return result;
-    }
-
-    public static int[] getKeymasterDigestsFromJcaDigestAlgorithms(String[] jcaDigestAlgorithms) {
-        if ((jcaDigestAlgorithms == null) || (jcaDigestAlgorithms.length == 0)) {
-            return EmptyArray.INT;
-        }
-        int[] result = new int[jcaDigestAlgorithms.length];
-        int offset = 0;
-        for (String jcaDigestAlgorithm : jcaDigestAlgorithms) {
-            result[offset] = getKeymasterDigestFromJcaDigestAlgorithm(jcaDigestAlgorithm);
-            offset++;
-        }
-        return result;
-    }
-
-    public static int getDigestOutputSizeBytes(int keymasterDigest) {
+    public static int getDigestOutputSizeBits(int keymasterDigest) {
         switch (keymasterDigest) {
             case KeymasterDefs.KM_DIGEST_NONE:
                 return -1;
             case KeymasterDefs.KM_DIGEST_MD5:
-                return 128 / 8;
+                return 128;
             case KeymasterDefs.KM_DIGEST_SHA1:
-                return 160 / 8;
+                return 160;
             case KeymasterDefs.KM_DIGEST_SHA_2_224:
-                return 224 / 8;
+                return 224;
             case KeymasterDefs.KM_DIGEST_SHA_2_256:
-                return 256 / 8;
+                return 256;
             case KeymasterDefs.KM_DIGEST_SHA_2_384:
-                return 384 / 8;
+                return 384;
             case KeymasterDefs.KM_DIGEST_SHA_2_512:
-                return 512 / 8;
+                return 512;
             default:
                 throw new IllegalArgumentException("Unknown digest: " + keymasterDigest);
         }
     }
 
-    public static int getKeymasterBlockModeFromJcaBlockMode(String jcaBlockMode) {
-        if ("ECB".equalsIgnoreCase(jcaBlockMode)) {
-            return KeymasterDefs.KM_MODE_ECB;
-        } else if ("CBC".equalsIgnoreCase(jcaBlockMode)) {
-            return KeymasterDefs.KM_MODE_CBC;
-        } else if ("CTR".equalsIgnoreCase(jcaBlockMode)) {
-            return KeymasterDefs.KM_MODE_CTR;
-        } else if ("GCM".equalsIgnoreCase(jcaBlockMode)) {
-            return KeymasterDefs.KM_MODE_GCM;
-        } else {
-            throw new IllegalArgumentException("Unsupported block mode: " + jcaBlockMode);
-        }
-    }
-
-    public static String getJcaBlockModeFromKeymasterBlockMode(int keymasterBlockMode) {
-        switch (keymasterBlockMode) {
-            case KeymasterDefs.KM_MODE_ECB:
-                return "ECB";
-            case KeymasterDefs.KM_MODE_CBC:
-                return "CBC";
-            case KeymasterDefs.KM_MODE_CTR:
-                return "CTR";
-            case KeymasterDefs.KM_MODE_GCM:
-                return "GCM";
-            default:
-                throw new IllegalArgumentException("Unsupported block mode: " + keymasterBlockMode);
-        }
-    }
-
-    public static String[] getJcaBlockModesFromKeymasterBlockModes(
-            Collection<Integer> keymasterBlockModes) {
-        if ((keymasterBlockModes == null) || (keymasterBlockModes.isEmpty())) {
-            return EmptyArray.STRING;
-        }
-        String[] result = new String[keymasterBlockModes.size()];
-        int offset = 0;
-        for (int keymasterBlockMode : keymasterBlockModes) {
-            result[offset] = getJcaBlockModeFromKeymasterBlockMode(keymasterBlockMode);
-            offset++;
-        }
-        return result;
-    }
-
-    public static int[] getKeymasterBlockModesFromJcaBlockModes(String[] jcaBlockModes) {
-        if ((jcaBlockModes == null) || (jcaBlockModes.length == 0)) {
-            return EmptyArray.INT;
-        }
-        int[] result = new int[jcaBlockModes.length];
-        for (int i = 0; i < jcaBlockModes.length; i++) {
-            result[i] = getKeymasterBlockModeFromJcaBlockMode(jcaBlockModes[i]);
-        }
-        return result;
-    }
-
     public static boolean isKeymasterBlockModeIndCpaCompatible(int keymasterBlockMode) {
         switch (keymasterBlockMode) {
             case KeymasterDefs.KM_MODE_ECB:
@@ -267,82 +62,6 @@
         }
     }
 
-    public static int getKeymasterPaddingFromJcaEncryptionPadding(String jcaPadding) {
-        if ("NoPadding".equalsIgnoreCase(jcaPadding)) {
-            return KeymasterDefs.KM_PAD_NONE;
-        } else if ("PKCS7Padding".equalsIgnoreCase(jcaPadding)) {
-            return KeymasterDefs.KM_PAD_PKCS7;
-        } else if ("PKCS1Padding".equalsIgnoreCase(jcaPadding)) {
-            return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT;
-        } else if ("OEAPPadding".equalsIgnoreCase(jcaPadding)) {
-            return KeymasterDefs.KM_PAD_RSA_OAEP;
-        } else {
-            throw new IllegalArgumentException(
-                    "Unsupported encryption padding scheme: " + jcaPadding);
-        }
-    }
-
-    public static String getJcaEncryptionPaddingFromKeymasterPadding(int keymasterPadding) {
-        switch (keymasterPadding) {
-            case KeymasterDefs.KM_PAD_NONE:
-                return "NoPadding";
-            case KeymasterDefs.KM_PAD_PKCS7:
-                return "PKCS7Padding";
-            case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT:
-                return "PKCS1Padding";
-            case KeymasterDefs.KM_PAD_RSA_OAEP:
-                return "OEAPPadding";
-            default:
-                throw new IllegalArgumentException(
-                        "Unsupported encryption padding: " + keymasterPadding);
-        }
-    }
-
-    public static int getKeymasterPaddingFromJcaSignaturePadding(String jcaPadding) {
-        if ("PKCS#1".equalsIgnoreCase(jcaPadding)) {
-            return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN;
-        } if ("PSS".equalsIgnoreCase(jcaPadding)) {
-            return KeymasterDefs.KM_PAD_RSA_PSS;
-        } else {
-            throw new IllegalArgumentException(
-                    "Unsupported signature padding scheme: " + jcaPadding);
-        }
-    }
-
-    public static String getJcaSignaturePaddingFromKeymasterPadding(int keymasterPadding) {
-        switch (keymasterPadding) {
-            case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN:
-                return "PKCS#1";
-            case KeymasterDefs.KM_PAD_RSA_PSS:
-                return "PSS";
-            default:
-                throw new IllegalArgumentException(
-                        "Unsupported signature padding: " + keymasterPadding);
-        }
-    }
-
-    public static int[] getKeymasterPaddingsFromJcaEncryptionPaddings(String[] jcaPaddings) {
-        if ((jcaPaddings == null) || (jcaPaddings.length == 0)) {
-            return EmptyArray.INT;
-        }
-        int[] result = new int[jcaPaddings.length];
-        for (int i = 0; i < jcaPaddings.length; i++) {
-            result[i] = getKeymasterPaddingFromJcaEncryptionPadding(jcaPaddings[i]);
-        }
-        return result;
-    }
-
-    public static int[] getKeymasterPaddingsFromJcaSignaturePaddings(String[] jcaPaddings) {
-        if ((jcaPaddings == null) || (jcaPaddings.length == 0)) {
-            return EmptyArray.INT;
-        }
-        int[] result = new int[jcaPaddings.length];
-        for (int i = 0; i < jcaPaddings.length; i++) {
-            result[i] = getKeymasterPaddingFromJcaSignaturePadding(jcaPaddings[i]);
-        }
-        return result;
-    }
-
     /**
      * Adds keymaster arguments to express the key's authorization policy supported by user
      * authentication.
diff --git a/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java b/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java
index 95d14b7..9c2f358 100644
--- a/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java
+++ b/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java
@@ -73,7 +73,7 @@
     }
 
     private void setupPassword() {
-        assertTrue(mAndroidKeyStore.password("1111"));
+        assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
         assertTrue(mAndroidKeyStore.isUnlocked());
 
         String[] aliases = mAndroidKeyStore.saw("");
@@ -288,7 +288,7 @@
             } catch (IllegalStateException expected) {
             }
 
-            assertTrue(mAndroidKeyStore.password("1111"));
+            assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
             assertTrue(mAndroidKeyStore.isUnlocked());
 
             final KeyPair pair2 = mGenerator.generateKeyPair();
diff --git a/keystore/tests/src/android/security/AndroidKeyStoreTest.java b/keystore/tests/src/android/security/AndroidKeyStoreTest.java
index a7046dd2..4b2b9b5 100644
--- a/keystore/tests/src/android/security/AndroidKeyStoreTest.java
+++ b/keystore/tests/src/android/security/AndroidKeyStoreTest.java
@@ -736,7 +736,7 @@
     }
 
     private void setupPassword() {
-        assertTrue(mAndroidKeyStore.password("1111"));
+        assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
         assertTrue(mAndroidKeyStore.isUnlocked());
 
         assertEquals(0, mAndroidKeyStore.saw("").length);
@@ -2089,7 +2089,7 @@
             } catch (KeyStoreException success) {
             }
 
-            assertTrue(mAndroidKeyStore.password("1111"));
+            assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
             assertTrue(mAndroidKeyStore.isUnlocked());
 
             mKeyStore.setEntry(TEST_ALIAS_1, entry,
diff --git a/keystore/tests/src/android/security/KeyStoreTest.java b/keystore/tests/src/android/security/KeyStoreTest.java
index 916b1ba..d138c24 100644
--- a/keystore/tests/src/android/security/KeyStoreTest.java
+++ b/keystore/tests/src/android/security/KeyStoreTest.java
@@ -152,13 +152,13 @@
     }
 
     public void testPassword() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
         assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
     }
 
     public void testGet() throws Exception {
         assertNull(mKeyStore.get(TEST_KEYNAME));
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertNull(mKeyStore.get(TEST_KEYNAME));
         assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
                 KeyStore.FLAG_ENCRYPTED));
@@ -170,7 +170,7 @@
         assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
                 KeyStore.FLAG_ENCRYPTED));
         assertFalse(mKeyStore.contains(TEST_KEYNAME));
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
                 KeyStore.FLAG_ENCRYPTED));
         assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
@@ -181,7 +181,7 @@
         assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
                 KeyStore.FLAG_ENCRYPTED));
         assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
                 KeyStore.FLAG_ENCRYPTED));
         assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
@@ -192,7 +192,7 @@
         assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
                 KeyStore.FLAG_ENCRYPTED));
         assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
                 KeyStore.FLAG_ENCRYPTED));
         assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
@@ -202,7 +202,7 @@
         assertFalse(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE, KeyStore.UID_SELF,
                 KeyStore.FLAG_ENCRYPTED));
         assertFalse(mKeyStore.contains(TEST_I18N_KEY));
-        mKeyStore.password(TEST_I18N_KEY);
+        mKeyStore.onUserPasswordChanged(TEST_I18N_KEY);
         assertTrue(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE, KeyStore.UID_SELF,
                 KeyStore.FLAG_ENCRYPTED));
         assertTrue(mKeyStore.contains(TEST_I18N_KEY));
@@ -210,7 +210,7 @@
 
     public void testDelete() throws Exception {
         assertFalse(mKeyStore.delete(TEST_KEYNAME));
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertFalse(mKeyStore.delete(TEST_KEYNAME));
 
         assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
@@ -222,7 +222,7 @@
 
     public void testDelete_grantedUid_Wifi() throws Exception {
         assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.WIFI_UID));
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.WIFI_UID));
 
         assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
@@ -234,7 +234,7 @@
 
     public void testDelete_ungrantedUid_Bluetooth() throws Exception {
         assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.BLUETOOTH_UID));
 
         assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
@@ -247,7 +247,7 @@
     public void testContains() throws Exception {
         assertFalse(mKeyStore.contains(TEST_KEYNAME));
 
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
         assertFalse(mKeyStore.contains(TEST_KEYNAME));
 
         assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
@@ -258,7 +258,7 @@
     public void testContains_grantedUid_Wifi() throws Exception {
         assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
 
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
         assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
 
         assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
@@ -269,7 +269,7 @@
     public void testContains_grantedUid_Bluetooth() throws Exception {
         assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
 
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
         assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
 
         assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
@@ -282,7 +282,7 @@
         assertNotNull(emptyResult);
         assertEquals(0, emptyResult.length);
 
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
         mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
 
@@ -296,7 +296,7 @@
         String[] results1 = mKeyStore.saw(TEST_KEYNAME, Process.BLUETOOTH_UID);
         assertEquals(0, results1.length);
 
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
         mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
 
@@ -309,7 +309,7 @@
         assertNotNull(results1);
         assertEquals(0, results1.length);
 
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
         mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
 
@@ -324,7 +324,7 @@
         assertNotNull(results1);
         assertEquals(0, results1.length);
 
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
         mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
 
@@ -337,7 +337,7 @@
     public void testLock() throws Exception {
         assertFalse(mKeyStore.lock());
 
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
 
         assertTrue(mKeyStore.lock());
@@ -345,7 +345,7 @@
     }
 
     public void testUnlock() throws Exception {
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
         mKeyStore.lock();
 
@@ -355,7 +355,7 @@
 
     public void testIsEmpty() throws Exception {
         assertTrue(mKeyStore.isEmpty());
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         assertTrue(mKeyStore.isEmpty());
         mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
         assertFalse(mKeyStore.isEmpty());
@@ -370,7 +370,7 @@
     }
 
     public void testGenerate_Locked_Fail() throws Exception {
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         mKeyStore.lock();
         assertFalse("Should fail when keystore is locked",
                 mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
@@ -378,7 +378,7 @@
     }
 
     public void testGenerate_Success() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to generate key when unlocked",
                 mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
@@ -388,7 +388,7 @@
     }
 
     public void testGenerate_grantedUid_Wifi_Success() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to generate key when unlocked",
                 mKeyStore.generate(TEST_KEYNAME, Process.WIFI_UID, NativeConstants.EVP_PKEY_RSA,
@@ -398,7 +398,7 @@
     }
 
     public void testGenerate_ungrantedUid_Bluetooth_Failure() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertFalse(mKeyStore.generate(TEST_KEYNAME, Process.BLUETOOTH_UID,
                     NativeConstants.EVP_PKEY_RSA, RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
@@ -408,7 +408,7 @@
     }
 
     public void testImport_Success() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
                 PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -417,7 +417,7 @@
     }
 
     public void testImport_grantedUid_Wifi_Success() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
                 PRIVKEY_BYTES, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED));
@@ -426,7 +426,7 @@
     }
 
     public void testImport_ungrantedUid_Bluetooth_Failure() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertFalse(mKeyStore.importKey(TEST_KEYNAME, PRIVKEY_BYTES, Process.BLUETOOTH_UID,
                 KeyStore.FLAG_ENCRYPTED));
@@ -436,7 +436,7 @@
     }
 
     public void testImport_Failure_BadEncoding() throws Exception {
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
 
         assertFalse("Invalid DER-encoded key should not be imported", mKeyStore.importKey(
                 TEST_KEYNAME, TEST_DATA, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -445,7 +445,7 @@
     }
 
     public void testSign_Success() throws Exception {
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
 
         assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
                     RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
@@ -456,7 +456,7 @@
     }
 
     public void testVerify_Success() throws Exception {
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
 
         assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
                     RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
@@ -475,7 +475,7 @@
     }
 
     public void testSign_NotGenerated_Failure() throws Exception {
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
 
         assertNull("Should not be able to sign without first generating keys",
                 mKeyStore.sign(TEST_KEYNAME, TEST_DATA));
@@ -483,7 +483,7 @@
 
     public void testGrant_Generated_Success() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to generate key for testcase",
                 mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
@@ -494,7 +494,7 @@
     }
 
     public void testGrant_Imported_Success() throws Exception {
-        assertTrue("Password should work for keystore", mKeyStore.password(TEST_PASSWD));
+        assertTrue("Password should work for keystore", mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to import key for testcase", mKeyStore.importKey(TEST_KEYNAME,
                 PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -504,7 +504,7 @@
 
     public void testGrant_NoKey_Failure() throws Exception {
         assertTrue("Should be able to unlock keystore for test",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertFalse("Should not be able to grant without first initializing the keystore",
                 mKeyStore.grant(TEST_KEYNAME, 0));
@@ -517,7 +517,7 @@
 
     public void testUngrant_Generated_Success() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to generate key for testcase",
                 mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
@@ -532,7 +532,7 @@
 
     public void testUngrant_Imported_Success() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to import key for testcase", mKeyStore.importKey(TEST_KEYNAME,
                 PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -551,7 +551,7 @@
 
     public void testUngrant_NoGrant_Failure() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to generate key for testcase",
                 mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
@@ -563,7 +563,7 @@
 
     public void testUngrant_DoubleUngrant_Failure() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to generate key for testcase",
                 mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
@@ -581,7 +581,7 @@
 
     public void testUngrant_DoubleGrantUngrant_Failure() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to generate key for testcase",
                 mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
@@ -601,7 +601,7 @@
     }
 
     public void testDuplicate_grantedUid_Wifi_Success() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertFalse(mKeyStore.contains(TEST_KEYNAME));
 
@@ -640,7 +640,7 @@
     }
 
     public void testDuplicate_ungrantedUid_Bluetooth_Failure() throws Exception {
-        assertTrue(mKeyStore.password(TEST_PASSWD));
+        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertFalse(mKeyStore.contains(TEST_KEYNAME));
 
@@ -666,7 +666,7 @@
 
     public void testGetmtime_Success() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
                 PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -697,7 +697,7 @@
 
     public void testGetmtime_NonExist_Failure() throws Exception {
         assertTrue("Password should work for keystore",
-                mKeyStore.password(TEST_PASSWD));
+                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
 
         assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
                 PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -752,7 +752,7 @@
     }
 
     public void testGetKeyCharacteristicsSuccess() throws Exception {
-        mKeyStore.password(TEST_PASSWD);
+        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
         String name = "test";
         KeyCharacteristics gen = generateRsaKey(name);
         KeyCharacteristics call = new KeyCharacteristics();
@@ -817,6 +817,9 @@
 
         KeymasterArguments out = new KeymasterArguments();
         args = new KeymasterArguments();
+        args.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
+        args.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_GCM);
+        args.addInt(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
         OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
                 true, args, null, out);
         IBinder token = result.token;
@@ -881,14 +884,18 @@
             hexToBytes("591ccb10d410ed26dc5ba74a31362870"),
             hexToBytes("b6ed21b99ca6f4f9f153e7b1beafed1d"),
             hexToBytes("23304b7a39f9f3ff067d8d8f9e24ecc7")};
+        KeymasterArguments beginArgs = new KeymasterArguments();
+        beginArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
+        beginArgs.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_ECB);
+        beginArgs.addInt(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
         for (int i = 0; i < testVectors.length; i++) {
             byte[] cipherText = doOperation(name, KeymasterDefs.KM_PURPOSE_ENCRYPT, testVectors[i],
-                    new KeymasterArguments());
+                    beginArgs);
             MoreAsserts.assertEquals(cipherVectors[i], cipherText);
         }
         for (int i = 0; i < testVectors.length; i++) {
             byte[] plainText = doOperation(name, KeymasterDefs.KM_PURPOSE_DECRYPT,
-                    cipherVectors[i], new KeymasterArguments());
+                    cipherVectors[i], beginArgs);
             MoreAsserts.assertEquals(testVectors[i], plainText);
         }
     }
@@ -912,6 +919,9 @@
 
         KeymasterArguments out = new KeymasterArguments();
         args = new KeymasterArguments();
+        args.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
+        args.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_CTR);
+        args.addInt(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
         OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
                 true, args, null, out);
         assertEquals("Begin should succeed", KeyStore.NO_ERROR, result.resultCode);
@@ -950,4 +960,28 @@
         assertEquals("Update should require authorization",
                 KeymasterDefs.KM_ERROR_KEY_USER_NOT_AUTHENTICATED, result.resultCode);
     }
+
+    public void testPasswordRemovalEncryptedEntry() throws Exception {
+        mKeyStore.onUserPasswordChanged("test");
+        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
+                KeyStore.FLAG_ENCRYPTED));
+        assertTrue(mKeyStore.contains(TEST_KEYNAME));
+        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
+        mKeyStore.onUserPasswordChanged("");
+        // Removing the password should have deleted all entries using FLAG_ENCRYPTED
+        assertNull(mKeyStore.get(TEST_KEYNAME));
+        assertFalse(mKeyStore.contains(TEST_KEYNAME));
+    }
+
+    public void testPasswordRemovalUnencryptedEntry() throws Exception {
+        mKeyStore.onUserPasswordChanged("test");
+        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
+                KeyStore.FLAG_NONE));
+        assertTrue(mKeyStore.contains(TEST_KEYNAME));
+        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
+        mKeyStore.onUserPasswordChanged("");
+        // Removing the password should not delete unencrypted entries.
+        assertTrue(mKeyStore.contains(TEST_KEYNAME));
+        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
+    }
 }
diff --git a/libs/androidfw/Android.mk b/libs/androidfw/Android.mk
index 461160a..2f28700 100644
--- a/libs/androidfw/Android.mk
+++ b/libs/androidfw/Android.mk
@@ -64,7 +64,7 @@
 LOCAL_C_INCLUDES := \
     external/zlib \
     system/core/include
-LOCAL_STATIC_LIBRARIES := libziparchive
+LOCAL_STATIC_LIBRARIES := libziparchive libbase
 LOCAL_SHARED_LIBRARIES := \
     libbinder \
     liblog \
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 04ebe70..2ae7b08 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -3147,6 +3147,7 @@
 
 ResTable::Theme::Theme(const ResTable& table)
     : mTable(table)
+    , mTypeSpecFlags(0)
 {
     memset(mPackages, 0, sizeof(mPackages));
 }
@@ -3205,6 +3206,8 @@
         return N;
     }
 
+    mTypeSpecFlags |= bagTypeSpecFlags;
+
     uint32_t curPackage = 0xffffffff;
     ssize_t curPackageIndex = 0;
     package_info* curPI = NULL;
@@ -3323,6 +3326,32 @@
         }
     }
 
+    mTypeSpecFlags = other.mTypeSpecFlags;
+
+    if (kDebugTableTheme) {
+        ALOGI("Final theme:");
+        dumpToLog();
+    }
+
+    return NO_ERROR;
+}
+
+status_t ResTable::Theme::clear()
+{
+    if (kDebugTableTheme) {
+        ALOGI("Clearing theme %p...\n", this);
+        dumpToLog();
+    }
+
+    for (size_t i = 0; i < Res_MAXPACKAGE; i++) {
+        if (mPackages[i] != NULL) {
+            free_package(mPackages[i]);
+            mPackages[i] = NULL;
+        }
+    }
+
+    mTypeSpecFlags = 0;
+
     if (kDebugTableTheme) {
         ALOGI("Final theme:");
         dumpToLog();
@@ -3417,6 +3446,11 @@
             inoutTypeSpecFlags, inoutConfig);
 }
 
+uint32_t ResTable::Theme::getChangingConfigurations() const
+{
+    return mTypeSpecFlags;
+}
+
 void ResTable::Theme::dumpToLog() const
 {
     ALOGI("Theme %p:\n", this);
diff --git a/libs/hwui/Android.common.mk b/libs/hwui/Android.common.mk
index 836f868..8a4e609 100644
--- a/libs/hwui/Android.common.mk
+++ b/libs/hwui/Android.common.mk
@@ -63,6 +63,7 @@
     PixelBuffer.cpp \
     Program.cpp \
     ProgramCache.cpp \
+    Properties.cpp \
     RenderBufferCache.cpp \
     RenderNode.cpp \
     RenderProperties.cpp \
diff --git a/libs/hwui/AssetAtlas.cpp b/libs/hwui/AssetAtlas.cpp
index 4d2e3a0..2889d2f 100644
--- a/libs/hwui/AssetAtlas.cpp
+++ b/libs/hwui/AssetAtlas.cpp
@@ -82,12 +82,12 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 AssetAtlas::Entry* AssetAtlas::getEntry(const SkBitmap* bitmap) const {
-    ssize_t index = mEntries.indexOfKey(bitmap);
+    ssize_t index = mEntries.indexOfKey(bitmap->pixelRef());
     return index >= 0 ? mEntries.valueAt(index) : nullptr;
 }
 
 Texture* AssetAtlas::getEntryTexture(const SkBitmap* bitmap) const {
-    ssize_t index = mEntries.indexOfKey(bitmap);
+    ssize_t index = mEntries.indexOfKey(bitmap->pixelRef());
     return index >= 0 ? mEntries.valueAt(index)->texture : nullptr;
 }
 
@@ -112,15 +112,12 @@
     Texture* const mDelegate;
 }; // struct DelegateTexture
 
-/**
- * TODO: This method does not take the rotation flag into account
- */
 void AssetAtlas::createEntries(Caches& caches, int64_t* map, int count) {
     const float width = float(mTexture->width);
     const float height = float(mTexture->height);
 
     for (int i = 0; i < count; ) {
-        SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(map[i++]);
+        SkPixelRef* pixelRef = reinterpret_cast<SkPixelRef*>(map[i++]);
         // NOTE: We're converting from 64 bit signed values to 32 bit
         // signed values. This is guaranteed to be safe because the "x"
         // and "y" coordinate values are guaranteed to be representable
@@ -128,24 +125,23 @@
         // pointers on 64 bit architectures.
         const int x = static_cast<int>(map[i++]);
         const int y = static_cast<int>(map[i++]);
-        bool rotated = map[i++] > 0;
 
         // Bitmaps should never be null, we're just extra paranoid
-        if (!bitmap) continue;
+        if (!pixelRef) continue;
 
         const UvMapper mapper(
-                x / width, (x + bitmap->width()) / width,
-                y / height, (y + bitmap->height()) / height);
+                x / width, (x + pixelRef->info().width()) / width,
+                y / height, (y + pixelRef->info().height()) / height);
 
         Texture* texture = new DelegateTexture(caches, mTexture);
-        texture->blend = !bitmap->isOpaque();
-        texture->width = bitmap->width();
-        texture->height = bitmap->height();
+        texture->blend = !SkAlphaTypeIsOpaque(pixelRef->info().alphaType());
+        texture->width = pixelRef->info().width();
+        texture->height = pixelRef->info().height();
 
-        Entry* entry = new Entry(bitmap, x, y, rotated, texture, mapper, *this);
+        Entry* entry = new Entry(pixelRef, texture, mapper, *this);
         texture->uvMapper = &entry->uvMapper;
 
-        mEntries.add(entry->bitmap, entry);
+        mEntries.add(entry->pixelRef, entry);
     }
 }
 
diff --git a/libs/hwui/AssetAtlas.h b/libs/hwui/AssetAtlas.h
index 1772eff..f1cd0b4 100644
--- a/libs/hwui/AssetAtlas.h
+++ b/libs/hwui/AssetAtlas.h
@@ -45,27 +45,11 @@
 class AssetAtlas {
 public:
     /**
-     * Entry representing the position and rotation of a
-     * bitmap inside the atlas.
+     * Entry representing the texture and uvMapper of a PixelRef in the
+     * atlas
      */
-    struct Entry {
-        /**
-         * The bitmap that generated this atlas entry.
-         */
-        SkBitmap* bitmap;
-
-        /**
-         * Location of the bitmap inside the atlas, in pixels.
-         */
-        int x;
-        int y;
-
-        /**
-         * If set, the bitmap is rotated 90 degrees (clockwise)
-         * inside the atlas.
-         */
-        bool rotated;
-
+    class Entry {
+    public:
         /*
          * A "virtual texture" object that represents the texture
          * this entry belongs to. This texture should never be
@@ -80,11 +64,6 @@
         const UvMapper uvMapper;
 
         /**
-         * Atlas this entry belongs to.
-         */
-        const AssetAtlas& atlas;
-
-        /**
          * Unique identifier used to merge bitmaps and 9-patches stored
          * in the atlas.
          */
@@ -93,10 +72,22 @@
         }
 
     private:
-        Entry(SkBitmap* bitmap, int x, int y, bool rotated,
-                Texture* texture, const UvMapper& mapper, const AssetAtlas& atlas):
-                bitmap(bitmap), x(x), y(y), rotated(rotated),
-                texture(texture), uvMapper(mapper), atlas(atlas) {
+        /**
+         * The pixel ref that generated this atlas entry.
+         */
+        SkPixelRef* pixelRef;
+
+        /**
+         * Atlas this entry belongs to.
+         */
+        const AssetAtlas& atlas;
+
+        Entry(SkPixelRef* pixelRef, Texture* texture, const UvMapper& mapper,
+                    const AssetAtlas& atlas)
+                : texture(texture)
+                , uvMapper(mapper)
+                , pixelRef(pixelRef)
+                , atlas(atlas) {
         }
 
         ~Entry() {
@@ -114,8 +105,7 @@
      * Initializes the atlas with the specified buffer and
      * map. The buffer is a gralloc'd texture that will be
      * used as an EGLImage. The map is a list of SkBitmap*
-     * and their (x, y) positions as well as their rotation
-     * flags.
+     * and their (x, y) positions
      *
      * This method returns immediately if the atlas is already
      * initialized. To re-initialize the atlas, you must
@@ -178,7 +168,7 @@
     const bool mBlendKey;
     const bool mOpaqueKey;
 
-    KeyedVector<const SkBitmap*, Entry*> mEntries;
+    KeyedVector<const SkPixelRef*, Entry*> mEntries;
 }; // class AssetAtlas
 
 }; // namespace uirenderer
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index fd5a2ce..f75d6a0 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -57,14 +57,8 @@
     init();
     initFont();
     initConstraints();
-    initProperties();
     initStaticProperties();
     initExtensions();
-    initTempProperties();
-
-    mDebugLevel = readDebugLevel();
-    ALOGD_IF(mDebugLevel != kDebugDisabled,
-            "Enabling debug mode %d", mDebugLevel);
 }
 
 bool Caches::init() {
@@ -77,10 +71,6 @@
 
     mFunctorsCount = 0;
 
-    debugLayersUpdates = false;
-    debugOverdraw = false;
-    debugStencilClip = kStencilHide;
-
     patchCache.init();
 
     mInitialized = true;
@@ -124,66 +114,6 @@
     }
 }
 
-bool Caches::initProperties() {
-    bool prevDebugLayersUpdates = debugLayersUpdates;
-    bool prevDebugOverdraw = debugOverdraw;
-    StencilClipDebug prevDebugStencilClip = debugStencilClip;
-
-    char property[PROPERTY_VALUE_MAX];
-    if (property_get(PROPERTY_DEBUG_LAYERS_UPDATES, property, nullptr) > 0) {
-        INIT_LOGD("  Layers updates debug enabled: %s", property);
-        debugLayersUpdates = !strcmp(property, "true");
-    } else {
-        debugLayersUpdates = false;
-    }
-
-    debugOverdraw = false;
-    if (property_get(PROPERTY_DEBUG_OVERDRAW, property, nullptr) > 0) {
-        INIT_LOGD("  Overdraw debug enabled: %s", property);
-        if (!strcmp(property, "show")) {
-            debugOverdraw = true;
-            mOverdrawDebugColorSet = kColorSet_Default;
-        } else if (!strcmp(property, "show_deuteranomaly")) {
-            debugOverdraw = true;
-            mOverdrawDebugColorSet = kColorSet_Deuteranomaly;
-        }
-    }
-
-    // See Properties.h for valid values
-    if (property_get(PROPERTY_DEBUG_STENCIL_CLIP, property, nullptr) > 0) {
-        INIT_LOGD("  Stencil clip debug enabled: %s", property);
-        if (!strcmp(property, "hide")) {
-            debugStencilClip = kStencilHide;
-        } else if (!strcmp(property, "highlight")) {
-            debugStencilClip = kStencilShowHighlight;
-        } else if (!strcmp(property, "region")) {
-            debugStencilClip = kStencilShowRegion;
-        }
-    } else {
-        debugStencilClip = kStencilHide;
-    }
-
-    if (property_get(PROPERTY_DISABLE_DRAW_DEFER, property, "false")) {
-        drawDeferDisabled = !strcasecmp(property, "true");
-        INIT_LOGD("  Draw defer %s", drawDeferDisabled ? "disabled" : "enabled");
-    } else {
-        drawDeferDisabled = false;
-        INIT_LOGD("  Draw defer enabled");
-    }
-
-    if (property_get(PROPERTY_DISABLE_DRAW_REORDER, property, "false")) {
-        drawReorderDisabled = !strcasecmp(property, "true");
-        INIT_LOGD("  Draw reorder %s", drawReorderDisabled ? "disabled" : "enabled");
-    } else {
-        drawReorderDisabled = false;
-        INIT_LOGD("  Draw reorder enabled");
-    }
-
-    return (prevDebugLayersUpdates != debugLayersUpdates)
-            || (prevDebugOverdraw != debugOverdraw)
-            || (prevDebugStencilClip != debugStencilClip);
-}
-
 void Caches::terminate() {
     if (!mInitialized) return;
     mRegionMesh.release();
@@ -231,7 +161,9 @@
     };
     if (amount < 1) amount = 1;
     if (amount > 4) amount = 4;
-    return sOverdrawColors[mOverdrawDebugColorSet][amount - 1];
+
+    int overdrawColorIndex = static_cast<int>(Properties::overdrawColorSet);
+    return sOverdrawColors[overdrawColorIndex][amount - 1];
 }
 
 void Caches::dumpMemoryUsage() {
@@ -351,13 +283,13 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 void Caches::startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool discard) {
-    if (mExtensions.hasTiledRendering() && !debugOverdraw) {
+    if (mExtensions.hasTiledRendering() && !Properties::debugOverdraw) {
         glStartTilingQCOM(x, y, width, height, (discard ? GL_NONE : GL_COLOR_BUFFER_BIT0_QCOM));
     }
 }
 
 void Caches::endTiling() {
-    if (mExtensions.hasTiledRendering() && !debugOverdraw) {
+    if (mExtensions.hasTiledRendering() && !Properties::debugOverdraw) {
         glEndTilingQCOM(GL_COLOR_BUFFER_BIT0_QCOM);
     }
 }
@@ -395,44 +327,5 @@
 // Temporary Properties
 ///////////////////////////////////////////////////////////////////////////////
 
-void Caches::initTempProperties() {
-    propertyLightRadius = -1.0f;
-    propertyLightPosY = -1.0f;
-    propertyLightPosZ = -1.0f;
-    propertyAmbientRatio = -1.0f;
-    propertyAmbientShadowStrength = -1;
-    propertySpotShadowStrength = -1;
-}
-
-void Caches::setTempProperty(const char* name, const char* value) {
-    ALOGD("setting property %s to %s", name, value);
-    if (!strcmp(name, "ambientRatio")) {
-        propertyAmbientRatio = fmin(fmax(atof(value), 0.0), 10.0);
-        ALOGD("ambientRatio = %.2f", propertyAmbientRatio);
-        return;
-    } else if (!strcmp(name, "lightRadius")) {
-        propertyLightRadius = fmin(fmax(atof(value), 0.0), 3000.0);
-        ALOGD("lightRadius = %.2f", propertyLightRadius);
-        return;
-    } else if (!strcmp(name, "lightPosY")) {
-        propertyLightPosY = fmin(fmax(atof(value), 0.0), 3000.0);
-        ALOGD("lightPos Y = %.2f", propertyLightPosY);
-        return;
-    } else if (!strcmp(name, "lightPosZ")) {
-        propertyLightPosZ = fmin(fmax(atof(value), 0.0), 3000.0);
-        ALOGD("lightPos Z = %.2f", propertyLightPosZ);
-        return;
-    } else if (!strcmp(name, "ambientShadowStrength")) {
-        propertyAmbientShadowStrength = atoi(value);
-        ALOGD("ambient shadow strength = 0x%x out of 0xff", propertyAmbientShadowStrength);
-        return;
-    } else if (!strcmp(name, "spotShadowStrength")) {
-        propertySpotShadowStrength = atoi(value);
-        ALOGD("spot shadow strength = 0x%x out of 0xff", propertySpotShadowStrength);
-        return;
-    }
-    ALOGD("    failed");
-}
-
 }; // namespace uirenderer
 }; // namespace android
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index 8aea8ff..804f609 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -80,7 +80,7 @@
     }
 
     static bool hasInstance() {
-        return sInstance != 0;
+        return sInstance != nullptr;
     }
 private:
     Caches(RenderState& renderState);
@@ -99,11 +99,6 @@
     bool init();
 
     /**
-     * Initialize global system properties.
-     */
-    bool initProperties();
-
-    /**
      * Flush the cache.
      *
      * @param mode Indicates how much of the cache should be flushed
@@ -117,14 +112,6 @@
     void terminate();
 
     /**
-     * Indicates whether the renderer is in debug mode.
-     * This debug mode provides limited information to app developers.
-     */
-    DebugLevel getDebugLevel() const {
-        return mDebugLevel;
-    }
-
-    /**
      * Returns a non-premultiplied ARGB color for the specified
      * amount of overdraw (1 for 1x, 2 for 2x, etc.)
      */
@@ -162,22 +149,9 @@
     void registerFunctors(uint32_t functorCount);
     void unregisterFunctors(uint32_t functorCount);
 
-    bool drawDeferDisabled;
-    bool drawReorderDisabled;
-
     // Misc
     GLint maxTextureSize;
 
-    // Debugging
-    bool debugLayersUpdates;
-    bool debugOverdraw;
-
-    enum StencilClipDebug {
-        kStencilHide,
-        kStencilShowHighlight,
-        kStencilShowRegion
-    };
-    StencilClipDebug debugStencilClip;
 private:
     // Declared before gradientCache and programCache which need this to initialize.
     // TODO: cleanup / move elsewhere
@@ -207,17 +181,6 @@
     PFNGLPUSHGROUPMARKEREXTPROC startMark;
     PFNGLPOPGROUPMARKEREXTPROC endMark;
 
-    // TEMPORARY properties
-    void initTempProperties();
-    void setTempProperty(const char* name, const char* value);
-
-    float propertyLightRadius;
-    float propertyLightPosY;
-    float propertyLightPosZ;
-    float propertyAmbientRatio;
-    int propertyAmbientShadowStrength;
-    int propertySpotShadowStrength;
-
     void setProgram(const ProgramDescription& description);
     void setProgram(Program* program);
 
@@ -227,10 +190,6 @@
     TextureState& textureState() { return *mTextureState; }
 
 private:
-    enum OverdrawColorSet {
-        kColorSet_Default = 0,
-        kColorSet_Deuteranomaly
-    };
 
     void initFont();
     void initExtensions();
@@ -249,13 +208,10 @@
     mutable Mutex mGarbageLock;
     Vector<Layer*> mLayerGarbage;
 
-    DebugLevel mDebugLevel;
     bool mInitialized;
 
     uint32_t mFunctorsCount;
 
-    OverdrawColorSet mOverdrawDebugColorSet;
-
     // TODO: move below to RenderState
     PixelBufferState* mPixelBufferState = nullptr;
     TextureState* mTextureState = nullptr;
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index dd6af03..6fcf958 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -28,6 +28,7 @@
 #include "DeferredDisplayList.h"
 #include "DisplayListOp.h"
 #include "OpenGLRenderer.h"
+#include "Properties.h"
 #include "utils/MathUtils.h"
 
 #if DEBUG_DEFER
@@ -502,7 +503,7 @@
         resetBatchingState();
     }
 
-    if (CC_UNLIKELY(renderer.getCaches().drawReorderDisabled)) {
+    if (CC_UNLIKELY(Properties::drawReorderDisabled)) {
         // TODO: elegant way to reuse batches?
         DrawBatch* b = new DrawBatch(deferInfo);
         b->add(op, state, deferInfo.opaqueOverBounds);
diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp
index 4540bec..e679bff 100644
--- a/libs/hwui/DisplayList.cpp
+++ b/libs/hwui/DisplayList.cpp
@@ -41,10 +41,6 @@
     ResourceCache& resourceCache = ResourceCache::getInstance();
     resourceCache.lock();
 
-    for (size_t i = 0; i < bitmapResources.size(); i++) {
-        resourceCache.decrementRefcountLocked(bitmapResources.itemAt(i));
-    }
-
     for (size_t i = 0; i < patchResources.size(); i++) {
         resourceCache.decrementRefcountLocked(patchResources.itemAt(i));
     }
@@ -59,7 +55,6 @@
         delete path;
     }
 
-    bitmapResources.clear();
     patchResources.clear();
     pathResources.clear();
     paints.clear();
diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp
index a7784b6..cbb6fd5 100644
--- a/libs/hwui/DisplayListCanvas.cpp
+++ b/libs/hwui/DisplayListCanvas.cpp
@@ -218,7 +218,7 @@
 }
 
 void DisplayListCanvas::drawBitmap(const SkBitmap* bitmap, const SkPaint* paint) {
-    bitmap = refBitmap(bitmap);
+    bitmap = refBitmap(*bitmap);
     paint = refPaint(paint);
 
     addDrawOp(new (alloc()) DrawBitmapOp(bitmap, paint));
@@ -284,7 +284,7 @@
                 dstRight = srcRight - srcLeft;
                 dstBottom = srcBottom - srcTop;
 
-                addDrawOp(new (alloc()) DrawBitmapRectOp(refBitmap(&bitmap),
+                addDrawOp(new (alloc()) DrawBitmapRectOp(refBitmap(bitmap),
                         srcLeft, srcTop, srcRight, srcBottom,
                         dstLeft, dstTop, dstRight, dstBottom, paint));
                 restore();
@@ -292,7 +292,7 @@
             }
         }
 
-        addDrawOp(new (alloc()) DrawBitmapRectOp(refBitmap(&bitmap),
+        addDrawOp(new (alloc()) DrawBitmapRectOp(refBitmap(bitmap),
                 srcLeft, srcTop, srcRight, srcBottom,
                 dstLeft, dstTop, dstRight, dstBottom, paint));
     }
@@ -305,17 +305,17 @@
     paint = refPaint(paint);
     colors = refBuffer<int>(colors, vertexCount); // 1 color per vertex
 
-    addDrawOp(new (alloc()) DrawBitmapMeshOp(refBitmap(&bitmap), meshWidth, meshHeight,
+    addDrawOp(new (alloc()) DrawBitmapMeshOp(refBitmap(bitmap), meshWidth, meshHeight,
            vertices, colors, paint));
 }
 
-void DisplayListCanvas::drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch,
+void DisplayListCanvas::drawPatch(const SkBitmap& bitmap, const Res_png_9patch* patch,
         float left, float top, float right, float bottom, const SkPaint* paint) {
-    bitmap = refBitmap(bitmap);
+    const SkBitmap* bitmapPtr = refBitmap(bitmap);
     patch = refPatch(patch);
     paint = refPaint(paint);
 
-    addDrawOp(new (alloc()) DrawPatchOp(bitmap, patch, left, top, right, bottom, paint));
+    addDrawOp(new (alloc()) DrawPatchOp(bitmapPtr, patch, left, top, right, bottom, paint));
 }
 
 void DisplayListCanvas::drawColor(int color, SkXfermode::Mode mode) {
diff --git a/libs/hwui/DisplayListCanvas.h b/libs/hwui/DisplayListCanvas.h
index fa4b2b4..d997ef4 100644
--- a/libs/hwui/DisplayListCanvas.h
+++ b/libs/hwui/DisplayListCanvas.h
@@ -98,7 +98,7 @@
     // Bitmap-based
     void drawBitmap(const SkBitmap* bitmap, const SkPaint* paint);
     // TODO: move drawPatch() to Canvas.h
-    void drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch,
+    void drawPatch(const SkBitmap& bitmap, const Res_png_9patch* patch,
             float left, float top, float right, float bottom, const SkPaint* paint);
 
     // Shapes
@@ -345,14 +345,15 @@
         return cachedRegion;
     }
 
-    inline const SkBitmap* refBitmap(const SkBitmap* bitmap) {
+    inline const SkBitmap* refBitmap(const SkBitmap& bitmap) {
         // Note that this assumes the bitmap is immutable. There are cases this won't handle
         // correctly, such as creating the bitmap from scratch, drawing with it, changing its
         // contents, and drawing again. The only fix would be to always copy it the first time,
         // which doesn't seem worth the extra cycles for this unlikely case.
-        const SkBitmap* cachedBitmap = mResourceCache.insert(bitmap);
-        mDisplayListData->bitmapResources.add(cachedBitmap);
-        return cachedBitmap;
+        SkBitmap* localBitmap = new (alloc()) SkBitmap(bitmap);
+        alloc().autoDestroy(localBitmap);
+        mDisplayListData->bitmapResources.push_back(localBitmap);
+        return localBitmap;
     }
 
     inline const Res_png_9patch* refPatch(const Res_png_9patch* patch) {
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index 4863ed2..e9d6ebc 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -1423,7 +1423,7 @@
     }
 
     virtual void output(int level, uint32_t logFlags) const override {
-        OP_LOG("Draw RenderNode %p %s, flags %#x", mRenderNode, mRenderNode->getName());
+        OP_LOG("Draw RenderNode %p %s", mRenderNode, mRenderNode->getName());
         if (mRenderNode && (logFlags & kOpLogFlag_Recurse)) {
             mRenderNode->output(level + 1);
         }
diff --git a/libs/hwui/DrawProfiler.cpp b/libs/hwui/DrawProfiler.cpp
index ecde5ff..7addef9 100644
--- a/libs/hwui/DrawProfiler.cpp
+++ b/libs/hwui/DrawProfiler.cpp
@@ -18,12 +18,11 @@
 #include <cutils/compiler.h>
 
 #include "OpenGLRenderer.h"
-#include "Properties.h"
 
 #define DEFAULT_MAX_FRAMES 128
 
-#define RETURN_IF_PROFILING_DISABLED() if (CC_LIKELY(mType == kNone)) return
-#define RETURN_IF_DISABLED() if (CC_LIKELY(mType == kNone && !mShowDirtyRegions)) return
+#define RETURN_IF_PROFILING_DISABLED() if (CC_LIKELY(mType == ProfileType::None)) return
+#define RETURN_IF_DISABLED() if (CC_LIKELY(mType == ProfileType::None && !mShowDirtyRegions)) return
 
 #define NANOS_TO_MILLIS_FLOAT(nanos) ((nanos) * 0.000001f)
 
@@ -56,18 +55,7 @@
     return (int) (dp * density + 0.5f);
 }
 
-DrawProfiler::DrawProfiler()
-        : mType(kNone)
-        , mDensity(0)
-        , mData(nullptr)
-        , mDataSize(0)
-        , mCurrentFrame(-1)
-        , mPreviousTime(0)
-        , mVerticalUnit(0)
-        , mHorizontalUnit(0)
-        , mThresholdStroke(0)
-        , mShowDirtyRegions(false)
-        , mFlashToggle(false) {
+DrawProfiler::DrawProfiler() {
     setDensity(1);
 }
 
@@ -135,7 +123,7 @@
         }
     }
 
-    if (mType == kBars) {
+    if (mType == ProfileType::Bars) {
         prepareShapes(canvas->getViewportHeight());
         drawGraph(canvas);
         drawCurrentFrame(canvas);
@@ -217,32 +205,20 @@
     canvas->drawLines(pts, 4, &paint);
 }
 
-DrawProfiler::ProfileType DrawProfiler::loadRequestedProfileType() {
-    ProfileType type = kNone;
-    char buf[PROPERTY_VALUE_MAX] = {'\0',};
-    if (property_get(PROPERTY_PROFILE, buf, "") > 0) {
-        if (!strcmp(buf, PROPERTY_PROFILE_VISUALIZE_BARS)) {
-            type = kBars;
-        } else if (!strcmp(buf, "true")) {
-            type = kConsole;
-        }
-    }
-    return type;
-}
-
-bool DrawProfiler::loadSystemProperties() {
+bool DrawProfiler::consumeProperties() {
     bool changed = false;
-    ProfileType newType = loadRequestedProfileType();
+    ProfileType newType = Properties::getProfileType();
     if (newType != mType) {
         mType = newType;
-        if (mType == kNone) {
+        if (mType == ProfileType::None) {
             destroyData();
         } else {
             createData();
         }
         changed = true;
     }
-    bool showDirty = property_get_bool(PROPERTY_DEBUG_SHOW_DIRTY_REGIONS, false);
+
+    bool showDirty = Properties::showDirtyRegions;
     if (showDirty != mShowDirtyRegions) {
         mShowDirtyRegions = showDirty;
         changed = true;
diff --git a/libs/hwui/DrawProfiler.h b/libs/hwui/DrawProfiler.h
index de64088..ef6101c 100644
--- a/libs/hwui/DrawProfiler.h
+++ b/libs/hwui/DrawProfiler.h
@@ -16,9 +16,11 @@
 #ifndef DRAWPROFILER_H
 #define DRAWPROFILER_H
 
-#include <utils/Timers.h>
+#include "Properties.h"
 #include "Rect.h"
 
+#include <utils/Timers.h>
+
 namespace android {
 namespace uirenderer {
 
@@ -29,7 +31,7 @@
     DrawProfiler();
     ~DrawProfiler();
 
-    bool loadSystemProperties();
+    bool consumeProperties();
     void setDensity(float density);
 
     void startFrame(nsecs_t recordDurationNanos = 0);
@@ -43,12 +45,6 @@
     void dumpData(int fd);
 
 private:
-    enum ProfileType {
-        kNone,
-        kConsole,
-        kBars,
-    };
-
     typedef struct {
         float record;
         float prepare;
@@ -65,20 +61,18 @@
     void drawCurrentFrame(OpenGLRenderer* canvas);
     void drawThreshold(OpenGLRenderer* canvas);
 
-    ProfileType loadRequestedProfileType();
+    ProfileType mType = ProfileType::None;
+    float mDensity = 0;
 
-    ProfileType mType;
-    float mDensity;
+    FrameTimingData* mData = nullptr;
+    int mDataSize = 0;
 
-    FrameTimingData* mData;
-    int mDataSize;
+    int mCurrentFrame = -1;
+    nsecs_t mPreviousTime = 0;
 
-    int mCurrentFrame;
-    nsecs_t mPreviousTime;
-
-    int mVerticalUnit;
-    int mHorizontalUnit;
-    int mThresholdStroke;
+    int mVerticalUnit = 0;
+    int mHorizontalUnit = 0;
+    int mThresholdStroke = 0;
 
     /*
      * mRects represents an array of rect shapes, divided into NUM_ELEMENTS
@@ -87,11 +81,11 @@
      * OpenGLRenderer:drawRects() that makes up all the FrameTimingData:record
      * information.
      */
-    float** mRects;
+    float** mRects = nullptr;
 
-    bool mShowDirtyRegions;
+    bool mShowDirtyRegions = false;
     SkRect mDirtyRegion;
-    bool mFlashToggle;
+    bool mFlashToggle = false;
 };
 
 } /* namespace uirenderer */
diff --git a/libs/hwui/GlopBuilder.cpp b/libs/hwui/GlopBuilder.cpp
index 9ca6bc6..e25f81e 100644
--- a/libs/hwui/GlopBuilder.cpp
+++ b/libs/hwui/GlopBuilder.cpp
@@ -588,8 +588,8 @@
 
     // Enable debug highlight when what we're about to draw is tested against
     // the stencil buffer and if stencil highlight debugging is on
-    mDescription.hasDebugHighlight = !mCaches.debugOverdraw
-            && mCaches.debugStencilClip == Caches::kStencilShowHighlight
+    mDescription.hasDebugHighlight = !Properties::debugOverdraw
+            && Properties::debugStencilClip == StencilClipDebug::ShowHighlight
             && mRenderState.stencil().isTestEnabled();
 
     // serialize shader info into ShaderData
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 7fc31b8..09674f7 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -245,7 +245,7 @@
 #if DEBUG_MEMORY_USAGE
         mCaches.dumpMemoryUsage();
 #else
-        if (mCaches.getDebugLevel() & kDebugMemory) {
+        if (Properties::debugLevel & kDebugMemory) {
             mCaches.dumpMemoryUsage();
         }
 #endif
@@ -339,7 +339,7 @@
 }
 
 void OpenGLRenderer::renderOverdraw() {
-    if (mCaches.debugOverdraw && getTargetFbo() == 0) {
+    if (Properties::debugOverdraw && getTargetFbo() == 0) {
         const Rect* clip = &mTilingClip;
 
         mRenderState.scissor().setEnabled(true);
@@ -381,7 +381,7 @@
             debugOverdraw(false, false);
         }
 
-        if (CC_UNLIKELY(inFrame || mCaches.drawDeferDisabled)) {
+        if (CC_UNLIKELY(inFrame || Properties::drawDeferDisabled)) {
             layer->render(*this);
         } else {
             layer->defer(*this);
@@ -392,7 +392,7 @@
             startTilingCurrentClip();
         }
 
-        layer->debugDrawUpdate = mCaches.debugLayersUpdates;
+        layer->debugDrawUpdate = Properties::debugLayersUpdates;
         layer->hasDrawnSinceUpdate = false;
 
         return true;
@@ -407,7 +407,7 @@
     // in the layer updates list which will be cleared by flushLayers().
     int count = mLayerUpdates.size();
     if (count > 0) {
-        if (CC_UNLIKELY(mCaches.drawDeferDisabled)) {
+        if (CC_UNLIKELY(Properties::drawDeferDisabled)) {
             startMark("Layer Updates");
         } else {
             startMark("Defer Layer Updates");
@@ -419,7 +419,7 @@
             updateLayer(layer, false);
         }
 
-        if (CC_UNLIKELY(mCaches.drawDeferDisabled)) {
+        if (CC_UNLIKELY(Properties::drawDeferDisabled)) {
             mLayerUpdates.clear();
             mRenderState.bindFramebuffer(getTargetFbo());
         }
@@ -883,13 +883,13 @@
  * operations are correctly counted twice for overdraw. NOTE: assumes composeLayerRegion only used
  * by saveLayer's restore
  */
-#define DRAW_DOUBLE_STENCIL_IF(COND, DRAW_COMMAND) {                             \
-        DRAW_COMMAND;                                                            \
-        if (CC_UNLIKELY(mCaches.debugOverdraw && getTargetFbo() == 0 && COND)) { \
-            glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);                 \
-            DRAW_COMMAND;                                                        \
-            glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);                     \
-        }                                                                        \
+#define DRAW_DOUBLE_STENCIL_IF(COND, DRAW_COMMAND) { \
+        DRAW_COMMAND; \
+        if (CC_UNLIKELY(Properties::debugOverdraw && getTargetFbo() == 0 && COND)) { \
+            glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); \
+            DRAW_COMMAND; \
+            glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \
+        } \
     }
 
 #define DRAW_DOUBLE_STENCIL(DRAW_COMMAND) DRAW_DOUBLE_STENCIL_IF(true, DRAW_COMMAND)
@@ -1324,7 +1324,7 @@
 }
 
 void OpenGLRenderer::setStencilFromClip() {
-    if (!mCaches.debugOverdraw) {
+    if (!Properties::debugOverdraw) {
         if (!currentSnapshot()->clipIsSimple()) {
             int incrementThreshold;
             EVENT_LOGD("setStencilFromClip - enabling");
@@ -1383,8 +1383,8 @@
             // Draw the region used to generate the stencil if the appropriate debug
             // mode is enabled
             // TODO: Implement for rectangle list clip areas
-            if (mCaches.debugStencilClip == Caches::kStencilShowRegion &&
-                    !clipArea.isRectangleList()) {
+            if (Properties::debugStencilClip == StencilClipDebug::ShowRegion
+                    && !clipArea.isRectangleList()) {
                 paint.setColor(0x7f0000ff);
                 paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
                 drawRegionRects(currentSnapshot()->getClipRegion(), paint);
@@ -1469,7 +1469,7 @@
     if (renderNode && renderNode->isRenderable()) {
         // compute 3d ordering
         renderNode->computeOrdering();
-        if (CC_UNLIKELY(mCaches.drawDeferDisabled)) {
+        if (CC_UNLIKELY(Properties::drawDeferDisabled)) {
             startFrame();
             ReplayStateStruct replayStruct(*this, dirty, replayFlags);
             renderNode->replay(replayStruct, 0);
@@ -1478,7 +1478,7 @@
 
         // Don't avoid overdraw when visualizing, since that makes it harder to
         // debug where it's coming from, and when the problem occurs.
-        bool avoidOverdraw = !mCaches.debugOverdraw;
+        bool avoidOverdraw = !Properties::debugOverdraw;
         DeferredDisplayList deferredList(mState.currentClipRect(), avoidOverdraw);
         DeferStateStruct deferStruct(deferredList, *this, replayFlags);
         renderNode->defer(deferStruct, 0);
@@ -2452,8 +2452,8 @@
 
     // The caller has made sure casterAlpha > 0.
     float ambientShadowAlpha = mAmbientShadowAlpha;
-    if (CC_UNLIKELY(mCaches.propertyAmbientShadowStrength >= 0)) {
-        ambientShadowAlpha = mCaches.propertyAmbientShadowStrength;
+    if (CC_UNLIKELY(Properties::overrideAmbientShadowStrength >= 0)) {
+        ambientShadowAlpha = Properties::overrideAmbientShadowStrength;
     }
     if (ambientShadowVertexBuffer && ambientShadowAlpha > 0) {
         paint.setARGB(casterAlpha * ambientShadowAlpha, 0, 0, 0);
@@ -2461,8 +2461,8 @@
     }
 
     float spotShadowAlpha = mSpotShadowAlpha;
-    if (CC_UNLIKELY(mCaches.propertySpotShadowStrength >= 0)) {
-        spotShadowAlpha = mCaches.propertySpotShadowStrength;
+    if (CC_UNLIKELY(Properties::overrideSpotShadowStrength >= 0)) {
+        spotShadowAlpha = Properties::overrideSpotShadowStrength;
     }
     if (spotShadowVertexBuffer && spotShadowAlpha > 0) {
         paint.setARGB(casterAlpha * spotShadowAlpha, 0, 0, 0);
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index bdb44a6..74964f6 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -153,7 +153,7 @@
     glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
     mMaxTextureSize = maxTextureSize;
 
-    mDebugEnabled = readDebugLevel() & kDebugCaches;
+    mDebugEnabled = Properties::debugLevel & kDebugCaches;
 }
 
 PathCache::~PathCache() {
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
new file mode 100644
index 0000000..723a177
--- /dev/null
+++ b/libs/hwui/Properties.cpp
@@ -0,0 +1,154 @@
+/*
+ * 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.
+ */
+#include "Properties.h"
+
+#include "Debug.h"
+
+#include <cmath>
+#include <cutils/log.h>
+
+namespace android {
+namespace uirenderer {
+
+bool Properties::drawDeferDisabled = false;
+bool Properties::drawReorderDisabled = false;
+bool Properties::debugLayersUpdates = false;
+bool Properties::debugOverdraw = false;
+bool Properties::showDirtyRegions = false;
+bool Properties::skipEmptyFrames = true;
+bool Properties::swapBuffersWithDamage = false;
+
+DebugLevel Properties::debugLevel = kDebugDisabled;
+OverdrawColorSet Properties::overdrawColorSet = OverdrawColorSet::Default;
+StencilClipDebug Properties::debugStencilClip = StencilClipDebug::Hide;
+
+float Properties::overrideLightRadius = -1.0f;
+float Properties::overrideLightPosY = -1.0f;
+float Properties::overrideLightPosZ = -1.0f;
+float Properties::overrideAmbientRatio = -1.0f;
+int Properties::overrideAmbientShadowStrength = -1;
+int Properties::overrideSpotShadowStrength = -1;
+
+ProfileType Properties::sProfileType = ProfileType::None;
+bool Properties::sDisableProfileBars = false;
+
+bool Properties::load() {
+    char property[PROPERTY_VALUE_MAX];
+    bool prevDebugLayersUpdates = debugLayersUpdates;
+    bool prevDebugOverdraw = debugOverdraw;
+    StencilClipDebug prevDebugStencilClip = debugStencilClip;
+
+
+    debugOverdraw = false;
+    if (property_get(PROPERTY_DEBUG_OVERDRAW, property, nullptr) > 0) {
+        INIT_LOGD("  Overdraw debug enabled: %s", property);
+        if (!strcmp(property, "show")) {
+            debugOverdraw = true;
+            overdrawColorSet = OverdrawColorSet::Default;
+        } else if (!strcmp(property, "show_deuteranomaly")) {
+            debugOverdraw = true;
+            overdrawColorSet = OverdrawColorSet::Deuteranomaly;
+        }
+    }
+
+    // See Properties.h for valid values
+    if (property_get(PROPERTY_DEBUG_STENCIL_CLIP, property, nullptr) > 0) {
+        INIT_LOGD("  Stencil clip debug enabled: %s", property);
+        if (!strcmp(property, "hide")) {
+            debugStencilClip = StencilClipDebug::Hide;
+        } else if (!strcmp(property, "highlight")) {
+            debugStencilClip = StencilClipDebug::ShowHighlight;
+        } else if (!strcmp(property, "region")) {
+            debugStencilClip = StencilClipDebug::ShowRegion;
+        }
+    } else {
+        debugStencilClip = StencilClipDebug::Hide;
+    }
+
+    sProfileType = ProfileType::None;
+    if (property_get(PROPERTY_PROFILE, property, "") > 0) {
+        if (!strcmp(property, PROPERTY_PROFILE_VISUALIZE_BARS)) {
+            sProfileType = ProfileType::Bars;
+        } else if (!strcmp(property, "true")) {
+            sProfileType = ProfileType::Console;
+        }
+    }
+
+    debugLayersUpdates = property_get_bool(PROPERTY_DEBUG_LAYERS_UPDATES, false);
+    INIT_LOGD("  Layers updates debug enabled: %d", debugLayersUpdates);
+
+    drawDeferDisabled = property_get_bool(PROPERTY_DISABLE_DRAW_DEFER, false);
+    INIT_LOGD("  Draw defer %s", drawDeferDisabled ? "disabled" : "enabled");
+
+    drawReorderDisabled = property_get_bool(PROPERTY_DISABLE_DRAW_REORDER, false);
+    INIT_LOGD("  Draw reorder %s", drawReorderDisabled ? "disabled" : "enabled");
+
+    showDirtyRegions = property_get_bool(PROPERTY_DEBUG_SHOW_DIRTY_REGIONS, false);
+
+    debugLevel = kDebugDisabled;
+    if (property_get(PROPERTY_DEBUG, property, nullptr) > 0) {
+        debugLevel = (DebugLevel) atoi(property);
+    }
+
+    skipEmptyFrames = property_get_bool(PROPERTY_SKIP_EMPTY_DAMAGE, true);
+    swapBuffersWithDamage = property_get_bool(PROPERTY_SWAP_WITH_DAMAGE, false);
+
+    return (prevDebugLayersUpdates != debugLayersUpdates)
+            || (prevDebugOverdraw != debugOverdraw)
+            || (prevDebugStencilClip != debugStencilClip);
+}
+
+void Properties::overrideProperty(const char* name, const char* value) {
+    if (!strcmp(name, "disableProfileBars")) {
+        sDisableProfileBars = !strcmp(value, "true");
+        ALOGD("profile bars %s", sDisableProfileBars ? "disabled" : "enabled");
+        return;
+    } else if (!strcmp(name, "ambientRatio")) {
+        overrideAmbientRatio = fmin(fmax(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);
+        ALOGD("lightRadius = %.2f", overrideLightRadius);
+        return;
+    } else if (!strcmp(name, "lightPosY")) {
+        overrideLightPosY = fmin(fmax(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);
+        ALOGD("lightPos Z = %.2f", overrideLightPosZ);
+        return;
+    } else if (!strcmp(name, "ambientShadowStrength")) {
+        overrideAmbientShadowStrength = atoi(value);
+        ALOGD("ambient shadow strength = 0x%x out of 0xff", overrideAmbientShadowStrength);
+        return;
+    } else if (!strcmp(name, "spotShadowStrength")) {
+        overrideSpotShadowStrength = atoi(value);
+        ALOGD("spot shadow strength = 0x%x out of 0xff", overrideSpotShadowStrength);
+        return;
+    }
+    ALOGD("failed overriding property %s to %s", name, value);
+}
+
+ProfileType Properties::getProfileType() {
+    if (CC_UNLIKELY(sDisableProfileBars && sProfileType == ProfileType::Bars))
+        return ProfileType::None;
+    return sProfileType;
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index a0312e1..cb5560f 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -19,12 +19,16 @@
 
 #include <cutils/properties.h>
 #include <stdlib.h>
+#include <utils/Singleton.h>
 
 /**
  * This file contains the list of system properties used to configure
  * the OpenGLRenderer.
  */
 
+namespace android {
+namespace uirenderer {
+
 ///////////////////////////////////////////////////////////////////////////////
 // Compile-time properties
 ///////////////////////////////////////////////////////////////////////////////
@@ -154,6 +158,21 @@
  */
 #define PROPERTY_DISABLE_DRAW_REORDER "debug.hwui.disable_draw_reorder"
 
+/**
+ * Setting this property will enable or disable the dropping of frames with
+ * empty damage. Default is "true".
+ */
+#define PROPERTY_SKIP_EMPTY_DAMAGE "debug.hwui.skip_empty_damage"
+
+/**
+ * Setting this property will enable usage of EGL_KHR_swap_buffers_with_damage
+ * See: https://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_swap_buffers_with_damage.txt
+ * Default is "false" temporarily
+ * TODO: Change to "true", make sure to remove the log in EglManager::swapBuffers
+ * before changing this to default to true!
+ */
+#define PROPERTY_SWAP_WITH_DAMAGE "debug.hwui.swap_with_damage"
+
 ///////////////////////////////////////////////////////////////////////////////
 // Runtime configuration properties
 ///////////////////////////////////////////////////////////////////////////////
@@ -253,12 +272,65 @@
 // Converts a number of kilo-bytes into bytes
 #define KB(s) s * 1024
 
-static inline DebugLevel readDebugLevel() {
-    char property[PROPERTY_VALUE_MAX];
-    if (property_get(PROPERTY_DEBUG, property, nullptr) > 0) {
-        return (DebugLevel) atoi(property);
-    }
-    return kDebugDisabled;
-}
+enum class ProfileType {
+    None,
+    Console,
+    Bars
+};
+
+enum class OverdrawColorSet {
+    Default = 0,
+    Deuteranomaly
+};
+
+enum class StencilClipDebug {
+    Hide,
+    ShowHighlight,
+    ShowRegion
+};
+
+/**
+ * Renderthread-only singleton which manages several static rendering properties. Most of these
+ * are driven by system properties which are queried once at initialization, and again if init()
+ * is called.
+ */
+class Properties {
+public:
+    static bool load();
+
+    static bool drawDeferDisabled;
+    static bool drawReorderDisabled;
+    static bool debugLayersUpdates;
+    static bool debugOverdraw;
+    static bool showDirtyRegions;
+    // TODO: Remove after stabilization period
+    static bool skipEmptyFrames;
+    // TODO: Remove after stabilization period
+    static bool swapBuffersWithDamage;
+
+    static DebugLevel debugLevel;
+    static OverdrawColorSet overdrawColorSet;
+    static StencilClipDebug debugStencilClip;
+
+    // Override the value for a subset of properties in this class
+    static void overrideProperty(const char* name, const char* value);
+
+    static float overrideLightRadius;
+    static float overrideLightPosY;
+    static float overrideLightPosZ;
+    static float overrideAmbientRatio;
+    static int overrideAmbientShadowStrength;
+    static int overrideSpotShadowStrength;
+
+    static ProfileType getProfileType();
+
+private:
+    static ProfileType sProfileType;
+    static bool sDisableProfileBars;
+
+}; // class Caches
+
+}; // namespace uirenderer
+}; // namespace android
 
 #endif // ANDROID_HWUI_PROPERTIES_H
diff --git a/libs/hwui/ResourceCache.cpp b/libs/hwui/ResourceCache.cpp
index d3b8d70..75d8134 100644
--- a/libs/hwui/ResourceCache.cpp
+++ b/libs/hwui/ResourceCache.cpp
@@ -59,21 +59,6 @@
     mLock.unlock();
 }
 
-const SkBitmap* ResourceCache::insert(const SkBitmap* bitmapResource) {
-    Mutex::Autolock _l(mLock);
-
-    BitmapKey bitmapKey(bitmapResource);
-    ssize_t index = mBitmapCache.indexOfKey(bitmapKey);
-    if (index == NAME_NOT_FOUND) {
-        SkBitmap* cachedBitmap = new SkBitmap(*bitmapResource);
-        index = mBitmapCache.add(bitmapKey, cachedBitmap);
-        return cachedBitmap;
-    }
-
-    mBitmapCache.keyAt(index).mRefCount++;
-    return mBitmapCache.valueAt(index);
-}
-
 void ResourceCache::incrementRefcount(void* resource, ResourceType resourceType) {
     Mutex::Autolock _l(mLock);
     incrementRefcountLocked(resource, resourceType);
@@ -98,11 +83,6 @@
     decrementRefcountLocked(resource);
 }
 
-void ResourceCache::decrementRefcount(const SkBitmap* bitmapResource) {
-    Mutex::Autolock _l(mLock);
-    decrementRefcountLocked(bitmapResource);
-}
-
 void ResourceCache::decrementRefcount(const Res_png_9patch* patchResource) {
     decrementRefcount((void*) patchResource);
 }
@@ -120,23 +100,6 @@
     }
 }
 
-void ResourceCache::decrementRefcountLocked(const SkBitmap* bitmapResource) {
-    BitmapKey bitmapKey(bitmapResource);
-    ssize_t index = mBitmapCache.indexOfKey(bitmapKey);
-
-    LOG_ALWAYS_FATAL_IF(index == NAME_NOT_FOUND,
-                    "Decrementing the reference of an untracked Bitmap");
-
-    const BitmapKey& cacheEntry = mBitmapCache.keyAt(index);
-    if (cacheEntry.mRefCount == 1) {
-        // delete the bitmap and remove it from the cache
-        delete mBitmapCache.valueAt(index);
-        mBitmapCache.removeItemsAt(index);
-    } else {
-        cacheEntry.mRefCount--;
-    }
-}
-
 void ResourceCache::decrementRefcountLocked(const Res_png_9patch* patchResource) {
     decrementRefcountLocked((void*) patchResource);
 }
@@ -190,38 +153,5 @@
     delete ref;
 }
 
-///////////////////////////////////////////////////////////////////////////////
-// Bitmap Key
-///////////////////////////////////////////////////////////////////////////////
-
-void BitmapKey::operator=(const BitmapKey& other) {
-    this->mRefCount = other.mRefCount;
-    this->mBitmapDimensions = other.mBitmapDimensions;
-    this->mPixelRefOrigin = other.mPixelRefOrigin;
-    this->mPixelRefStableID = other.mPixelRefStableID;
-}
-
-bool BitmapKey::operator==(const BitmapKey& other) const {
-    return mPixelRefStableID == other.mPixelRefStableID &&
-           mPixelRefOrigin == other.mPixelRefOrigin &&
-           mBitmapDimensions == other.mBitmapDimensions;
-}
-
-bool BitmapKey::operator<(const BitmapKey& other) const {
-    if (mPixelRefStableID != other.mPixelRefStableID) {
-        return mPixelRefStableID < other.mPixelRefStableID;
-    }
-    if (mPixelRefOrigin.x() != other.mPixelRefOrigin.x()) {
-        return mPixelRefOrigin.x() < other.mPixelRefOrigin.x();
-    }
-    if (mPixelRefOrigin.y() != other.mPixelRefOrigin.y()) {
-        return mPixelRefOrigin.y() < other.mPixelRefOrigin.y();
-    }
-    if (mBitmapDimensions.width() != other.mBitmapDimensions.width()) {
-        return mBitmapDimensions.width() < other.mBitmapDimensions.width();
-    }
-    return mBitmapDimensions.height() < other.mBitmapDimensions.height();
-}
-
 }; // namespace uirenderer
 }; // namespace android
diff --git a/libs/hwui/ResourceCache.h b/libs/hwui/ResourceCache.h
index fae55d1..4583c8d 100644
--- a/libs/hwui/ResourceCache.h
+++ b/libs/hwui/ResourceCache.h
@@ -51,37 +51,6 @@
     ResourceType resourceType;
 };
 
-class BitmapKey {
-public:
-    BitmapKey(const SkBitmap* bitmap)
-        : mRefCount(1)
-        , mBitmapDimensions(bitmap->dimensions())
-        , mPixelRefOrigin(bitmap->pixelRefOrigin())
-        , mPixelRefStableID(bitmap->pixelRef()->getStableID()) { }
-
-    void operator=(const BitmapKey& other);
-    bool operator==(const BitmapKey& other) const;
-    bool operator<(const BitmapKey& other) const;
-
-private:
-    // This constructor is only used by the KeyedVector implementation
-    BitmapKey()
-        : mRefCount(-1)
-        , mBitmapDimensions(SkISize::Make(0,0))
-        , mPixelRefOrigin(SkIPoint::Make(0,0))
-        , mPixelRefStableID(0) { }
-
-    // reference count of all HWUI object using this bitmap
-    mutable int mRefCount;
-
-    SkISize mBitmapDimensions;
-    SkIPoint mPixelRefOrigin;
-    uint32_t mPixelRefStableID;
-
-    friend class ResourceCache;
-    friend struct android::key_value_pair_t<BitmapKey, SkBitmap*>;
-};
-
 class ANDROID_API ResourceCache: public Singleton<ResourceCache> {
     ResourceCache();
     ~ResourceCache();
@@ -97,18 +66,10 @@
     void lock();
     void unlock();
 
-    /**
-     * The cache stores a copy of the provided resource or refs an existing resource
-     * if the bitmap has previously been inserted and returns the cached copy.
-     */
-    const SkBitmap* insert(const SkBitmap* resource);
-
     void incrementRefcount(const Res_png_9patch* resource);
 
-    void decrementRefcount(const SkBitmap* resource);
     void decrementRefcount(const Res_png_9patch* resource);
 
-    void decrementRefcountLocked(const SkBitmap* resource);
     void decrementRefcountLocked(const Res_png_9patch* resource);
 
     void destructor(Res_png_9patch* resource);
@@ -134,7 +95,6 @@
     mutable Mutex mLock;
 
     KeyedVector<const void*, ResourceReference*>* mCache;
-    KeyedVector<BitmapKey, SkBitmap*> mBitmapCache;
 };
 
 }; // namespace uirenderer
diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp
index 30d3f41..fb28531 100644
--- a/libs/hwui/ShadowTessellator.cpp
+++ b/libs/hwui/ShadowTessellator.cpp
@@ -20,11 +20,13 @@
 #include <math.h>
 #include <utils/Log.h>
 #include <utils/Trace.h>
+#include <utils/Vector.h>
 
 #include "AmbientShadow.h"
-#include "Caches.h"
+#include "Properties.h"
 #include "ShadowTessellator.h"
 #include "SpotShadow.h"
+#include "Vector.h"
 
 namespace android {
 namespace uirenderer {
@@ -40,9 +42,8 @@
     float heightFactor = 1.0f / 128;
     const float geomFactor = 64;
 
-    Caches& caches = Caches::getInstance();
-    if (CC_UNLIKELY(caches.propertyAmbientRatio > 0.0f)) {
-        heightFactor *= caches.propertyAmbientRatio;
+    if (CC_UNLIKELY(Properties::overrideAmbientRatio > 0.0f)) {
+        heightFactor *= Properties::overrideAmbientRatio;
     }
 
     Rect ambientShadowBounds(casterBounds);
@@ -66,14 +67,12 @@
         const Rect& casterBounds, const Rect& localClip, VertexBuffer& shadowVertexBuffer) {
     ATRACE_CALL();
 
-    Caches& caches = Caches::getInstance();
-
     Vector3 adjustedLightCenter(lightCenter);
-    if (CC_UNLIKELY(caches.propertyLightPosY > 0)) {
-        adjustedLightCenter.y = - caches.propertyLightPosY; // negated since this shifts up
+    if (CC_UNLIKELY(Properties::overrideLightPosY > 0)) {
+        adjustedLightCenter.y = - Properties::overrideLightPosY; // negated since this shifts up
     }
-    if (CC_UNLIKELY(caches.propertyLightPosZ > 0)) {
-        adjustedLightCenter.z = caches.propertyLightPosZ;
+    if (CC_UNLIKELY(Properties::overrideLightPosZ > 0)) {
+        adjustedLightCenter.z = Properties::overrideLightPosZ;
     }
 
 #if DEBUG_SHADOW
@@ -87,8 +86,8 @@
     reverseReceiverTransform.loadInverse(receiverTransform);
     reverseReceiverTransform.mapPoint3d(adjustedLightCenter);
 
-    if (CC_UNLIKELY(caches.propertyLightRadius > 0)) {
-        lightRadius = caches.propertyLightRadius;
+    if (CC_UNLIKELY(Properties::overrideLightRadius > 0)) {
+        lightRadius = Properties::overrideLightRadius;
     }
 
     // Now light and caster are both in local space, we will check whether
diff --git a/libs/hwui/TessellationCache.cpp b/libs/hwui/TessellationCache.cpp
index 7edb9fb..fc173f7 100644
--- a/libs/hwui/TessellationCache.cpp
+++ b/libs/hwui/TessellationCache.cpp
@@ -311,7 +311,7 @@
 
     mCache.setOnEntryRemovedListener(&mBufferRemovedListener);
     mShadowCache.setOnEntryRemovedListener(&mBufferPairRemovedListener);
-    mDebugEnabled = readDebugLevel() & kDebugCaches;
+    mDebugEnabled = Properties::debugLevel & kDebugCaches;
 }
 
 TessellationCache::~TessellationCache() {
diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp
index c2e88f3..8b1d4cb 100644
--- a/libs/hwui/TextDropShadowCache.cpp
+++ b/libs/hwui/TextDropShadowCache.cpp
@@ -123,7 +123,7 @@
 
 void TextDropShadowCache::init() {
     mCache.setOnEntryRemovedListener(this);
-    mDebugEnabled = readDebugLevel() & kDebugMoreCaches;
+    mDebugEnabled = Properties::debugLevel & kDebugMoreCaches;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index b911a0f..e59688c 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -66,7 +66,7 @@
     glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
     INIT_LOGD("    Maximum texture dimension is %d pixels", mMaxTextureSize);
 
-    mDebugEnabled = readDebugLevel() & kDebugCaches;
+    mDebugEnabled = Properties::debugLevel & kDebugCaches;
 }
 
 TextureCache::~TextureCache() {
diff --git a/libs/hwui/renderstate/RenderState.cpp b/libs/hwui/renderstate/RenderState.cpp
index 7b44d6d..e54fa5a 100644
--- a/libs/hwui/renderstate/RenderState.cpp
+++ b/libs/hwui/renderstate/RenderState.cpp
@@ -154,7 +154,7 @@
 }
 
 void RenderState::debugOverdraw(bool enable, bool clear) {
-    if (mCaches->debugOverdraw && mFramebuffer == 0) {
+    if (Properties::debugOverdraw && mFramebuffer == 0) {
         if (clear) {
             scissor().setEnabled(false);
             stencil().clear();
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index 3de3086..733e5e0 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -16,36 +16,25 @@
 
 #include "CanvasContext.h"
 
+#include "AnimationContext.h"
+#include "Caches.h"
+#include "DeferredLayerUpdater.h"
 #include "EglManager.h"
+#include "LayerRenderer.h"
+#include "OpenGLRenderer.h"
+#include "Properties.h"
 #include "RenderThread.h"
-#include "../AnimationContext.h"
-#include "../Caches.h"
-#include "../DeferredLayerUpdater.h"
-#include "../renderstate/RenderState.h"
-#include "../renderstate/Stencil.h"
-#include "../LayerRenderer.h"
-#include "../OpenGLRenderer.h"
+#include "renderstate/RenderState.h"
+#include "renderstate/Stencil.h"
 
 #include <algorithm>
+#include <strings.h>
 #include <cutils/properties.h>
 #include <private/hwui/DrawGlInfo.h>
-#include <strings.h>
 
 #define TRIM_MEMORY_COMPLETE 80
 #define TRIM_MEMORY_UI_HIDDEN 20
 
-#define PROPERTY_SKIP_EMPTY_DAMAGE "debug.hwui.skip_empty_damage"
-
-static bool sInitialized = false;
-static bool sSkipEmptyDamage = true;
-
-static void initGlobals() {
-    if (sInitialized) return;
-    sInitialized = true;
-    sSkipEmptyDamage = property_get_bool(PROPERTY_SKIP_EMPTY_DAMAGE,
-            sSkipEmptyDamage);
-}
-
 namespace android {
 namespace uirenderer {
 namespace renderthread {
@@ -58,9 +47,6 @@
         , mAnimationContext(contextFactory->createAnimationContext(mRenderThread.timeLord()))
         , mRootRenderNode(rootRenderNode)
         , mJankTracker(thread.timeLord().frameIntervalNanos()) {
-    // Done lazily at first draw instead of at library load to avoid
-    // running pre-zygote fork
-    initGlobals();
     mRenderThread.renderState().registerCanvasContext(this);
     mProfiler.setDensity(mRenderThread.mainDisplayInfo().density);
 }
@@ -106,8 +92,8 @@
     }
 }
 
-void CanvasContext::swapBuffers() {
-    if (CC_UNLIKELY(!mEglManager.swapBuffers(mEglSurface))) {
+void CanvasContext::swapBuffers(const SkRect& dirty, EGLint width, EGLint height) {
+    if (CC_UNLIKELY(!mEglManager.swapBuffers(mEglSurface, dirty, width, height))) {
         setSurface(nullptr);
     }
     mHaveNewSurface = false;
@@ -185,6 +171,7 @@
     }
 
     if (CC_UNLIKELY(!mNativeWindow.get())) {
+        mCurrentFrameInfo->addFlag(FrameInfoFlags::kSkippedFrame);
         info.out.canDrawThisFrame = false;
         return;
     }
@@ -197,6 +184,10 @@
             NATIVE_WINDOW_CONSUMER_RUNNING_BEHIND, &runningBehind);
     info.out.canDrawThisFrame = !runningBehind;
 
+    if (!info.out.canDrawThisFrame) {
+        mCurrentFrameInfo->addFlag(FrameInfoFlags::kSkippedFrame);
+    }
+
     if (info.out.hasAnimations || !info.out.canDrawThisFrame) {
         if (!info.out.requiresUiRedraw) {
             // If animationsNeedsRedraw is set don't bother posting for an RT anim
@@ -222,7 +213,7 @@
     SkRect dirty;
     mDamageAccumulator.finish(&dirty);
 
-    if (dirty.isEmpty() && sSkipEmptyDamage) {
+    if (dirty.isEmpty() && Properties::skipEmptyFrames) {
         mCurrentFrameInfo->addFlag(FrameInfoFlags::kSkippedFrame);
         return;
     }
@@ -267,7 +258,7 @@
     mCurrentFrameInfo->markSwapBuffers();
 
     if (drew) {
-        swapBuffers();
+        swapBuffers(dirty, width, height);
     } else {
         mEglManager.cancelFrame();
     }
@@ -298,8 +289,6 @@
     prepareTree(info, frameInfo);
     if (info.out.canDrawThisFrame) {
         draw();
-    } else {
-        mCurrentFrameInfo->addFlag(FrameInfoFlags::kSkippedFrame);
     }
 }
 
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index f5f1f54..8163b0f 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -29,6 +29,7 @@
 #include <cutils/compiler.h>
 #include <EGL/egl.h>
 #include <SkBitmap.h>
+#include <SkRect.h>
 #include <utils/Functor.h>
 #include <utils/Vector.h>
 
@@ -117,7 +118,7 @@
     friend class android::uirenderer::RenderState;
 
     void setSurface(ANativeWindow* window);
-    void swapBuffers();
+    void swapBuffers(const SkRect& dirty, EGLint width, EGLint height);
     void requireSurface();
 
     void requireGlContext();
diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp
index 3afca2f..6255f5e 100644
--- a/libs/hwui/renderthread/EglManager.cpp
+++ b/libs/hwui/renderthread/EglManager.cpp
@@ -16,9 +16,10 @@
 
 #include "EglManager.h"
 
-#include "../Caches.h"
-#include "../renderstate/RenderState.h"
+#include "Caches.h"
+#include "Properties.h"
 #include "RenderThread.h"
+#include "renderstate/RenderState.h"
 
 #include <cutils/log.h>
 #include <cutils/properties.h>
@@ -261,7 +262,8 @@
     mInFrame = true;
 }
 
-bool EglManager::swapBuffers(EGLSurface surface) {
+bool EglManager::swapBuffers(EGLSurface surface, const SkRect& dirty,
+        EGLint width, EGLint height) {
     mInFrame = false;
 
 #if WAIT_FOR_GPU_COMPLETION
@@ -271,7 +273,37 @@
     }
 #endif
 
+#ifdef EGL_KHR_swap_buffers_with_damage
+    if (CC_UNLIKELY(Properties::swapBuffersWithDamage)) {
+        SkIRect idirty;
+        dirty.roundOut(&idirty);
+        /*
+         * EGL_KHR_swap_buffers_with_damage spec states:
+         *
+         * The rectangles are specified relative to the bottom-left of the surface
+         * and the x and y components of each rectangle specify the bottom-left
+         * position of that rectangle.
+         *
+         * HWUI does everything with 0,0 being top-left, so need to map
+         * the rect
+         */
+        EGLint y = height - (idirty.y() + idirty.height());
+        // layout: {x, y, width, height}
+        EGLint rects[4] = { idirty.x(), y, idirty.width(), idirty.height() };
+        EGLint numrects = dirty.isEmpty() ? 0 : 1;
+        // TODO: Remove prior to enabling this path by default
+        ALOGD("Swap buffers with damage %d: %d, %d, %d, %d (src="
+                RECT_STRING ")",
+                dirty.isEmpty() ? 0 : 1, rects[0], rects[1], rects[2], rects[3],
+                SK_RECT_ARGS(dirty));
+        eglSwapBuffersWithDamageKHR(mEglDisplay, surface, rects, numrects);
+    } else {
+        eglSwapBuffers(mEglDisplay, surface);
+    }
+#else
     eglSwapBuffers(mEglDisplay, surface);
+#endif
+
     EGLint err = eglGetError();
     if (CC_LIKELY(err == EGL_SUCCESS)) {
         return true;
diff --git a/libs/hwui/renderthread/EglManager.h b/libs/hwui/renderthread/EglManager.h
index b1a18a9..0855516 100644
--- a/libs/hwui/renderthread/EglManager.h
+++ b/libs/hwui/renderthread/EglManager.h
@@ -18,6 +18,7 @@
 
 #include <cutils/compiler.h>
 #include <EGL/egl.h>
+#include <SkRect.h>
 #include <ui/GraphicBuffer.h>
 #include <utils/StrongPointer.h>
 
@@ -47,7 +48,7 @@
     // Returns true if the current surface changed, false if it was already current
     bool makeCurrent(EGLSurface surface);
     void beginFrame(EGLSurface surface, EGLint* width, EGLint* height);
-    bool swapBuffers(EGLSurface surface);
+    bool swapBuffers(EGLSurface surface, const SkRect& dirty, EGLint width, EGLint height);
     void cancelFrame();
 
     // Returns true iff the surface is now preserving buffers.
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index cc87241..17e47b9 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -112,9 +112,9 @@
 CREATE_BRIDGE1(loadSystemProperties, CanvasContext* context) {
     bool needsRedraw = false;
     if (Caches::hasInstance()) {
-        needsRedraw = Caches::getInstance().initProperties();
+        needsRedraw = Properties::load();
     }
-    if (args->context->profiler().loadSystemProperties()) {
+    if (args->context->profiler().consumeProperties()) {
         needsRedraw = true;
     }
     return (void*) needsRedraw;
@@ -135,7 +135,7 @@
     SETUP_TASK(setName);
     args->context = mContext;
     args->name = name;
-    post(task);
+    postAndWait(task); // block since name/value pointers owned by caller
 }
 
 CREATE_BRIDGE2(initialize, CanvasContext* context, ANativeWindow* window) {
@@ -293,11 +293,11 @@
     return (void*) success;
 }
 
-bool RenderProxy::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) {
+bool RenderProxy::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap& bitmap) {
     SETUP_TASK(copyLayerInto);
     args->context = mContext;
     args->layer = layer;
-    args->bitmap = bitmap;
+    args->bitmap = &bitmap;
     return (bool) postAndWait(task);
 }
 
@@ -331,7 +331,7 @@
     post(task);
 }
 
-CREATE_BRIDGE2(timMemory, RenderThread* thread, int level) {
+CREATE_BRIDGE2(trimMemory, RenderThread* thread, int level) {
     CanvasContext::trimMemory(*args->thread, args->level);
     return nullptr;
 }
@@ -340,13 +340,25 @@
     // Avoid creating a RenderThread to do a trimMemory.
     if (RenderThread::hasInstance()) {
         RenderThread& thread = RenderThread::getInstance();
-        SETUP_TASK(timMemory);
+        SETUP_TASK(trimMemory);
         args->thread = &thread;
         args->level = level;
         thread.queue(task);
     }
 }
 
+CREATE_BRIDGE2(overrideProperty, const char* name, const char* value) {
+    Properties::overrideProperty(args->name, args->value);
+    return nullptr;
+}
+
+void RenderProxy::overrideProperty(const char* name, const char* value) {
+    SETUP_TASK(overrideProperty);
+    args->name = name;
+    args->value = value;
+    staticPostAndWait(task); // expensive, but block here since name/value pointers owned by caller
+}
+
 CREATE_BRIDGE0(fence) {
     // Intentionally empty
     return nullptr;
@@ -383,8 +395,10 @@
     mRenderThread.queueAtFront(task);
 }
 
-CREATE_BRIDGE3(dumpProfileInfo, CanvasContext* context, int fd, int dumpFlags) {
+CREATE_BRIDGE4(dumpProfileInfo, CanvasContext* context, RenderThread* thread,
+        int fd, int dumpFlags) {
     args->context->profiler().dumpData(args->fd);
+    args->thread->jankTracker().dump(args->fd);
     if (args->dumpFlags & DumpFlags::kFrameStats) {
         args->context->dumpFrames(args->fd);
     }
@@ -397,11 +411,23 @@
 void RenderProxy::dumpProfileInfo(int fd, int dumpFlags) {
     SETUP_TASK(dumpProfileInfo);
     args->context = mContext;
+    args->thread = &mRenderThread;
     args->fd = fd;
     args->dumpFlags = dumpFlags;
     postAndWait(task);
 }
 
+CREATE_BRIDGE1(resetProfileInfo, CanvasContext* context) {
+    args->context->resetFrameStats();
+    return nullptr;
+}
+
+void RenderProxy::resetProfileInfo() {
+    SETUP_TASK(resetProfileInfo);
+    args->context = mContext;
+    postAndWait(task);
+}
+
 CREATE_BRIDGE2(dumpGraphicsMemory, int fd, RenderThread* thread) {
     args->thread->jankTracker().dump(args->fd);
 
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
index 29c6f08..31456cd 100644
--- a/libs/hwui/renderthread/RenderProxy.h
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -83,19 +83,22 @@
 
     ANDROID_API DeferredLayerUpdater* createTextureLayer();
     ANDROID_API void buildLayer(RenderNode* node);
-    ANDROID_API bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap);
+    ANDROID_API bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap& bitmap);
     ANDROID_API void pushLayerUpdate(DeferredLayerUpdater* layer);
     ANDROID_API void cancelLayerUpdate(DeferredLayerUpdater* layer);
     ANDROID_API void detachSurfaceTexture(DeferredLayerUpdater* layer);
 
     ANDROID_API void destroyHardwareResources();
     ANDROID_API static void trimMemory(int level);
+    ANDROID_API static void overrideProperty(const char* name, const char* value);
 
     ANDROID_API void fence();
     ANDROID_API void stopDrawing();
     ANDROID_API void notifyFramePending();
 
     ANDROID_API void dumpProfileInfo(int fd, int dumpFlags);
+    // Not exported, only used for testing
+    void resetProfileInfo();
     ANDROID_API static void dumpGraphicsMemory(int fd);
 
     ANDROID_API void setTextureAtlas(const sp<GraphicBuffer>& buffer, int64_t* map, size_t size);
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
index 3ac2976..64075f1 100644
--- a/libs/hwui/renderthread/RenderThread.cpp
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -144,6 +144,7 @@
         , mFrameCallbackTask(nullptr)
         , mRenderState(nullptr)
         , mEglManager(nullptr) {
+    Properties::load();
     mFrameCallbackTask = new DispatchFrameCallbacks(this);
     mLooper = new Looper(false);
     run("RenderThread");
diff --git a/libs/hwui/tests/TestContext.cpp b/libs/hwui/tests/TestContext.cpp
index 542bbae..3687a50 100644
--- a/libs/hwui/tests/TestContext.cpp
+++ b/libs/hwui/tests/TestContext.cpp
@@ -57,6 +57,10 @@
 }
 
 void TestContext::waitForVsync() {
+#if HWUI_NULL_GPU
+    return;
+#endif
+
     // Request vsync
     mDisplayEventReceiver.requestNextVsync();
 
@@ -71,4 +75,3 @@
 } // namespace test
 } // namespace uirenderer
 } // namespace android
-
diff --git a/libs/hwui/tests/how_to_run.txt b/libs/hwui/tests/how_to_run.txt
new file mode 100644
index 0000000..686cd78
--- /dev/null
+++ b/libs/hwui/tests/how_to_run.txt
@@ -0,0 +1,17 @@
+mmm -j8 frameworks/base/libs/hwui/tests/ &&
+    adb push $OUT/data/local/tmp/hwuitest /data/local/tmp/hwuitest &&
+    adb shell /data/local/tmp/hwuitest
+
+
+Command arguments:
+hwuitest [testname]
+
+Default test is 'shadowgrid'
+
+List of tests:
+
+shadowgrid: creates a grid of rounded rects that cast shadows, high CPU & GPU load
+
+rectgrid: creates a grid of 1x1 rects
+
+oval: draws 1 oval
diff --git a/libs/hwui/tests/main.cpp b/libs/hwui/tests/main.cpp
index 62782af..2f79c58 100644
--- a/libs/hwui/tests/main.cpp
+++ b/libs/hwui/tests/main.cpp
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-#include <stdio.h>
-
 #include <cutils/log.h>
 #include <gui/Surface.h>
 #include <ui/PixelFormat.h>
@@ -28,6 +26,9 @@
 
 #include "TestContext.h"
 
+#include <stdio.h>
+#include <unistd.h>
+
 using namespace android;
 using namespace android::uirenderer;
 using namespace android::uirenderer::renderthread;
@@ -57,13 +58,20 @@
 class TreeContentAnimation {
 public:
     virtual ~TreeContentAnimation() {}
-    virtual int getFrameCount() { return 150; }
+    int frameCount = 150;
+    virtual int getFrameCount() { return frameCount; }
+    virtual void setFrameCount(int fc) {
+        if (fc > 0) {
+            frameCount = fc;
+        }
+    }
     virtual void createContent(int width, int height, DisplayListCanvas* renderer) = 0;
     virtual void doFrame(int frameNr) = 0;
 
     template <class T>
-    static void run() {
+    static void run(int frameCount) {
         T animation;
+        animation.setFrameCount(frameCount);
 
         TestContext testContext;
 
@@ -93,16 +101,27 @@
         animation.createContent(width, height, renderer);
         endRecording(renderer, rootNode);
 
-        for (int i = 0; i < animation.getFrameCount(); i++) {
-#if !HWUI_NULL_GPU
+        // Do a few cold runs then reset the stats so that the caches are all hot
+        for (int i = 0; i < 3; i++) {
             testContext.waitForVsync();
-#endif
+            proxy->syncAndDrawFrame();
+        }
+        proxy->resetProfileInfo();
 
+        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())
+                    .setVsync(vsync, vsync);
             animation.doFrame(i);
             proxy->syncAndDrawFrame();
         }
 
+        proxy->dumpProfileInfo(STDOUT_FILENO, 0);
         rootNode->decStrong(nullptr);
     }
 };
@@ -125,9 +144,10 @@
         renderer->insertReorderBarrier(false);
     }
     void doFrame(int frameNr) override {
+        int curFrame = frameNr % 150;
         for (size_t ci = 0; ci < cards.size(); ci++) {
-            cards[ci]->mutateStagingProperties().setTranslationX(frameNr);
-            cards[ci]->mutateStagingProperties().setTranslationY(frameNr);
+            cards[ci]->mutateStagingProperties().setTranslationX(curFrame);
+            cards[ci]->mutateStagingProperties().setTranslationY(curFrame);
             cards[ci]->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y);
         }
     }
@@ -147,6 +167,47 @@
     }
 };
 
+class ShadowGrid2Animation : public TreeContentAnimation {
+public:
+    std::vector< sp<RenderNode> > cards;
+    void createContent(int width, int height, DisplayListCanvas* renderer) override {
+        renderer->drawColor(0xFFFFFFFF, SkXfermode::kSrcOver_Mode);
+        renderer->insertReorderBarrier(true);
+
+        for (int x = dp(8); x < (width - dp(58)); x += dp(58)) {
+            for (int y = dp(8); y < (height - dp(58)); y += dp(58)) {
+                sp<RenderNode> card = createCard(x, y, dp(50), dp(50));
+                renderer->drawRenderNode(card.get());
+                cards.push_back(card);
+            }
+        }
+
+        renderer->insertReorderBarrier(false);
+    }
+    void doFrame(int frameNr) override {
+        int curFrame = frameNr % 150;
+        for (size_t ci = 0; ci < cards.size(); ci++) {
+            cards[ci]->mutateStagingProperties().setTranslationX(curFrame);
+            cards[ci]->mutateStagingProperties().setTranslationY(curFrame);
+            cards[ci]->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y);
+        }
+    }
+private:
+    sp<RenderNode> createCard(int x, int y, int width, int height) {
+        sp<RenderNode> node = new RenderNode();
+        node->mutateStagingProperties().setLeftTopRightBottom(x, y, x + width, y + height);
+        node->mutateStagingProperties().setElevation(dp(16));
+        node->mutateStagingProperties().mutableOutline().setRoundRect(0, 0, width, height, dp(6), 1);
+        node->mutateStagingProperties().mutableOutline().setShouldClip(true);
+        node->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y | RenderNode::Z);
+
+        DisplayListCanvas* renderer = startRecording(node.get());
+        renderer->drawColor(0xFFEEEEEE, SkXfermode::kSrcOver_Mode);
+        endRecording(renderer, node.get());
+        return node;
+    }
+};
+
 class RectGridAnimation : public TreeContentAnimation {
 public:
     sp<RenderNode> card;
@@ -160,8 +221,9 @@
         renderer->insertReorderBarrier(false);
     }
     void doFrame(int frameNr) override {
-        card->mutateStagingProperties().setTranslationX(frameNr);
-        card->mutateStagingProperties().setTranslationY(frameNr);
+        int curFrame = frameNr % 150;
+        card->mutateStagingProperties().setTranslationX(curFrame);
+        card->mutateStagingProperties().setTranslationY(curFrame);
         card->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y);
     }
 private:
@@ -208,8 +270,9 @@
     }
 
     void doFrame(int frameNr) override {
-        card->mutateStagingProperties().setTranslationX(frameNr);
-        card->mutateStagingProperties().setTranslationY(frameNr);
+        int curFrame = frameNr % 150;
+        card->mutateStagingProperties().setTranslationX(curFrame);
+        card->mutateStagingProperties().setTranslationY(curFrame);
         card->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y);
     }
 private:
@@ -236,10 +299,11 @@
     }
 };
 
-typedef void (*testProc)();
+typedef void (*testProc)(int);
 
 std::map<const char*, testProc, cstr_cmp> gTestMap {
     {"shadowgrid", TreeContentAnimation::run<ShadowGridAnimation>},
+    {"shadowgrid2", TreeContentAnimation::run<ShadowGrid2Animation>},
     {"rectgrid", TreeContentAnimation::run<RectGridAnimation> },
     {"oval", TreeContentAnimation::run<OvalAnimation> },
 };
@@ -251,7 +315,28 @@
         printf("Error: couldn't find test %s\n", testName);
         return 1;
     }
-    proc();
+    int loopCount = 1;
+    if (argc > 2) {
+        loopCount = atoi(argv[2]);
+        if (!loopCount) {
+            printf("Invalid loop count!\n");
+            return 1;
+        }
+    }
+    int frameCount = 150;
+    if (argc > 3) {
+        frameCount = atoi(argv[3]);
+        if (frameCount < 1) {
+            printf("Invalid frame count!\n");
+            return 1;
+        }
+    }
+    if (loopCount < 0) {
+        loopCount = INT_MAX;
+    }
+    for (int i = 0; i < loopCount; i++) {
+        proc(frameCount);
+    }
     printf("Success!\n");
     return 0;
 }
diff --git a/libs/hwui/unit_tests/Android.mk b/libs/hwui/unit_tests/Android.mk
index 51601b0..917e646 100644
--- a/libs/hwui/unit_tests/Android.mk
+++ b/libs/hwui/unit_tests/Android.mk
@@ -27,6 +27,7 @@
 
 LOCAL_SRC_FILES += \
     unit_tests/ClipAreaTests.cpp \
+    unit_tests/DamageAccumulatorTests.cpp \
     unit_tests/LinearAllocatorTests.cpp \
     unit_tests/main.cpp
 
diff --git a/libs/hwui/unit_tests/DamageAccumulatorTests.cpp b/libs/hwui/unit_tests/DamageAccumulatorTests.cpp
new file mode 100644
index 0000000..c8d6004
--- /dev/null
+++ b/libs/hwui/unit_tests/DamageAccumulatorTests.cpp
@@ -0,0 +1,81 @@
+/*
+ * 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.
+ */
+
+#include <gtest/gtest.h>
+
+#include <DamageAccumulator.h>
+#include <Matrix.h>
+#include <utils/LinearAllocator.h>
+
+#include <SkRect.h>
+
+using namespace android;
+using namespace android::uirenderer;
+
+// Test that push & pop are propegating the dirty rect
+// There is no transformation of the dirty rect, the input is the same
+// as the output.
+TEST(DamageAccumulator, identity) {
+    DamageAccumulator da;
+    Matrix4 identity;
+    SkRect curDirty;
+    identity.loadIdentity();
+    da.pushTransform(&identity);
+    da.dirty(50, 50, 100, 100);
+    da.pushTransform(&identity);
+    da.peekAtDirty(&curDirty);
+    ASSERT_EQ(SkRect(), curDirty);
+    da.popTransform();
+    da.peekAtDirty(&curDirty);
+    ASSERT_EQ(SkRect::MakeLTRB(50, 50, 100, 100), curDirty);
+    da.popTransform();
+    da.finish(&curDirty);
+    ASSERT_EQ(SkRect::MakeLTRB(50, 50, 100, 100), curDirty);
+}
+
+// Test that transformation is happening at the correct levels via
+// peekAtDirty & popTransform. Just uses a simple translate to test this
+TEST(DamageAccumulator, translate) {
+    DamageAccumulator da;
+    Matrix4 translate;
+    SkRect curDirty;
+    translate.loadTranslate(25, 25, 0);
+    da.pushTransform(&translate);
+    da.dirty(50, 50, 100, 100);
+    da.peekAtDirty(&curDirty);
+    ASSERT_EQ(SkRect::MakeLTRB(50, 50, 100, 100), curDirty);
+    da.popTransform();
+    da.finish(&curDirty);
+    ASSERT_EQ(SkRect::MakeLTRB(75, 75, 125, 125), curDirty);
+}
+
+// Test that dirty rectangles are being unioned across "siblings
+TEST(DamageAccumulator, union) {
+    DamageAccumulator da;
+    Matrix4 identity;
+    SkRect curDirty;
+    identity.loadIdentity();
+    da.pushTransform(&identity);
+    da.pushTransform(&identity);
+    da.dirty(50, 50, 100, 100);
+    da.popTransform();
+    da.pushTransform(&identity);
+    da.dirty(150, 50, 200, 125);
+    da.popTransform();
+    da.popTransform();
+    da.finish(&curDirty);
+    ASSERT_EQ(SkRect::MakeLTRB(50, 50, 200, 125), curDirty);
+}
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 0eb4fdc..a3d04d9 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.location.ProviderProperties;
 
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.app.PendingIntent;
 import android.content.Context;
@@ -34,6 +35,10 @@
 import java.util.HashMap;
 import java.util.List;
 
+import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
+import static android.Manifest.permission.ACCESS_FINE_LOCATION;
+import static android.Manifest.permission.ACCESS_MOCK_LOCATION;
+
 /**
  * This class provides access to the system location services.  These
  * services allow applications to obtain periodic updates of the
@@ -449,6 +454,7 @@
      * @throws RuntimeException if the calling thread has no Looper
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestLocationUpdates(String provider, long minTime, float minDistance,
             LocationListener listener) {
         checkProvider(provider);
@@ -480,6 +486,7 @@
      * @throws IllegalArgumentException if listener is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestLocationUpdates(String provider, long minTime, float minDistance,
             LocationListener listener, Looper looper) {
         checkProvider(provider);
@@ -512,6 +519,7 @@
      * @throws IllegalArgumentException if listener is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestLocationUpdates(long minTime, float minDistance, Criteria criteria,
             LocationListener listener, Looper looper) {
         checkCriteria(criteria);
@@ -539,6 +547,7 @@
      * @throws IllegalArgumentException if intent is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestLocationUpdates(String provider, long minTime, float minDistance,
             PendingIntent intent) {
         checkProvider(provider);
@@ -640,6 +649,7 @@
      * @throws IllegalArgumentException if intent is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestLocationUpdates(long minTime, float minDistance, Criteria criteria,
             PendingIntent intent) {
         checkCriteria(criteria);
@@ -669,6 +679,7 @@
      * @throws IllegalArgumentException if listener is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestSingleUpdate(String provider, LocationListener listener, Looper looper) {
         checkProvider(provider);
         checkListener(listener);
@@ -698,6 +709,7 @@
      * @throws IllegalArgumentException if listener is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestSingleUpdate(Criteria criteria, LocationListener listener, Looper looper) {
         checkCriteria(criteria);
         checkListener(listener);
@@ -720,6 +732,7 @@
      * @throws IllegalArgumentException if intent is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestSingleUpdate(String provider, PendingIntent intent) {
         checkProvider(provider);
         checkPendingIntent(intent);
@@ -743,6 +756,7 @@
      * @throws IllegalArgumentException if intent is null
      * @throws SecurityException if no suitable permission is present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void requestSingleUpdate(Criteria criteria, PendingIntent intent) {
         checkCriteria(criteria);
         checkPendingIntent(intent);
@@ -879,6 +893,7 @@
      * @param listener listener object that no longer needs location updates
      * @throws IllegalArgumentException if listener is null
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void removeUpdates(LocationListener listener) {
         checkListener(listener);
         String packageName = mContext.getPackageName();
@@ -962,6 +977,7 @@
      * @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
      * permission is not present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void addProximityAlert(double latitude, double longitude, float radius, long expiration,
             PendingIntent intent) {
         checkPendingIntent(intent);
@@ -1012,6 +1028,7 @@
      *
      * @hide
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void addGeofence(LocationRequest request, Geofence fence, PendingIntent intent) {
         checkPendingIntent(intent);
         checkGeofence(fence);
@@ -1039,6 +1056,7 @@
      * @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
      * permission is not present
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void removeProximityAlert(PendingIntent intent) {
         checkPendingIntent(intent);
         String packageName = mContext.getPackageName();
@@ -1066,6 +1084,7 @@
      *
      * @hide
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void removeGeofence(Geofence fence, PendingIntent intent) {
         checkPendingIntent(intent);
         checkGeofence(fence);
@@ -1089,6 +1108,7 @@
      *
      * @hide
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public void removeAllGeofences(PendingIntent intent) {
         checkPendingIntent(intent);
         String packageName = mContext.getPackageName();
@@ -1174,6 +1194,7 @@
      * @throws SecurityException if no suitable permission is present
      * @throws IllegalArgumentException if provider is null or doesn't exist
      */
+    @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
     public Location getLastKnownLocation(String provider) {
         checkProvider(provider);
         String packageName = mContext.getPackageName();
@@ -1202,6 +1223,7 @@
      * Settings.Secure.ALLOW_MOCK_LOCATION} system setting is not enabled
      * @throws IllegalArgumentException if a provider with the given name already exists
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void addTestProvider(String name, boolean requiresNetwork, boolean requiresSatellite,
             boolean requiresCell, boolean hasMonetaryCost, boolean supportsAltitude,
             boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy) {
@@ -1229,6 +1251,7 @@
      * Settings.Secure.ALLOW_MOCK_LOCATION}} system setting is not enabled
      * @throws IllegalArgumentException if no provider with the given name exists
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void removeTestProvider(String provider) {
         try {
             mService.removeTestProvider(provider);
@@ -1253,6 +1276,7 @@
      * @throws IllegalArgumentException if no provider with the given name exists
      * @throws IllegalArgumentException if the location is incomplete
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void setTestProviderLocation(String provider, Location loc) {
         if (!loc.isComplete()) {
             IllegalArgumentException e = new IllegalArgumentException(
@@ -1284,6 +1308,7 @@
      * Settings.Secure.ALLOW_MOCK_LOCATION}} system setting is not enabled
      * @throws IllegalArgumentException if no provider with the given name exists
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void clearTestProviderLocation(String provider) {
         try {
             mService.clearTestProviderLocation(provider);
@@ -1304,6 +1329,7 @@
      * Settings.Secure.ALLOW_MOCK_LOCATION}} system setting is not enabled
      * @throws IllegalArgumentException if no provider with the given name exists
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void setTestProviderEnabled(String provider, boolean enabled) {
         try {
             mService.setTestProviderEnabled(provider, enabled);
@@ -1322,6 +1348,7 @@
      * Settings.Secure.ALLOW_MOCK_LOCATION}} system setting is not enabled
      * @throws IllegalArgumentException if no provider with the given name exists
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void clearTestProviderEnabled(String provider) {
         try {
             mService.clearTestProviderEnabled(provider);
@@ -1344,6 +1371,7 @@
      * Settings.Secure.ALLOW_MOCK_LOCATION}} system setting is not enabled
      * @throws IllegalArgumentException if no provider with the given name exists
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void setTestProviderStatus(String provider, int status, Bundle extras, long updateTime) {
         try {
             mService.setTestProviderStatus(provider, status, extras, updateTime);
@@ -1362,6 +1390,7 @@
      * Settings.Secure.ALLOW_MOCK_LOCATION}} system setting is not enabled
      * @throws IllegalArgumentException if no provider with the given name exists
      */
+    @RequiresPermission(value = ACCESS_MOCK_LOCATION, conditional = true)
     public void clearTestProviderStatus(String provider) {
         try {
             mService.clearTestProviderStatus(provider);
@@ -1492,6 +1521,7 @@
      *
      * @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
      */
+    @RequiresPermission(ACCESS_FINE_LOCATION)
     public boolean addGpsStatusListener(GpsStatus.Listener listener) {
         boolean result;
 
@@ -1538,6 +1568,7 @@
      *
      * @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
      */
+    @RequiresPermission(ACCESS_FINE_LOCATION)
     public boolean addNmeaListener(GpsStatus.NmeaListener listener) {
         boolean result;
 
diff --git a/media/java/android/media/AudioDeviceInfo.java b/media/java/android/media/AudioDeviceInfo.java
index d58b1d1..566f8dc 100644
--- a/media/java/android/media/AudioDeviceInfo.java
+++ b/media/java/android/media/AudioDeviceInfo.java
@@ -21,7 +21,7 @@
 /**
  * Class to provide information about the audio devices.
  */
-public class AudioDeviceInfo {
+public final class AudioDeviceInfo {
 
     /**
      * A device type associated with an unknown or uninitialized device.
@@ -112,7 +112,6 @@
     }
 
     /**
-     * @hide
      * @return The internal device ID.
      */
     public int getId() {
@@ -122,15 +121,15 @@
     /**
      * @return The human-readable name of the audio device.
      */
-    public String getName() {
+    public CharSequence getName() {
         return mPort.name();
     }
 
     /**
+     * @hide
      * @return The "address" string of the device. This generally contains device-specific
      * parameters.
      */
-    // TODO Is there a compelling reason to expose this?
     public String getAddress() {
         return mPort.address();
     }
@@ -157,15 +156,18 @@
     }
 
     /**
-     * @return An array of channel masks supported by the audio device (defined in
-     * AudioFormat.java).
+     * @return An array of channel masks ({@link AudioFormat#CHANNEL_IN_STEREO},
+     * {@link AudioFormat#CHANNEL_OUT_7POINT1) for which this audio device can be configured.
+     *
+     * @see AudioFormat
      */
     public int[] getChannelMasks() {
         return mPort.channelMasks();
     }
 
     /**
-     * @return An array of channel counts supported by the audio device.
+     * @return An array of channel counts (1, 2, 4....) for which this audio device
+     * can be configured.
      */
     public int[] getChannelCounts() {
         int[] masks = getChannelMasks();
@@ -179,8 +181,10 @@
     }
 
     /**
-     * @return An array of audio format IDs supported by the audio device (defined in
-     * AudioFormat.java)
+     * @return An array of audio format IDs (@link AudioFormat#ENCODING_PCM_16BIT,
+     * {@link AudioFormat#ENCODING_PCM_FLOAT}...) supported by the audio device.
+     *
+     * @see AudioFormat
      */
     public int[] getFormats() {
         return mPort.formats();
diff --git a/media/java/android/media/AudioDevicePort.java b/media/java/android/media/AudioDevicePort.java
index 82da27d..c078260 100644
--- a/media/java/android/media/AudioDevicePort.java
+++ b/media/java/android/media/AudioDevicePort.java
@@ -83,6 +83,16 @@
         if (o == null || !(o instanceof AudioDevicePort)) {
             return false;
         }
+        AudioDevicePort other = (AudioDevicePort)o;
+        if (mType != other.type()) {
+            return false;
+        }
+        if (mAddress == null && other.address() != null) {
+            return false;
+        }
+        if (!mAddress.equals(other.address())) {
+            return false;
+        }
         return super.equals(o);
     }
 
diff --git a/media/java/android/media/AudioDevicesManager.java b/media/java/android/media/AudioDevicesManager.java
deleted file mode 100644
index ca238d7..0000000
--- a/media/java/android/media/AudioDevicesManager.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-import android.content.Context;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.util.ArrayMap;
-import android.util.Pair;
-import android.util.Slog;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * AudioDevicesManager implements the Android Media Audio device enumeration and notification
- * functionality.  This functionality is in two comlementary parts.
- * <ol>
- * <li>{@link AudioDevicesManager#listDevices(int)} gets the list of current audio devices
- * </li>
- * <li>{@link AudioDevicesManager#addOnAudioDeviceConnectionListener(OnAudioDeviceConnectionListener, android.os.Handler)}
- *  provides a mechanism for applications to be informed of audio device connect/disconnect events.
- * </li>
- * </ol>
- */
-public class AudioDevicesManager {
-
-    private static String TAG = "AudioDevicesManager";
-
-    private static boolean DEBUG = false;
-
-    private AudioManager mAudioManager = null;
-
-    private OnAmPortUpdateListener mPortListener = null;
-
-    /**
-     * The message sent to apps when the contents of the device list changes if they provide
-     * a {#link Handler} object to addOnAudioDeviceConnectionListener().
-     */
-    private final static int MSG_DEVICES_LIST_CHANGE = 0;
-
-    private ArrayMap<OnAudioDeviceConnectionListener, NativeEventHandlerDelegate>
-        mDeviceConnectionListeners =
-            new ArrayMap<OnAudioDeviceConnectionListener, NativeEventHandlerDelegate>();
-
-    /**
-     * @hide
-     * The AudioDevicesManager class is used to enumerate the physical audio devices connected
-     * to the system.  See also {@link AudioDeviceInfo}.
-     */
-    public AudioDevicesManager(Context context) {
-        mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
-        mPortListener = new OnAmPortUpdateListener();
-        mAudioManager.registerAudioPortUpdateListener(mPortListener);
-    }
-
-    /**
-     * Specifies to the {@link AudioDevicesManager#listDevices(int)} method to include
-     * source (i.e. input) audio devices.
-     */
-    public static final int LIST_DEVICES_INPUTS    = 0x0001;
-
-    /**
-     * Specifies to the {@link AudioDevicesManager#listDevices(int)} method to include
-     * sink (i.e. output) audio devices.
-     */
-    public static final int LIST_DEVICES_OUTPUTS   = 0x0002;
-
-    /**
-     * Specifies to the {@link AudioDevicesManager#listDevices(int)} method to include both
-     * source and sink devices.
-     */
-    public static final int LIST_DEVICES_ALL = LIST_DEVICES_OUTPUTS | LIST_DEVICES_INPUTS;
-
-    /**
-     * Determines if a given AudioDevicePort meets the specified filter criteria.
-     * @param port  The port to test.
-     * @param flags A set of bitflags specifying the criteria to test.
-     * @see {@link LIST_DEVICES_OUTPUTS} and {@link LIST_DEVICES_INPUTS}
-     **/
-    private boolean checkFlags(AudioDevicePort port, int flags) {
-        return port.role() == AudioPort.ROLE_SINK && (flags & LIST_DEVICES_OUTPUTS) != 0 ||
-               port.role() == AudioPort.ROLE_SOURCE && (flags & LIST_DEVICES_INPUTS) != 0;
-    }
-
-    /**
-     * Generates a list of AudioDeviceInfo objects corresponding to the audio devices currently
-     * connected to the system and meeting the criteria specified in the <code>flags</code>
-     * parameter.
-     * @param flags A set of bitflags specifying the criteria to test.
-     * @see {@link LIST_DEVICES_OUTPUTS}, {@link LIST_DEVICES_INPUTS} and {@link LIST_DEVICES_ALL}.
-     * @return A (possibly zero-length) array of AudioDeviceInfo objects.
-     */
-    public AudioDeviceInfo[] listDevices(int flags) {
-        ArrayList<AudioDevicePort> ports = new ArrayList<AudioDevicePort>();
-        int status = mAudioManager.listAudioDevicePorts(ports);
-        if (status != AudioManager.SUCCESS) {
-            // fail and bail!
-            return new AudioDeviceInfo[0];
-        }
-
-        // figure out how many AudioDeviceInfo we need space for
-        int numRecs = 0;
-        for (AudioDevicePort port : ports) {
-            if (checkFlags(port, flags)) {
-                numRecs++;
-            }
-        }
-
-        // Now load them up
-        AudioDeviceInfo[] deviceList = new AudioDeviceInfo[numRecs];
-        int slot = 0;
-        for (AudioDevicePort port : ports) {
-            if (checkFlags(port, flags)) {
-                deviceList[slot++] = new AudioDeviceInfo(port);
-            }
-        }
-
-        return deviceList;
-    }
-
-    /**
-     * Adds an {@link OnAudioDeviceConnectionListener} to receive notifications of changes
-     * to the set of connected audio devices.
-     */
-    public void addOnAudioDeviceConnectionListener(OnAudioDeviceConnectionListener listener,
-            android.os.Handler handler) {
-        if (listener != null && !mDeviceConnectionListeners.containsKey(listener)) {
-            synchronized (mDeviceConnectionListeners) {
-                mDeviceConnectionListeners.put(
-                    listener, new NativeEventHandlerDelegate(listener, handler));
-            }
-        }
-    }
-
-    /**
-     * Removes an {@link OnAudioDeviceConnectionListener} which has been previously registered
-     * to receive notifications of changes to the set of connected audio devices.
-     */
-    public void removeOnAudioDeviceConnectionListener(OnAudioDeviceConnectionListener listener) {
-        synchronized (mDeviceConnectionListeners) {
-            if (mDeviceConnectionListeners.containsKey(listener)) {
-                mDeviceConnectionListeners.remove(listener);
-            }
-        }
-    }
-
-    /**
-     * Sends device list change notification to all listeners.
-     */
-    private void broadcastDeviceListChange() {
-        Collection<NativeEventHandlerDelegate> values;
-        synchronized (mDeviceConnectionListeners) {
-            values = mDeviceConnectionListeners.values();
-        }
-        for(NativeEventHandlerDelegate delegate : values) {
-            Handler handler = delegate.getHandler();
-            if (handler != null) {
-                handler.sendEmptyMessage(MSG_DEVICES_LIST_CHANGE);
-            }
-        }
-    }
-
-    /**
-     * Handles Port list update notifications from the AudioManager
-     */
-    private class OnAmPortUpdateListener implements AudioManager.OnAudioPortUpdateListener {
-        static final String TAG = "OnAmPortUpdateListener";
-        public void onAudioPortListUpdate(AudioPort[] portList) {
-            broadcastDeviceListChange();
-        }
-
-        /**
-         * Callback method called upon audio patch list update.
-         * @param patchList the updated list of audio patches
-         */
-        public void onAudioPatchListUpdate(AudioPatch[] patchList) {
-            if (DEBUG) {
-                Slog.d(TAG, "onAudioPatchListUpdate() " + patchList.length + " patches.");
-            }
-        }
-
-        /**
-         * Callback method called when the mediaserver dies
-         */
-        public void onServiceDied() {
-            if (DEBUG) {
-                Slog.i(TAG, "onServiceDied()");
-            }
-
-            broadcastDeviceListChange();
-        }
-    }
-
-    //---------------------------------------------------------
-    // Inner classes
-    //--------------------
-    /**
-     * Helper class to handle the forwarding of native events to the appropriate listener
-     * (potentially) handled in a different thread.
-     */
-    private class NativeEventHandlerDelegate {
-        private final Handler mHandler;
-
-        NativeEventHandlerDelegate(final OnAudioDeviceConnectionListener listener,
-                                   Handler handler) {
-            // find the looper for our new event handler
-            Looper looper;
-            if (handler != null) {
-                looper = handler.getLooper();
-            } else {
-                // no given handler, use the looper the addListener call was called in
-                looper = Looper.getMainLooper();
-            }
-
-            // construct the event handler with this looper
-            if (looper != null) {
-                // implement the event handler delegate
-                mHandler = new Handler(looper) {
-                    @Override
-                    public void handleMessage(Message msg) {
-                        switch(msg.what) {
-                        case MSG_DEVICES_LIST_CHANGE:
-                            // call the OnAudioDeviceConnectionListener
-                            if (listener != null) {
-                                listener.onAudioDeviceConnection();
-                            }
-                            break;
-                        default:
-                            Slog.e(TAG, "Unknown native event type: " + msg.what);
-                            break;
-                        }
-                    }
-                };
-            } else {
-                mHandler = null;
-            }
-        }
-
-        Handler getHandler() {
-            return mHandler;
-        }
-    }
-}
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index eeac69a..cba83f9 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -42,10 +42,13 @@
 import android.os.SystemClock;
 import android.os.ServiceManager;
 import android.provider.Settings;
+import android.util.ArrayMap;
 import android.util.Log;
+import android.util.Pair;
 import android.view.KeyEvent;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 
@@ -57,7 +60,8 @@
  */
 public class AudioManager {
 
-    private final Context mApplicationContext;
+    private Context mOriginalContext;
+    private Context mApplicationContext;
     private long mVolumeKeyUpTime;
     private final boolean mUseVolumeKeySounds;
     private final boolean mUseFixedVolume;
@@ -621,12 +625,34 @@
      * @hide
      */
     public AudioManager(Context context) {
-        mApplicationContext = context;
-        mUseVolumeKeySounds = mApplicationContext.getResources().getBoolean(
+        setContext(context);
+        mUseVolumeKeySounds = getContext().getResources().getBoolean(
                 com.android.internal.R.bool.config_useVolumeKeySounds);
-        mUseFixedVolume = mApplicationContext.getResources().getBoolean(
+        mUseFixedVolume = getContext().getResources().getBoolean(
                 com.android.internal.R.bool.config_useFixedVolume);
         sAudioPortEventHandler.init();
+
+        mPortListener = new OnAmPortUpdateListener();
+        registerAudioPortUpdateListener(mPortListener);
+    }
+
+    private Context getContext() {
+        if (mApplicationContext == null) {
+            setContext(mOriginalContext);
+        }
+        if (mApplicationContext != null) {
+            return mApplicationContext;
+        }
+        return mOriginalContext;
+    }
+
+    private void setContext(Context context) {
+        mApplicationContext = context.getApplicationContext();
+        if (mApplicationContext != null) {
+            mOriginalContext = null;
+        } else {
+            mOriginalContext = context;
+        }
     }
 
     private static IAudioService getService()
@@ -663,7 +689,7 @@
      *     or {@link KeyEvent#KEYCODE_MEDIA_AUDIO_TRACK}.
      */
     public void dispatchMediaKeyEvent(KeyEvent keyEvent) {
-        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
+        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
         helper.sendMediaButtonEvent(keyEvent, false);
     }
 
@@ -709,7 +735,7 @@
                 break;
             case KeyEvent.KEYCODE_VOLUME_MUTE:
                 if (event.getRepeatCount() == 0) {
-                    MediaSessionLegacyHelper.getHelper(mApplicationContext)
+                    MediaSessionLegacyHelper.getHelper(getContext())
                             .sendVolumeKeyEvent(event, false);
                 }
                 break;
@@ -737,7 +763,7 @@
                 mVolumeKeyUpTime = SystemClock.uptimeMillis();
                 break;
             case KeyEvent.KEYCODE_VOLUME_MUTE:
-                MediaSessionLegacyHelper.getHelper(mApplicationContext)
+                MediaSessionLegacyHelper.getHelper(getContext())
                         .sendVolumeKeyEvent(event, false);
                 break;
         }
@@ -783,7 +809,7 @@
         IAudioService service = getService();
         try {
             service.adjustStreamVolume(streamType, direction, flags,
-                    mApplicationContext.getOpPackageName());
+                    getContext().getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in adjustStreamVolume", e);
         }
@@ -813,7 +839,7 @@
      * @see #isVolumeFixed()
      */
     public void adjustVolume(int direction, int flags) {
-        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
+        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
         helper.sendAdjustVolumeBy(USE_DEFAULT_STREAM_TYPE, direction, flags);
     }
 
@@ -842,7 +868,7 @@
      * @see #isVolumeFixed()
      */
     public void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags) {
-        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
+        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
         helper.sendAdjustVolumeBy(suggestedStreamType, direction, flags);
     }
 
@@ -850,7 +876,7 @@
     public void setMasterMute(boolean mute, int flags) {
         IAudioService service = getService();
         try {
-            service.setMasterMute(mute, flags, mApplicationContext.getOpPackageName());
+            service.setMasterMute(mute, flags, getContext().getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in setMasterMute", e);
         }
@@ -997,7 +1023,7 @@
         }
         IAudioService service = getService();
         try {
-            service.setRingerModeExternal(ringerMode, mApplicationContext.getOpPackageName());
+            service.setRingerModeExternal(ringerMode, getContext().getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in setRingerMode", e);
         }
@@ -1018,7 +1044,7 @@
     public void setStreamVolume(int streamType, int index, int flags) {
         IAudioService service = getService();
         try {
-            service.setStreamVolume(streamType, index, flags, mApplicationContext.getOpPackageName());
+            service.setStreamVolume(streamType, index, flags, getContext().getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in setStreamVolume", e);
         }
@@ -1331,7 +1357,7 @@
      * @see #startBluetoothSco()
     */
     public boolean isBluetoothScoAvailableOffCall() {
-        return mApplicationContext.getResources().getBoolean(
+        return getContext().getResources().getBoolean(
                com.android.internal.R.bool.config_bluetooth_sco_off_call);
     }
 
@@ -1384,7 +1410,7 @@
         IAudioService service = getService();
         try {
             service.startBluetoothSco(mICallBack,
-                    mApplicationContext.getApplicationInfo().targetSdkVersion);
+                    getContext().getApplicationInfo().targetSdkVersion);
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in startBluetoothSco", e);
         }
@@ -1532,7 +1558,7 @@
     public void setMicrophoneMute(boolean on){
         IAudioService service = getService();
         try {
-            service.setMicrophoneMute(on, mApplicationContext.getOpPackageName());
+            service.setMicrophoneMute(on, getContext().getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in setMicrophoneMute", e);
         }
@@ -1963,7 +1989,7 @@
      * Settings has an in memory cache, so this is fast.
      */
     private boolean querySoundEffectsEnabled(int user) {
-        return Settings.System.getIntForUser(mApplicationContext.getContentResolver(),
+        return Settings.System.getIntForUser(getContext().getContentResolver(),
                 Settings.System.SOUND_EFFECTS_ENABLED, 0, user) != 0;
     }
 
@@ -2375,7 +2401,7 @@
         try {
             status = service.requestAudioFocus(requestAttributes, durationHint, mICallBack,
                     mAudioFocusDispatcher, getIdForAudioFocusListener(l),
-                    mApplicationContext.getOpPackageName() /* package name */, flags,
+                    getContext().getOpPackageName() /* package name */, flags,
                     ap != null ? ap.cb() : null);
         } catch (RemoteException e) {
             Log.e(TAG, "Can't call requestAudioFocus() on AudioService:", e);
@@ -2400,7 +2426,7 @@
                         .setInternalLegacyStreamType(streamType).build(),
                     durationHint, mICallBack, null,
                     AudioSystem.IN_VOICE_COMM_FOCUS_ID,
-                    mApplicationContext.getOpPackageName(),
+                    getContext().getOpPackageName(),
                     AUDIOFOCUS_FLAG_LOCK,
                     null /* policy token */);
         } catch (RemoteException e) {
@@ -2469,7 +2495,7 @@
         if (eventReceiver == null) {
             return;
         }
-        if (!eventReceiver.getPackageName().equals(mApplicationContext.getPackageName())) {
+        if (!eventReceiver.getPackageName().equals(getContext().getPackageName())) {
             Log.e(TAG, "registerMediaButtonEventReceiver() error: " +
                     "receiver and context package names don't match");
             return;
@@ -2478,7 +2504,7 @@
         Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
         //     the associated intent will be handled by the component being registered
         mediaButtonIntent.setComponent(eventReceiver);
-        PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext,
+        PendingIntent pi = PendingIntent.getBroadcast(getContext(),
                 0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
         registerMediaButtonIntent(pi, eventReceiver);
     }
@@ -2512,8 +2538,8 @@
             Log.e(TAG, "Cannot call registerMediaButtonIntent() with a null parameter");
             return;
         }
-        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
-        helper.addMediaButtonListener(pi, eventReceiver, mApplicationContext);
+        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
+        helper.addMediaButtonListener(pi, eventReceiver, getContext());
     }
 
     /**
@@ -2531,7 +2557,7 @@
         Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
         //     the associated intent will be handled by the component being registered
         mediaButtonIntent.setComponent(eventReceiver);
-        PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext,
+        PendingIntent pi = PendingIntent.getBroadcast(getContext(),
                 0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
         unregisterMediaButtonIntent(pi);
     }
@@ -2554,7 +2580,7 @@
      * @hide
      */
     public void unregisterMediaButtonIntent(PendingIntent pi) {
-        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
+        MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
         helper.removeMediaButtonListener(pi);
     }
 
@@ -2571,7 +2597,7 @@
         if ((rcClient == null) || (rcClient.getRcMediaIntent() == null)) {
             return;
         }
-        rcClient.registerWithSession(MediaSessionLegacyHelper.getHelper(mApplicationContext));
+        rcClient.registerWithSession(MediaSessionLegacyHelper.getHelper(getContext()));
     }
 
     /**
@@ -2586,7 +2612,7 @@
         if ((rcClient == null) || (rcClient.getRcMediaIntent() == null)) {
             return;
         }
-        rcClient.unregisterWithSession(MediaSessionLegacyHelper.getHelper(mApplicationContext));
+        rcClient.unregisterWithSession(MediaSessionLegacyHelper.getHelper(getContext()));
     }
 
     /**
@@ -3280,7 +3306,7 @@
      */
     public void setRingerModeInternal(int ringerMode) {
         try {
-            getService().setRingerModeInternal(ringerMode, mApplicationContext.getOpPackageName());
+            getService().setRingerModeInternal(ringerMode, getContext().getOpPackageName());
         } catch (RemoteException e) {
             Log.w(TAG, "Error calling setRingerModeInternal", e);
         }
@@ -3381,8 +3407,18 @@
      * @param ports An AudioPort ArrayList where the list will be returned.
      * @hide
      */
-    public int listAudioPorts(ArrayList<AudioPort> ports) {
-        return updateAudioPortCache(ports, null);
+    public static int listAudioPorts(ArrayList<AudioPort> ports) {
+        return updateAudioPortCache(ports, null, null);
+    }
+
+    /**
+     * Returns a list of descriptors for all audio ports managed by the audio framework as
+     * it was before the last update calback.
+     * @param ports An AudioPort ArrayList where the list will be returned.
+     * @hide
+     */
+    public static int listPreviousAudioPorts(ArrayList<AudioPort> ports) {
+        return updateAudioPortCache(null, null, ports);
     }
 
     /**
@@ -3390,21 +3426,46 @@
      * @see listAudioPorts(ArrayList<AudioPort>)
      * @hide
      */
-    public int listAudioDevicePorts(ArrayList<AudioDevicePort> devices) {
+    public static int listAudioDevicePorts(ArrayList<AudioDevicePort> devices) {
+        if (devices == null) {
+            return ERROR_BAD_VALUE;
+        }
         ArrayList<AudioPort> ports = new ArrayList<AudioPort>();
-        int status = updateAudioPortCache(ports, null);
+        int status = updateAudioPortCache(ports, null, null);
         if (status == SUCCESS) {
-            devices.clear();
-            for (int i = 0; i < ports.size(); i++) {
-                if (ports.get(i) instanceof AudioDevicePort) {
-                    devices.add((AudioDevicePort)ports.get(i));
-                }
-            }
+            filterDevicePorts(ports, devices);
         }
         return status;
     }
 
     /**
+     * Specialized version of listPreviousAudioPorts() listing only audio devices (AudioDevicePort)
+     * @see listPreviousAudioPorts(ArrayList<AudioPort>)
+     * @hide
+     */
+    public static int listPreviousAudioDevicePorts(ArrayList<AudioDevicePort> devices) {
+        if (devices == null) {
+            return ERROR_BAD_VALUE;
+        }
+        ArrayList<AudioPort> ports = new ArrayList<AudioPort>();
+        int status = updateAudioPortCache(null, null, ports);
+        if (status == SUCCESS) {
+            filterDevicePorts(ports, devices);
+        }
+        return status;
+    }
+
+    private static void filterDevicePorts(ArrayList<AudioPort> ports,
+                                          ArrayList<AudioDevicePort> devices) {
+        devices.clear();
+        for (int i = 0; i < ports.size(); i++) {
+            if (ports.get(i) instanceof AudioDevicePort) {
+                devices.add((AudioDevicePort)ports.get(i));
+            }
+        }
+    }
+
+    /**
      * Create a connection between two or more devices. The framework will reject the request if
      * device types are not compatible or the implementation does not support the requested
      * configuration.
@@ -3427,7 +3488,7 @@
      *         patch[0] contains the newly created patch
      * @hide
      */
-    public int createAudioPatch(AudioPatch[] patch,
+    public static int createAudioPatch(AudioPatch[] patch,
                                  AudioPortConfig[] sources,
                                  AudioPortConfig[] sinks) {
         return AudioSystem.createAudioPatch(patch, sources, sinks);
@@ -3444,7 +3505,7 @@
      *         - {@link #ERROR} if patch cannot be released for any other reason.
      * @hide
      */
-    public int releaseAudioPatch(AudioPatch patch) {
+    public static int releaseAudioPatch(AudioPatch patch) {
         return AudioSystem.releaseAudioPatch(patch);
     }
 
@@ -3453,8 +3514,8 @@
      * @param patches An AudioPatch array where the list will be returned.
      * @hide
      */
-    public int listAudioPatches(ArrayList<AudioPatch> patches) {
-        return updateAudioPortCache(null, patches);
+    public static int listAudioPatches(ArrayList<AudioPatch> patches) {
+        return updateAudioPortCache(null, patches, null);
     }
 
     /**
@@ -3462,7 +3523,7 @@
      * AudioGain.buildConfig()
      * @hide
      */
-    public int setAudioPortGain(AudioPort port, AudioGainConfig gain) {
+    public static int setAudioPortGain(AudioPort port, AudioGainConfig gain) {
         if (port == null || gain == null) {
             return ERROR_BAD_VALUE;
         }
@@ -3520,6 +3581,7 @@
     static final int AUDIOPORT_GENERATION_INIT = 0;
     static Integer sAudioPortGeneration = new Integer(AUDIOPORT_GENERATION_INIT);
     static ArrayList<AudioPort> sAudioPortsCached = new ArrayList<AudioPort>();
+    static ArrayList<AudioPort> sPreviousAudioPortsCached = new ArrayList<AudioPort>();
     static ArrayList<AudioPatch> sAudioPatchesCached = new ArrayList<AudioPatch>();
 
     static int resetAudioPortGeneration() {
@@ -3531,7 +3593,8 @@
         return generation;
     }
 
-    static int updateAudioPortCache(ArrayList<AudioPort> ports, ArrayList<AudioPatch> patches) {
+    static int updateAudioPortCache(ArrayList<AudioPort> ports, ArrayList<AudioPatch> patches,
+                                    ArrayList<AudioPort> previousPorts) {
         synchronized (sAudioPortGeneration) {
 
             if (sAudioPortGeneration == AUDIOPORT_GENERATION_INIT) {
@@ -3590,6 +3653,7 @@
                     }
                 }
 
+                sPreviousAudioPortsCached = sAudioPortsCached;
                 sAudioPortsCached = newPorts;
                 sAudioPatchesCached = newPatches;
                 sAudioPortGeneration = portGeneration[0];
@@ -3602,6 +3666,10 @@
                 patches.clear();
                 patches.addAll(sAudioPatchesCached);
             }
+            if (previousPorts != null) {
+                previousPorts.clear();
+                previousPorts.addAll(sPreviousAudioPortsCached);
+            }
         }
         return SUCCESS;
     }
@@ -3635,4 +3703,210 @@
                                                  portCfg.format(),
                                                  gainCfg);
     }
+
+    private OnAmPortUpdateListener mPortListener = null;
+
+    /**
+     * The message sent to apps when the contents of the device list changes if they provide
+     * a {#link Handler} object to addOnAudioDeviceConnectionListener().
+     */
+    private final static int MSG_DEVICES_LIST_CHANGE = 0;
+
+    private ArrayMap<OnAudioDeviceConnectionListener, NativeEventHandlerDelegate>
+        mDeviceConnectionListeners =
+            new ArrayMap<OnAudioDeviceConnectionListener, NativeEventHandlerDelegate>();
+
+    /**
+     * Specifies to the {@link AudioManager#getDevices(int)} method to include
+     * source (i.e. input) audio devices.
+     */
+    public static final int GET_DEVICES_INPUTS    = 0x0001;
+
+    /**
+     * Specifies to the {@link AudioManager#getDevices(int)} method to include
+     * sink (i.e. output) audio devices.
+     */
+    public static final int GET_DEVICES_OUTPUTS   = 0x0002;
+
+    /**
+     * Specifies to the {@link AudioManager#getDevices(int)} method to include both
+     * source and sink devices.
+     */
+    public static final int GET_DEVICES_ALL = GET_DEVICES_OUTPUTS | GET_DEVICES_INPUTS;
+
+    /**
+     * Determines if a given AudioDevicePort meets the specified filter criteria.
+     * @param port  The port to test.
+     * @param flags A set of bitflags specifying the criteria to test.
+     * @see {@link GET_DEVICES_OUTPUTS} and {@link GET_DEVICES_INPUTS}
+     **/
+    private static boolean checkFlags(AudioDevicePort port, int flags) {
+        return port.role() == AudioPort.ROLE_SINK && (flags & GET_DEVICES_OUTPUTS) != 0 ||
+               port.role() == AudioPort.ROLE_SOURCE && (flags & GET_DEVICES_INPUTS) != 0;
+    }
+
+    /**
+     * Generates a list of AudioDeviceInfo objects corresponding to the audio devices currently
+     * connected to the system and meeting the criteria specified in the <code>flags</code>
+     * parameter.
+     * @param flags A set of bitflags specifying the criteria to test.
+     * @see {@link GET_DEVICES_OUTPUTS}, {@link GET_DEVICES_INPUTS} and {@lGET_DEVICES_CES_ALL}.
+     * @return A (possibly zero-length) array of AudioDeviceInfo objects.
+     */
+    public AudioDeviceInfo[] getDevices(int flags) {
+        return getDevicesStatic(flags);
+    }
+
+    /**
+     * Generates a list of AudioDeviceInfo objects corresponding to the audio devices currently
+     * connected to the system and meeting the criteria specified in the <code>flags</code>
+     * parameter.
+     * @param flags A set of bitflags specifying the criteria to test.
+     * @see {@link GET_DEVICES_OUTPUTS}, {@link GET_DEVICES_INPUTS} and {@link GET_DEVICES_ALL}.
+     * @return A (possibly zero-length) array of AudioDeviceInfo objects.
+     * @hide
+     */
+    public static AudioDeviceInfo[] getDevicesStatic(int flags) {
+        ArrayList<AudioDevicePort> ports = new ArrayList<AudioDevicePort>();
+        int status = AudioManager.listAudioDevicePorts(ports);
+        if (status != AudioManager.SUCCESS) {
+            // fail and bail!
+            return new AudioDeviceInfo[0];
+        }
+
+        // figure out how many AudioDeviceInfo we need space for
+        int numRecs = 0;
+        for (AudioDevicePort port : ports) {
+            if (checkFlags(port, flags)) {
+                numRecs++;
+            }
+        }
+
+        // Now load them up
+        AudioDeviceInfo[] deviceList = new AudioDeviceInfo[numRecs];
+        int slot = 0;
+        for (AudioDevicePort port : ports) {
+            if (checkFlags(port, flags)) {
+                deviceList[slot++] = new AudioDeviceInfo(port);
+            }
+        }
+
+        return deviceList;
+    }
+
+    /**
+     * Adds an {@link OnAudioDeviceConnectionListener} to receive notifications of changes
+     * to the set of connected audio devices.
+     */
+    public void addOnAudioDeviceConnectionListener(OnAudioDeviceConnectionListener listener,
+            android.os.Handler handler) {
+        if (listener != null && !mDeviceConnectionListeners.containsKey(listener)) {
+            synchronized (mDeviceConnectionListeners) {
+                mDeviceConnectionListeners.put(
+                    listener, new NativeEventHandlerDelegate(listener, handler));
+            }
+        }
+    }
+
+    /**
+     * Removes an {@link OnAudioDeviceConnectionListener} which has been previously registered
+     * to receive notifications of changes to the set of connected audio devices.
+     */
+    public void removeOnAudioDeviceConnectionListener(OnAudioDeviceConnectionListener listener) {
+        synchronized (mDeviceConnectionListeners) {
+            if (mDeviceConnectionListeners.containsKey(listener)) {
+                mDeviceConnectionListeners.remove(listener);
+            }
+        }
+    }
+
+    /**
+     * Sends device list change notification to all listeners.
+     */
+    private void broadcastDeviceListChange() {
+        Collection<NativeEventHandlerDelegate> values;
+        synchronized (mDeviceConnectionListeners) {
+            values = mDeviceConnectionListeners.values();
+        }
+        for (NativeEventHandlerDelegate delegate : values) {
+            Handler handler = delegate.getHandler();
+            if (handler != null) {
+                handler.sendEmptyMessage(MSG_DEVICES_LIST_CHANGE);
+            }
+        }
+    }
+
+    /**
+     * Handles Port list update notifications from the AudioManager
+     */
+    private class OnAmPortUpdateListener implements AudioManager.OnAudioPortUpdateListener {
+        static final String TAG = "OnAmPortUpdateListener";
+        public void onAudioPortListUpdate(AudioPort[] portList) {
+            broadcastDeviceListChange();
+        }
+
+        /**
+         * Callback method called upon audio patch list update.
+         * @param patchList the updated list of audio patches
+         */
+        public void onAudioPatchListUpdate(AudioPatch[] patchList) {}
+
+        /**
+         * Callback method called when the mediaserver dies
+         */
+        public void onServiceDied() {
+            broadcastDeviceListChange();
+        }
+    }
+
+    //---------------------------------------------------------
+    // Inner classes
+    //--------------------
+    /**
+     * Helper class to handle the forwarding of native events to the appropriate listener
+     * (potentially) handled in a different thread.
+     */
+    private class NativeEventHandlerDelegate {
+        private final Handler mHandler;
+
+        NativeEventHandlerDelegate(final OnAudioDeviceConnectionListener listener,
+                                   Handler handler) {
+            // find the looper for our new event handler
+            Looper looper;
+            if (handler != null) {
+                looper = handler.getLooper();
+            } else {
+                // no given handler, use the looper the addListener call was called in
+                looper = Looper.getMainLooper();
+            }
+
+            // construct the event handler with this looper
+            if (looper != null) {
+                // implement the event handler delegate
+                mHandler = new Handler(looper) {
+                    @Override
+                    public void handleMessage(Message msg) {
+                        switch(msg.what) {
+                        case MSG_DEVICES_LIST_CHANGE:
+                            // call the OnAudioDeviceConnectionListener
+                            if (listener != null) {
+                                listener.onAudioDeviceConnection();
+                            }
+                            break;
+                        default:
+                            Log.e(TAG, "Unknown native event type: " + msg.what);
+                            break;
+                        }
+                    }
+                };
+            } else {
+                mHandler = null;
+            }
+        }
+
+        Handler getHandler() {
+            return mHandler;
+        }
+    }
+
 }
diff --git a/media/java/android/media/AudioMixPort.java b/media/java/android/media/AudioMixPort.java
index 9fac8d1..ab55c8d 100644
--- a/media/java/android/media/AudioMixPort.java
+++ b/media/java/android/media/AudioMixPort.java
@@ -20,16 +20,21 @@
  * The AudioMixPort is a specialized type of AudioPort
  * describing an audio mix or stream at an input or output stream of the audio
  * framework.
+ * In addition to base audio port attributes, the mix descriptor contains:
+ * - the unique audio I/O handle assigned by AudioFlinger to this mix.
  * @see AudioPort
  * @hide
  */
 
 public class AudioMixPort extends AudioPort {
 
-    AudioMixPort(AudioHandle handle, int role, String deviceName,
+    private final int mIoHandle;
+
+    AudioMixPort(AudioHandle handle, int ioHandle, int role, String deviceName,
             int[] samplingRates, int[] channelMasks,
             int[] formats, AudioGain[] gains) {
         super(handle, role, deviceName, samplingRates, channelMasks, formats, gains);
+        mIoHandle = ioHandle;
     }
 
     /**
@@ -41,11 +46,23 @@
         return new AudioMixPortConfig(this, samplingRate, channelMask, format, gain);
     }
 
+    /**
+     * Get the device type (e.g AudioManager.DEVICE_OUT_SPEAKER)
+     */
+    public int ioHandle() {
+        return mIoHandle;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (o == null || !(o instanceof AudioMixPort)) {
             return false;
         }
+        AudioMixPort other = (AudioMixPort)o;
+        if (mIoHandle != other.ioHandle()) {
+            return false;
+        }
+
         return super.equals(o);
     }
 
diff --git a/media/java/android/media/AudioPort.java b/media/java/android/media/AudioPort.java
index 88e784a..7328d7a 100644
--- a/media/java/android/media/AudioPort.java
+++ b/media/java/android/media/AudioPort.java
@@ -93,6 +93,14 @@
     }
 
     /**
+     * Get the system unique device ID.
+     */
+    public int id() {
+        return mHandle.id();
+    }
+
+
+    /**
      * Get the audio port role
      */
     public int role() {
diff --git a/media/java/android/media/AudioPortEventHandler.java b/media/java/android/media/AudioPortEventHandler.java
index c49e8c2..c152245 100644
--- a/media/java/android/media/AudioPortEventHandler.java
+++ b/media/java/android/media/AudioPortEventHandler.java
@@ -84,7 +84,7 @@
                         ArrayList<AudioPort> ports = new ArrayList<AudioPort>();
                         ArrayList<AudioPatch> patches = new ArrayList<AudioPatch>();
                         if (msg.what != AUDIOPORT_EVENT_SERVICE_DIED) {
-                            int status = AudioManager.updateAudioPortCache(ports, patches);
+                            int status = AudioManager.updateAudioPortCache(ports, patches, null);
                             if (status != AudioManager.SUCCESS) {
                                 return;
                             }
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index d5e6b3e..c0bc6d6 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -27,7 +27,6 @@
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.app.ActivityThread;
-import android.app.Application;
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
@@ -117,11 +116,6 @@
      */
     private static final int NATIVE_EVENT_NEW_POS = 3;
 
-    /**
-     * Event id denotes when the routing changes.
-     */
-    private final static int NATIVE_EVENT_ROUTING_CHANGE = 1000;
-
     private final static String TAG = "android.media.AudioRecord";
 
     /** @hide */
@@ -162,6 +156,12 @@
     @SuppressWarnings("unused")
     private long mNativeCallbackCookie;
 
+    /**
+     * Accessed by native methods: provides access to the JNIDeviceCallback instance.
+     */
+    @SuppressWarnings("unused")
+    private long mNativeDeviceCallback;
+
 
     //---------------------------------------------------------
     // Member variables
@@ -246,8 +246,8 @@
      * Though some invalid parameters will result in an {@link IllegalArgumentException} exception,
      * other errors do not.  Thus you should call {@link #getState()} immediately after construction
      * to confirm that the object is usable.
-     * @param audioSource the recording source (also referred to as capture preset).
-     *    See {@link MediaRecorder.AudioSource} for the capture preset definitions.
+     * @param audioSource the recording source.
+     *   See {@link MediaRecorder.AudioSource} for the recording source definitions.
      * @param sampleRateInHz the sample rate expressed in Hertz. 44100Hz is currently the only
      *   rate that is guaranteed to work on all devices, but other rates such as 22050,
      *   16000, and 11025 may work on some devices.
@@ -285,8 +285,8 @@
      * @hide
      * Class constructor with {@link AudioAttributes} and {@link AudioFormat}.
      * @param attributes a non-null {@link AudioAttributes} instance. Use
-     *     {@link AudioAttributes.Builder#setCapturePreset(int)} for configuring the capture
-     *     preset for this instance.
+     *     {@link AudioAttributes.Builder#setAudioSource(int)} for configuring the audio
+     *     source for this instance.
      * @param format a non-null {@link AudioFormat} instance describing the format of the data
      *     that will be recorded through this AudioRecord. See {@link AudioFormat.Builder} for
      *     configuring the audio format parameters such as encoding, channel mask and sample rate.
@@ -380,7 +380,7 @@
         int initResult = native_setup( new WeakReference<AudioRecord>(this),
                 mAudioAttributes, mSampleRate, mChannelMask, mChannelIndexMask,
                 mAudioFormat, mNativeBufferSizeInBytes,
-                session, getMyOpPackageName());
+                session, ActivityThread.currentOpPackageName());
         if (initResult != SUCCESS) {
             loge("Error code "+initResult+" when initializing native AudioRecord object.");
             return; // with mState == STATE_UNINITIALIZED
@@ -394,14 +394,14 @@
     /**
      * Builder class for {@link AudioRecord} objects.
      * Use this class to configure and create an <code>AudioRecord</code> instance. By setting the
-     * recording preset (a.k.a. recording source) and audio format parameters, you indicate which of
-     *  those vary from the default behavior on the device.
+     * recording source and audio format parameters, you indicate which of
+     * those vary from the default behavior on the device.
      * <p> Here is an example where <code>Builder</code> is used to specify all {@link AudioFormat}
      * parameters, to be used by a new <code>AudioRecord</code> instance:
      *
      * <pre class="prettyprint">
      * AudioRecord recorder = new AudioRecord.Builder()
-     *         .setCapturePreset(MediaRecorder.AudioSource.VOICE_COMMUNICATION)
+     *         .setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION)
      *         .setAudioFormat(new AudioFormat.Builder()
      *                 .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
      *                 .setSampleRate(32000)
@@ -411,12 +411,13 @@
      *         .build();
      * </pre>
      * <p>
-     * If the capture preset is not set with {@link #setCapturePreset(int)},
+     * If the audio source is not set with {@link #setAudioSource(int)},
      * {@link MediaRecorder.AudioSource#DEFAULT} is used.
      * <br>If the audio format is not specified or is incomplete, its sample rate will be the
      * default output sample rate of the device (see
      * {@link AudioManager#PROPERTY_OUTPUT_SAMPLE_RATE}), its channel configuration will be
-     * {@link AudioFormat#CHANNEL_IN_DEFAULT}.
+     * {@link AudioFormat#CHANNEL_IN_MONO}, and the encoding will be
+     * {@link AudioFormat#ENCODING_PCM_16BIT}.
      * <br>If the buffer size is not specified with {@link #setBufferSizeInBytes(int)},
      * the minimum buffer size for the source is used.
      */
@@ -433,18 +434,18 @@
         }
 
         /**
-         * @param preset the capture preset (also referred to as the recording source).
-         * See {@link MediaRecorder.AudioSource} for the supported capture preset definitions.
+         * @param source the audio source.
+         * See {@link MediaRecorder.AudioSource} for the supported audio source definitions.
          * @return the same Builder instance.
          * @throws IllegalArgumentException
          */
-        public Builder setCapturePreset(int preset) throws IllegalArgumentException {
-            if ( (preset < MediaRecorder.AudioSource.DEFAULT) ||
-                    (preset > MediaRecorder.getAudioSourceMax()) ) {
-                throw new IllegalArgumentException("Invalid audio source " + preset);
+        public Builder setAudioSource(int source) throws IllegalArgumentException {
+            if ( (source < MediaRecorder.AudioSource.DEFAULT) ||
+                    (source > MediaRecorder.getAudioSourceMax()) ) {
+                throw new IllegalArgumentException("Invalid audio source " + source);
             }
             mAttributes = new AudioAttributes.Builder()
-                    .setInternalCapturePreset(preset)
+                    .setInternalCapturePreset(source)
                     .build();
             return this;
         }
@@ -533,7 +534,22 @@
          */
         public AudioRecord build() throws UnsupportedOperationException {
             if (mFormat == null) {
-                mFormat = new AudioFormat.Builder().build();
+                mFormat = new AudioFormat.Builder()
+                        .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
+                        .setChannelMask(AudioFormat.CHANNEL_IN_MONO)
+                        .build();
+            } else {
+                if (mFormat.getEncoding() == AudioFormat.ENCODING_INVALID) {
+                    mFormat = new AudioFormat.Builder(mFormat)
+                            .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
+                            .build();
+                }
+                if (mFormat.getChannelMask() == AudioFormat.CHANNEL_INVALID
+                        && mFormat.getChannelIndexMask() == AudioFormat.CHANNEL_INVALID) {
+                    mFormat = new AudioFormat.Builder(mFormat)
+                            .setChannelMask(AudioFormat.CHANNEL_IN_MONO)
+                            .build();
+                }
             }
             if (mAttributes == null) {
                 mAttributes = new AudioAttributes.Builder()
@@ -1202,29 +1218,51 @@
     //--------------------------------------------------------------------------
     // (Re)Routing Info
     //--------------------
+    public interface OnRoutingChangedListener {
+        /**
+         * Called when the routing of an AudioRecord changes from either and explicit or
+         * policy rerouting.
+         */
+        public void onRoutingChanged(AudioRecord audioRecord);
+    }
+
     /**
      * Returns an {@link AudioDeviceInfo} identifying the current routing of this AudioRecord.
      */
     public AudioDeviceInfo getRoutedDevice() {
+        int deviceId = native_getRoutedDeviceId();
+        if (deviceId == 0) {
+            return null;
+        }
+        AudioDeviceInfo[] devices =
+                AudioManager.getDevicesStatic(AudioManager.GET_DEVICES_INPUTS);
+        for (int i = 0; i < devices.length; i++) {
+            if (devices[i].getId() == deviceId) {
+                return devices[i];
+            }
+        }
         return null;
     }
 
     /**
      * The message sent to apps when the routing of this AudioRecord changes if they provide
-     * a {#link Handler} object to addOnAudioRecordRoutingListener().
+     * a {#link Handler} object to addOnRoutingChangeListener().
      */
-    private ArrayMap<OnAudioRecordRoutingListener, NativeRoutingEventHandlerDelegate>
+    private ArrayMap<OnRoutingChangedListener, NativeRoutingEventHandlerDelegate>
         mRoutingChangeListeners =
-            new ArrayMap<OnAudioRecordRoutingListener, NativeRoutingEventHandlerDelegate>();
+            new ArrayMap<OnRoutingChangedListener, NativeRoutingEventHandlerDelegate>();
 
     /**
-     * Adds an {@link OnAudioRecordRoutingListener} to receive notifications of routing changes
+     * Adds an {@link OnRoutingChangedListener} to receive notifications of routing changes
      * on this AudioRecord.
      */
-    public void addOnAudioRecordRoutingListener(OnAudioRecordRoutingListener listener,
+    public void addOnRoutingChangedListener(OnRoutingChangedListener listener,
             android.os.Handler handler) {
         if (listener != null && !mRoutingChangeListeners.containsKey(listener)) {
             synchronized (mRoutingChangeListeners) {
+                if (mRoutingChangeListeners.size() == 0) {
+                    native_enableDeviceCallback();
+                }
                 mRoutingChangeListeners.put(
                     listener, new NativeRoutingEventHandlerDelegate(this, listener, handler));
             }
@@ -1232,13 +1270,16 @@
     }
 
     /**
-     * Removes an {@link OnAudioRecordRoutingListener} which has been previously added
+     * Removes an {@link OnRoutingChangedListener} which has been previously added
      * to receive notifications of changes to the set of connected audio devices.
      */
-    public void removeOnAudioRecordRoutingListener(OnAudioRecordRoutingListener listener) {
+    public void removeOnRoutingChangedListener(OnRoutingChangedListener listener) {
         synchronized (mRoutingChangeListeners) {
             if (mRoutingChangeListeners.containsKey(listener)) {
                 mRoutingChangeListeners.remove(listener);
+                if (mRoutingChangeListeners.size() == 0) {
+                    native_disableDeviceCallback();
+                }
             }
         }
     }
@@ -1251,7 +1292,7 @@
         private final Handler mHandler;
 
         NativeRoutingEventHandlerDelegate(final AudioRecord record,
-                                   final OnAudioRecordRoutingListener listener,
+                                   final OnRoutingChangedListener listener,
                                    Handler handler) {
             // find the looper for our new event handler
             Looper looper;
@@ -1272,9 +1313,9 @@
                             return;
                         }
                         switch(msg.what) {
-                        case NATIVE_EVENT_ROUTING_CHANGE:
+                        case AudioSystem.NATIVE_EVENT_ROUTING_CHANGE:
                             if (listener != null) {
-                                listener.onAudioRecordRouting(record);
+                                listener.onRoutingChanged(record);
                             }
                             break;
                         default:
@@ -1300,10 +1341,11 @@
         synchronized (mRoutingChangeListeners) {
             values = mRoutingChangeListeners.values();
         }
+        AudioManager.resetAudioPortGeneration();
         for(NativeRoutingEventHandlerDelegate delegate : values) {
             Handler handler = delegate.getHandler();
             if (handler != null) {
-                handler.sendEmptyMessage(NATIVE_EVENT_ROUTING_CHANGE);
+                handler.sendEmptyMessage(AudioSystem.NATIVE_EVENT_ROUTING_CHANGE);
             }
         }
     }
@@ -1336,24 +1378,30 @@
      * @return true if successful, false if the specified {@link AudioDeviceInfo} is non-null and
      * does not correspond to a valid audio input device.
      */
-    public boolean setPreferredInputDevice(AudioDeviceInfo deviceInfo) {
+    public boolean setPreferredDevice(AudioDeviceInfo deviceInfo) {
         // Do some validation....
         if (deviceInfo != null && !deviceInfo.isSource()) {
             return false;
         }
 
-        mPreferredDevice = deviceInfo;
-        int preferredDeviceId = mPreferredDevice != null ? deviceInfo.getId() : 0;
-
-        return native_setInputDevice(preferredDeviceId);
+        int preferredDeviceId = deviceInfo != null ? deviceInfo.getId() : 0;
+        boolean status = native_setInputDevice(preferredDeviceId);
+        if (status == true) {
+            synchronized (this) {
+                mPreferredDevice = deviceInfo;
+            }
+        }
+        return status;
     }
 
     /**
-     * Returns the selected input specified by {@link #setPreferredInputDevice}. Note that this
+     * Returns the selected input specified by {@link #setPreferredDevice}. Note that this
      * is not guarenteed to correspond to the actual device being used for recording.
      */
-    public AudioDeviceInfo getPreferredInputDevice() {
-        return mPreferredDevice;
+    public AudioDeviceInfo getPreferredDevice() {
+        synchronized (this) {
+            return mPreferredDevice;
+        }
     }
 
     //---------------------------------------------------------
@@ -1436,6 +1484,11 @@
             return;
         }
 
+        if (what == AudioSystem.NATIVE_EVENT_ROUTING_CHANGE) {
+            recorder.broadcastRoutingChange();
+            return;
+        }
+
         if (recorder.mEventHandler != null) {
             Message m =
                 recorder.mEventHandler.obtainMessage(what, arg1, arg2, obj);
@@ -1487,7 +1540,9 @@
             int sampleRateInHz, int channelCount, int audioFormat);
 
     private native final boolean native_setInputDevice(int deviceId);
-
+    private native final int native_getRoutedDeviceId();
+    private native final void native_enableDeviceCallback();
+    private native final void native_disableDeviceCallback();
 
     //---------------------------------------------------------
     // Utility methods
@@ -1500,15 +1555,4 @@
     private static void loge(String msg) {
         Log.e(TAG, msg);
     }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioRecord outside of an app");
-    }
 }
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 25e6594..ee12374 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.media.audiopolicy.AudioMix;
+import android.util.Log;
 
 import java.util.ArrayList;
 
@@ -32,6 +33,7 @@
  */
 public class AudioSystem
 {
+    private static final String TAG = "AudioSystem";
     /* These values must be kept in sync with system/audio.h */
     /*
      * If these are modified, please also update Settings.System.VOLUME_SETTINGS
@@ -224,6 +226,48 @@
         }
     }
 
+    /**
+     * Handles events for the audio policy manager about dynamic audio policies
+     * @see android.media.audiopolicy.AudioPolicy
+     */
+    public interface DynamicPolicyCallback
+    {
+        void onDynamicPolicyMixStateUpdate(String regId, int state);
+    }
+
+    //keep in sync with include/media/AudioPolicy.h
+    private final static int DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE = 0;
+
+    private static DynamicPolicyCallback sDynPolicyCallback;
+
+    public static void setDynamicPolicyCallback(DynamicPolicyCallback cb)
+    {
+        synchronized (AudioSystem.class) {
+            sDynPolicyCallback = cb;
+            native_register_dynamic_policy_callback();
+        }
+    }
+
+    private static void dynamicPolicyCallbackFromNative(int event, String regId, int val)
+    {
+        DynamicPolicyCallback cb = null;
+        synchronized (AudioSystem.class) {
+            if (sDynPolicyCallback != null) {
+                cb = sDynPolicyCallback;
+            }
+        }
+        if (cb != null) {
+            switch(event) {
+                case DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE:
+                    cb.onDynamicPolicyMixStateUpdate(regId, val);
+                    break;
+                default:
+                    Log.e(TAG, "dynamicPolicyCallbackFromNative: unknown event " + event);
+            }
+        }
+    }
+
+
     /*
      * Error codes used by public APIs (AudioTrack, AudioRecord, AudioManager ...)
      * Must be kept in sync with frameworks/base/core/jni/android_media_AudioErrors.h
@@ -580,6 +624,9 @@
     public static native int listAudioPatches(ArrayList<AudioPatch> patches, int[] generation);
     public static native int setAudioPortConfig(AudioPortConfig config);
 
+    // declare this instance as having a dynamic policy callback handler
+    private static native final void native_register_dynamic_policy_callback();
+
     // must be kept in sync with value in include/system/audio.h
     public static final int AUDIO_HW_SYNC_INVALID = 0;
 
@@ -674,5 +721,11 @@
             (1 << STREAM_RING) |
             (1 << STREAM_NOTIFICATION) |
             (1 << STREAM_SYSTEM);
+
+    /**
+     * Event posted by AudioTrack and AudioRecord JNI (JNIDeviceCallback) when routing changes.
+     * Keep in sync with core/jni/android_media_DeviceCallback.h.
+     */
+    final static int NATIVE_EVENT_ROUTING_CHANGE = 1000;
 }
 
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index cb05cc5..eda14a7 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -178,12 +178,6 @@
      */
     private static final int NATIVE_EVENT_NEW_POS = 4;
 
-    /**
-     * Event id denotes when the routing changes.
-     */
-    private final static int NATIVE_EVENT_ROUTING_CHANGE = 1000;
-
-
     private final static String TAG = "android.media.AudioTrack";
 
 
@@ -914,13 +908,13 @@
     }
 
     /**
-     * Returns the current playback settings.
-     * See {@link #setPlaybackSettings(PlaybackSettings)} to set playback settings
-     * @return current {@link PlaybackSettings}.
+     * Returns the current playback params.
+     * See {@link #setPlaybackParams(PlaybackParams)} to set playback params
+     * @return current {@link PlaybackParams}.
      * @throws IllegalStateException if track is not initialized.
      */
-    public @NonNull PlaybackSettings getPlaybackSettings() {
-        return native_get_playback_settings();
+    public @NonNull PlaybackParams getPlaybackParams() {
+        return native_get_playback_params();
     }
 
     /**
@@ -1300,7 +1294,7 @@
      * playback to last twice as long, but will also result in a pitch shift down by one octave.
      * The valid sample rate range is from 1 Hz to twice the value returned by
      * {@link #getNativeOutputSampleRate(int)}.
-     * Use {@link #setPlaybackSettings(PlaybackSettings)} for speed control.
+     * Use {@link #setPlaybackParams(PlaybackParams)} for speed control.
      * @param sampleRateInHz the sample rate expressed in Hz
      * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
      *    {@link #ERROR_INVALID_OPERATION}
@@ -1317,24 +1311,24 @@
 
 
     /**
-     * Sets the playback settings.
-     * This method returns failure if it cannot apply the playback settings.
+     * Sets the playback params.
+     * This method returns failure if it cannot apply the playback params.
      * One possible cause is that the parameters for speed or pitch are out of range.
      * Another possible cause is that the <code>AudioTrack</code> is streaming
      * (see {@link #MODE_STREAM}) and the
      * buffer size is too small. For speeds greater than 1.0f, the <code>AudioTrack</code> buffer
      * on configuration must be larger than the speed multiplied by the minimum size
      * {@link #getMinBufferSize(int, int, int)}) to allow proper playback.
-     * @param settings see {@link PlaybackSettings}. In particular,
+     * @param params see {@link PlaybackParams}. In particular,
      * speed, pitch, and audio mode should be set.
-     * @throws IllegalArgumentException if the settings are invalid or not accepted.
+     * @throws IllegalArgumentException if the params are invalid or not accepted.
      * @throws IllegalStateException if track is not initialized.
      */
-    public void setPlaybackSettings(@NonNull PlaybackSettings settings) {
-        if (settings == null) {
-            throw new IllegalArgumentException("settings is null");
+    public void setPlaybackParams(@NonNull PlaybackParams params) {
+        if (params == null) {
+            throw new IllegalArgumentException("params is null");
         }
-        native_set_playback_settings(settings);
+        native_set_playback_params(params);
     }
 
 
@@ -2052,52 +2046,79 @@
      * @return true if succesful, false if the specified {@link AudioDeviceInfo} is non-null and
      * does not correspond to a valid audio output device.
      */
-    public boolean setPreferredOutputDevice(AudioDeviceInfo deviceInfo) {
+    public boolean setPreferredDevice(AudioDeviceInfo deviceInfo) {
         // Do some validation....
         if (deviceInfo != null && !deviceInfo.isSink()) {
             return false;
         }
-
-        mPreferredDevice = deviceInfo;
-        int preferredDeviceId = mPreferredDevice != null ? deviceInfo.getId() : 0;
-
-        return native_setOutputDevice(preferredDeviceId);
+        int preferredDeviceId = deviceInfo != null ? deviceInfo.getId() : 0;
+        boolean status = native_setOutputDevice(preferredDeviceId);
+        if (status == true) {
+            synchronized (this) {
+                mPreferredDevice = deviceInfo;
+            }
+        }
+        return status;
     }
 
     /**
-     * Returns the selected output specified by {@link #setPreferredOutputDevice}. Note that this
+     * Returns the selected output specified by {@link #setPreferredDevice}. Note that this
      * is not guaranteed to correspond to the actual device being used for playback.
      */
-    public AudioDeviceInfo getPreferredOutputDevice() {
-        return mPreferredDevice;
+    public AudioDeviceInfo getPreferredDevice() {
+        synchronized (this) {
+            return mPreferredDevice;
+        }
     }
 
     //--------------------------------------------------------------------------
     // (Re)Routing Info
     //--------------------
+    public interface OnRoutingChangedListener {
+        /**
+         * Called when the routing of an AudioTrack changes from either and explicit or
+         * policy rerouting.
+         */
+        public void onRoutingChanged(AudioTrack audioTrack);
+    }
+
     /**
      * Returns an {@link AudioDeviceInfo} identifying the current routing of this AudioTrack.
      */
     public AudioDeviceInfo getRoutedDevice() {
+        int deviceId = native_getRoutedDeviceId();
+        if (deviceId == 0) {
+            return null;
+        }
+        AudioDeviceInfo[] devices =
+                AudioManager.getDevicesStatic(AudioManager.GET_DEVICES_OUTPUTS);
+        for (int i = 0; i < devices.length; i++) {
+            if (devices[i].getId() == deviceId) {
+                return devices[i];
+            }
+        }
         return null;
     }
 
     /**
      * The message sent to apps when the routing of this AudioTrack changes if they provide
-     * a {#link Handler} object to addOnAudioTrackRoutingListener().
+     * a {#link Handler} object to addOnRoutingChangedListener().
      */
-    private ArrayMap<OnAudioTrackRoutingListener, NativeRoutingEventHandlerDelegate>
+    private ArrayMap<OnRoutingChangedListener, NativeRoutingEventHandlerDelegate>
         mRoutingChangeListeners =
-            new ArrayMap<OnAudioTrackRoutingListener, NativeRoutingEventHandlerDelegate>();
+            new ArrayMap<OnRoutingChangedListener, NativeRoutingEventHandlerDelegate>();
 
     /**
-     * Adds an {@link OnAudioTrackRoutingListener} to receive notifications of routing changes
+     * Adds an {@link OnRoutingChangedListener} to receive notifications of routing changes
      * on this AudioTrack.
      */
-    public void addOnAudioTrackRoutingListener(OnAudioTrackRoutingListener listener,
+    public void addOnRoutingChangedListener(OnRoutingChangedListener listener,
             android.os.Handler handler) {
         if (listener != null && !mRoutingChangeListeners.containsKey(listener)) {
             synchronized (mRoutingChangeListeners) {
+                if (mRoutingChangeListeners.size() == 0) {
+                    native_enableDeviceCallback();
+                }
                 mRoutingChangeListeners.put(
                     listener, new NativeRoutingEventHandlerDelegate(this, listener, handler));
             }
@@ -2105,14 +2126,17 @@
     }
 
     /**
-     * Removes an {@link OnAudioTrackRoutingListener} which has been previously added
+     * Removes an {@link OnRoutingChangedListener} which has been previously added
      * to receive notifications of changes to the set of connected audio devices.
      */
-    public void removeOnAudioTrackRoutingListener(OnAudioTrackRoutingListener listener) {
+    public void removeOnRoutingChangedListener(OnRoutingChangedListener listener) {
         synchronized (mRoutingChangeListeners) {
             if (mRoutingChangeListeners.containsKey(listener)) {
                 mRoutingChangeListeners.remove(listener);
             }
+            if (mRoutingChangeListeners.size() == 0) {
+                native_disableDeviceCallback();
+            }
         }
     }
 
@@ -2124,10 +2148,11 @@
         synchronized (mRoutingChangeListeners) {
             values = mRoutingChangeListeners.values();
         }
+        AudioManager.resetAudioPortGeneration();
         for(NativeRoutingEventHandlerDelegate delegate : values) {
             Handler handler = delegate.getHandler();
             if (handler != null) {
-                handler.sendEmptyMessage(NATIVE_EVENT_ROUTING_CHANGE);
+                handler.sendEmptyMessage(AudioSystem.NATIVE_EVENT_ROUTING_CHANGE);
             }
         }
     }
@@ -2219,7 +2244,7 @@
         private final Handler mHandler;
 
         NativeRoutingEventHandlerDelegate(final AudioTrack track,
-                                   final OnAudioTrackRoutingListener listener,
+                                   final OnRoutingChangedListener listener,
                                    Handler handler) {
             // find the looper for our new event handler
             Looper looper;
@@ -2240,9 +2265,9 @@
                             return;
                         }
                         switch(msg.what) {
-                        case NATIVE_EVENT_ROUTING_CHANGE:
+                        case AudioSystem.NATIVE_EVENT_ROUTING_CHANGE:
                             if (listener != null) {
-                                listener.onAudioTrackRouting(track);
+                                listener.onRoutingChanged(track);
                             }
                             break;
                         default:
@@ -2273,6 +2298,10 @@
             return;
         }
 
+        if (what == AudioSystem.NATIVE_EVENT_ROUTING_CHANGE) {
+            track.broadcastRoutingChange();
+            return;
+        }
         NativePositionEventHandlerDelegate delegate = track.mEventHandlerDelegate;
         if (delegate != null) {
             Handler handler = delegate.getHandler();
@@ -2281,7 +2310,6 @@
                 handler.sendMessage(m);
             }
         }
-
     }
 
 
@@ -2333,8 +2361,8 @@
     private native final int native_set_playback_rate(int sampleRateInHz);
     private native final int native_get_playback_rate();
 
-    private native final void native_set_playback_settings(@NonNull PlaybackSettings settings);
-    private native final @NonNull PlaybackSettings native_get_playback_settings();
+    private native final void native_set_playback_params(@NonNull PlaybackParams params);
+    private native final @NonNull PlaybackParams native_get_playback_params();
 
     private native final int native_set_marker_pos(int marker);
     private native final int native_get_marker_pos();
@@ -2362,6 +2390,9 @@
     private native final int native_setAuxEffectSendLevel(float level);
 
     private native final boolean native_setOutputDevice(int deviceId);
+    private native final int native_getRoutedDeviceId();
+    private native final void native_enableDeviceCallback();
+    private native final void native_disableDeviceCallback();
 
     //---------------------------------------------------------
     // Utility methods
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index d22cfda..72198b6 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -664,11 +664,11 @@
         if (!mHasSurface) {
             throw new IllegalStateException("codec was not configured for an output surface");
         }
-
-        // TODO implement this
-        throw new IllegalArgumentException("codec does not support this surface");
+        native_setSurface(surface);
     }
 
+    private native void native_setSurface(@NonNull Surface surface);
+
     /**
      * Create a persistent input surface that can be used with codecs that normally have an input
      * surface, such as video encoders. A persistent input can be reused by subsequent
@@ -681,12 +681,20 @@
      */
     @NonNull
     public static Surface createPersistentInputSurface() {
-        // TODO implement this
-        return new PersistentSurface();
+        return native_createPersistentInputSurface();
     }
 
     static class PersistentSurface extends Surface {
-        PersistentSurface() {}
+        @SuppressWarnings("unused")
+        PersistentSurface() {} // used by native
+
+        @Override
+        public void release() {
+            native_releasePersistentInputSurface(this);
+            super.release();
+        }
+
+        private long mPersistentObject;
     };
 
     /**
@@ -700,9 +708,17 @@
      *           {@link #createPersistentInputSurface}.
      */
     public void usePersistentInputSurface(@NonNull Surface surface) {
-        throw new IllegalArgumentException("not implemented");
+        if (!(surface instanceof PersistentSurface)) {
+            throw new IllegalArgumentException("not a PersistentSurface");
+        }
+        native_usePersistentInputSurface(surface);
     }
 
+    @NonNull
+    private static native final PersistentSurface native_createPersistentInputSurface();
+    private static native final void native_releasePersistentInputSurface(@NonNull Surface surface);
+    private native final void native_usePersistentInputSurface(@NonNull Surface surface);
+
     private native final void native_setCallback(@Nullable Callback cb);
 
     private native final void native_configure(
@@ -800,10 +816,9 @@
      * Thrown when an internal codec error occurs.
      */
     public final static class CodecException extends IllegalStateException {
-        CodecException(int errorCode, int actionCode, @Nullable String detailMessage, int reason) {
+        CodecException(int errorCode, int actionCode, @Nullable String detailMessage) {
             super(detailMessage);
             mErrorCode = errorCode;
-            mReason = reason;
             mActionCode = actionCode;
 
             // TODO get this from codec
@@ -831,21 +846,7 @@
         }
 
         /**
-         * Retrieve the reason associated with a CodecException.
-         * The reason could be one of {@link #REASON_HARDWARE} or {@link #REASON_RECLAIMED}.
-         *
-         */
-        @ReasonCode
-        public int getReason() {
-            return mReason;
-        }
-
-        /**
-         * Retrieve the error code associated with a CodecException.
-         * This is opaque diagnostic information and may depend on
-         * hardware or API level.
-         *
-         * @hide
+         * Retrieve the error code associated with a CodecException
          */
         public int getErrorCode() {
             return mErrorCode;
@@ -862,22 +863,21 @@
         }
 
         /**
-         * This indicates the exception is caused by the hardware.
+         * This indicates required resource was not able to be allocated.
          */
-        public static final int REASON_HARDWARE = 0;
+        public static final int ERROR_INSUFFICIENT_RESOURCE = 1100;
 
         /**
-         * This indicates the exception is because the resource manager reclaimed
-         * the media resource used by the codec.
+         * This indicates the resource manager reclaimed the media resource used by the codec.
          * <p>
          * With this exception, the codec must be released, as it has moved to terminal state.
          */
-        public static final int REASON_RECLAIMED = 1;
+        public static final int ERROR_RECLAIMED = 1101;
 
         /** @hide */
         @IntDef({
-            REASON_HARDWARE,
-            REASON_RECLAIMED,
+            ERROR_INSUFFICIENT_RESOURCE,
+            ERROR_RECLAIMED,
         })
         @Retention(RetentionPolicy.SOURCE)
         public @interface ReasonCode {}
@@ -888,7 +888,6 @@
 
         private final String mDiagnosticInfo;
         private final int mErrorCode;
-        private final int mReason;
         private final int mActionCode;
     }
 
@@ -902,9 +901,9 @@
         }
 
         /**
-         * This indicates that no key has been set to perform the requested
-         * decrypt operation.  The operation can be retried after adding
-         * a decryption key.
+         * This indicates that the requested key was not found when trying to
+         * perform a decrypt operation.  The operation can be retried after adding
+         * the correct decryption key.
          */
         public static final int ERROR_NO_KEY = 1;
 
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 974c9af..89d419a 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -1733,6 +1733,72 @@
                         maxBlocks, maxBlocksPerSecond,
                         16 /* blockWidth */, 16 /* blockHeight */,
                         1 /* widthAlignment */, 1 /* heightAlignment */);
+            } else if (mime.equalsIgnoreCase(MediaFormat.MIMETYPE_VIDEO_MPEG2)) {
+                int maxWidth = 11, maxHeight = 9, maxRate = 15;
+                maxBlocks = 99;
+                maxBlocksPerSecond = 1485;
+                maxBps = 64000;
+                for (CodecProfileLevel profileLevel: profileLevels) {
+                    int MBPS = 0, FS = 0, BR = 0, FR = 0, W = 0, H = 0;
+                    boolean supported = true;
+                    switch (profileLevel.profile) {
+                        case CodecProfileLevel.MPEG2ProfileSimple:
+                            switch (profileLevel.level) {
+                                case CodecProfileLevel.MPEG2LevelML:
+                                    FR = 30; W = 45; H =  36; MBPS =  48600; FS =  1620; BR =  15000; break;
+                                default:
+                                    Log.w(TAG, "Unrecognized profile/level "
+                                            + profileLevel.profile + "/"
+                                            + profileLevel.level + " for " + mime);
+                                    errors |= ERROR_UNRECOGNIZED;
+                            }
+                            break;
+                        case CodecProfileLevel.MPEG2ProfileMain:
+                            switch (profileLevel.level) {
+                                case CodecProfileLevel.MPEG2LevelLL:
+                                    FR = 30; W = 22; H =  18; MBPS =  11880; FS =  396; BR =  4000; break;
+                                case CodecProfileLevel.MPEG2LevelML:
+                                    FR = 30; W = 45; H =  36; MBPS =  48600; FS =  1620; BR =  15000; break;
+                                case CodecProfileLevel.MPEG2LevelH14:
+                                    FR = 60; W = 90; H =  68; MBPS =  367200; FS =  6120; BR = 60000; break;
+                                case CodecProfileLevel.MPEG2LevelHL:
+                                    FR = 60; W = 120; H = 68; MBPS =  489600; FS =  8160; BR = 80000; break;
+                                default:
+                                    Log.w(TAG, "Unrecognized profile/level "
+                                            + profileLevel.profile + "/"
+                                            + profileLevel.level + " for " + mime);
+                                    errors |= ERROR_UNRECOGNIZED;
+                            }
+                            break;
+                        case CodecProfileLevel.MPEG2Profile422:
+                        case CodecProfileLevel.MPEG2ProfileSNR:
+                        case CodecProfileLevel.MPEG2ProfileSpatial:
+                        case CodecProfileLevel.MPEG2ProfileHigh:
+                            Log.i(TAG, "Unsupported profile "
+                                    + profileLevel.profile + " for " + mime);
+                            errors |= ERROR_UNSUPPORTED;
+                            supported = false;
+                            break;
+                        default:
+                            Log.w(TAG, "Unrecognized profile "
+                                    + profileLevel.profile + " for " + mime);
+                            errors |= ERROR_UNRECOGNIZED;
+                    }
+                    if (supported) {
+                        errors &= ~ERROR_NONE_SUPPORTED;
+                    }
+                    maxBlocksPerSecond = Math.max(MBPS, maxBlocksPerSecond);
+                    maxBlocks = Math.max(FS, maxBlocks);
+                    maxBps = Math.max(BR * 1000, maxBps);
+                    maxWidth = Math.max(W, maxWidth);
+                    maxHeight = Math.max(H, maxHeight);
+                    maxRate = Math.max(FR, maxRate);
+                }
+                applyMacroBlockLimits(maxWidth, maxHeight,
+                        maxBlocks, maxBlocksPerSecond,
+                        16 /* blockWidth */, 16 /* blockHeight */,
+                        1 /* widthAlignment */, 1 /* heightAlignment */);
+                mFrameRateRange = mFrameRateRange.intersect(12, maxRate);
             } else if (mime.equalsIgnoreCase(MediaFormat.MIMETYPE_VIDEO_MPEG4)) {
                 int maxWidth = 11, maxHeight = 9, maxRate = 15;
                 maxBlocks = 99;
@@ -2343,6 +2409,20 @@
         public static final int MPEG4Level4a     = 0x40;
         public static final int MPEG4Level5      = 0x80;
 
+        // from OMX_VIDEO_MPEG2PROFILETYPE
+        public static final int MPEG2ProfileSimple              = 0x00;
+        public static final int MPEG2ProfileMain                = 0x01;
+        public static final int MPEG2Profile422                 = 0x02;
+        public static final int MPEG2ProfileSNR                 = 0x03;
+        public static final int MPEG2ProfileSpatial             = 0x04;
+        public static final int MPEG2ProfileHigh                = 0x05;
+
+        // from OMX_VIDEO_MPEG2LEVELTYPE
+        public static final int MPEG2LevelLL     = 0x00;
+        public static final int MPEG2LevelML     = 0x01;
+        public static final int MPEG2LevelH14    = 0x02;
+        public static final int MPEG2LevelHL     = 0x03;
+
         // from OMX_AUDIO_AACPROFILETYPE
         public static final int AACObjectMain       = 1;
         public static final int AACObjectLC         = 2;
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index a33fa59..aaafa55 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -42,16 +42,17 @@
 import android.util.Log;
 import android.view.Surface;
 import android.view.SurfaceHolder;
+import android.widget.VideoView;
 import android.graphics.SurfaceTexture;
 import android.media.AudioManager;
 import android.media.MediaFormat;
 import android.media.MediaTimeProvider;
-import android.media.PlaybackSettings;
+import android.media.PlaybackParams;
 import android.media.SubtitleController;
 import android.media.SubtitleController.Anchor;
 import android.media.SubtitleData;
 import android.media.SubtitleTrack.RenderingWidget;
-import android.media.SyncSettings;
+import android.media.SyncParams;
 
 import com.android.internal.app.IAppOpsService;
 
@@ -480,7 +481,7 @@
  *     <td>{} </p></td>
  *     <td>This method can be called in any state and calling it does not change
  *         the object state. </p></td></tr>
- * <tr><td>setPlaybackSettings</p></td>
+ * <tr><td>setPlaybackParams</p></td>
  *     <td>any </p></td>
  *     <td>{} </p></td>
  *     <td>This method can be called in any state and calling it does not change
@@ -1407,68 +1408,68 @@
      * @throws IllegalArgumentException if audioMode is not supported.
      */
     public void setPlaybackRate(float rate, @PlaybackRateAudioMode int audioMode) {
-        PlaybackSettings settings = new PlaybackSettings();
-        settings.allowDefaults();
+        PlaybackParams params = new PlaybackParams();
+        params.allowDefaults();
         switch (audioMode) {
         case PLAYBACK_RATE_AUDIO_MODE_DEFAULT:
-            settings.setSpeed(rate).setPitch(1.0f);
+            params.setSpeed(rate).setPitch(1.0f);
             break;
         case PLAYBACK_RATE_AUDIO_MODE_STRETCH:
-            settings.setSpeed(rate).setPitch(1.0f)
-                    .setAudioFallbackMode(settings.AUDIO_FALLBACK_MODE_FAIL);
+            params.setSpeed(rate).setPitch(1.0f)
+                    .setAudioFallbackMode(params.AUDIO_FALLBACK_MODE_FAIL);
             break;
         case PLAYBACK_RATE_AUDIO_MODE_RESAMPLE:
-            settings.setSpeed(rate).setPitch(rate);
+            params.setSpeed(rate).setPitch(rate);
             break;
         default:
             final String msg = "Audio playback mode " + audioMode + " is not supported";
             throw new IllegalArgumentException(msg);
         }
-        setPlaybackSettings(settings);
+        setPlaybackParams(params);
     }
 
     /**
-     * Sets playback rate using {@link PlaybackSettings}.
+     * Sets playback rate using {@link PlaybackParams}.
      *
-     * @param settings the playback settings.
+     * @param params the playback params.
      *
      * @throws IllegalStateException if the internal player engine has not been
      * initialized.
-     * @throws IllegalArgumentException if settings is not supported.
+     * @throws IllegalArgumentException if params is not supported.
      */
-    public native void setPlaybackSettings(@NonNull PlaybackSettings settings);
+    public native void setPlaybackParams(@NonNull PlaybackParams params);
 
     /**
-     * Gets the playback settings, containing the current playback rate.
+     * Gets the playback params, containing the current playback rate.
      *
-     * @return the playback settings.
+     * @return the playback params.
      * @throws IllegalStateException if the internal player engine has not been
      * initialized.
      */
     @NonNull
-    public native PlaybackSettings getPlaybackSettings();
+    public native PlaybackParams getPlaybackParams();
 
     /**
      * Sets A/V sync mode.
      *
-     * @param settings the A/V sync settings to apply
+     * @param params the A/V sync params to apply
      *
      * @throws IllegalStateException if the internal player engine has not been
      * initialized.
-     * @throws IllegalArgumentException if settings are not supported.
+     * @throws IllegalArgumentException if params are not supported.
      */
-    public native void setSyncSettings(@NonNull SyncSettings settings);
+    public native void setSyncParams(@NonNull SyncParams params);
 
     /**
      * Gets the A/V sync mode.
      *
-     * @return the A/V sync settings
+     * @return the A/V sync params
      *
      * @throws IllegalStateException if the internal player engine has not been
      * initialized.
      */
     @NonNull
-    public native SyncSettings getSyncSettings();
+    public native SyncParams getSyncParams();
 
     /**
      * Seeks to specified time position.
@@ -1506,7 +1507,7 @@
             return new MediaTimestamp(
                     getCurrentPosition() * 1000L,
                     System.nanoTime(),
-                    isPlaying() ? getPlaybackSettings().getSpeed() : 0.f);
+                    isPlaying() ? getPlaybackParams().getSpeed() : 0.f);
         } catch (IllegalStateException e) {
             return null;
         }
@@ -1953,21 +1954,16 @@
 
         TrackInfo(Parcel in) {
             mTrackType = in.readInt();
-            // TODO: parcel in the full MediaFormat
+            // TODO: parcel in the full MediaFormat; currently we are using createSubtitleFormat
+            // even for audio/video tracks, meaning we only set the mime and language.
+            String mime = in.readString();
             String language = in.readString();
+            mFormat = MediaFormat.createSubtitleFormat(mime, language);
 
-            if (mTrackType == MEDIA_TRACK_TYPE_TIMEDTEXT) {
-                mFormat = MediaFormat.createSubtitleFormat(
-                    MEDIA_MIMETYPE_TEXT_SUBRIP, language);
-            } else if (mTrackType == MEDIA_TRACK_TYPE_SUBTITLE) {
-                String mime = in.readString();
-                mFormat = MediaFormat.createSubtitleFormat(mime, language);
+            if (mTrackType == MEDIA_TRACK_TYPE_SUBTITLE) {
                 mFormat.setInteger(MediaFormat.KEY_IS_AUTOSELECT, in.readInt());
                 mFormat.setInteger(MediaFormat.KEY_IS_DEFAULT, in.readInt());
                 mFormat.setInteger(MediaFormat.KEY_IS_FORCED_SUBTITLE, in.readInt());
-            } else {
-                mFormat = new MediaFormat();
-                mFormat.setString(MediaFormat.KEY_LANGUAGE, language);
             }
         }
 
@@ -2126,6 +2122,43 @@
         mSubtitleController.setAnchor(anchor);
     }
 
+    /**
+     * The private version of setSubtitleAnchor is used internally to set mSubtitleController if
+     * necessary when clients don't provide their own SubtitleControllers using the public version
+     * {@link #setSubtitleAnchor(SubtitleController, Anchor)} (e.g. {@link VideoView} provides one).
+     */
+    private synchronized void setSubtitleAnchor() {
+        if (mSubtitleController == null) {
+            final HandlerThread thread = new HandlerThread("SetSubtitleAnchorThread");
+            thread.start();
+            Handler handler = new Handler(thread.getLooper());
+            handler.post(new Runnable() {
+                @Override
+                public void run() {
+                    Context context = ActivityThread.currentApplication();
+                    mSubtitleController = new SubtitleController(context, mTimeProvider, MediaPlayer.this);
+                    mSubtitleController.setAnchor(new Anchor() {
+                        @Override
+                        public void setSubtitleWidget(RenderingWidget subtitleWidget) {
+                        }
+
+                        @Override
+                        public Looper getSubtitleLooper() {
+                            return Looper.getMainLooper();
+                        }
+                    });
+                    thread.getLooper().quitSafely();
+                }
+            });
+            try {
+                thread.join();
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                Log.w(TAG, "failed to join SetSubtitleAnchorThread");
+            }
+        }
+    }
+
     private final Object mInbandSubtitleLock = new Object();
     private SubtitleTrack[] mInbandSubtitleTracks;
     private int mSelectedSubtitleTrackIndex = -1;
@@ -2386,24 +2419,14 @@
         fFormat.setString(MediaFormat.KEY_MIME, mime);
         fFormat.setInteger(MediaFormat.KEY_IS_TIMED_TEXT, 1);
 
-        Context context = ActivityThread.currentApplication();
         // A MediaPlayer created by a VideoView should already have its mSubtitleController set.
         if (mSubtitleController == null) {
-            mSubtitleController = new SubtitleController(context, mTimeProvider, this);
-            mSubtitleController.setAnchor(new Anchor() {
-                @Override
-                public void setSubtitleWidget(RenderingWidget subtitleWidget) {
-                }
-
-                @Override
-                public Looper getSubtitleLooper() {
-                    return Looper.getMainLooper();
-                }
-            });
+            setSubtitleAnchor();
         }
 
         if (!mSubtitleController.hasRendererFor(fFormat)) {
             // test and add not atomic
+            Context context = ActivityThread.currentApplication();
             mSubtitleController.registerRenderer(new SRTRenderer(context, mEventHandler));
         }
         final SubtitleTrack track = mSubtitleController.addTrack(fFormat);
@@ -2801,6 +2824,13 @@
                         mSubtitleController.selectDefaultTrack();
                     }
                     break;
+                case MEDIA_INFO_BUFFERING_START:
+                case MEDIA_INFO_BUFFERING_END:
+                    TimeProvider timeProvider = mTimeProvider;
+                    if (timeProvider != null) {
+                        timeProvider.onBuffering(msg.arg1 == MEDIA_INFO_BUFFERING_START);
+                    }
+                    break;
                 }
 
                 if (mOnInfoListener != null) {
@@ -3339,6 +3369,7 @@
         private MediaPlayer mPlayer;
         private boolean mPaused = true;
         private boolean mStopped = true;
+        private boolean mBuffering;
         private long mLastReportedTime;
         private long mTimeAdjustment;
         // since we are expecting only a handful listeners per stream, there is
@@ -3432,12 +3463,22 @@
         }
 
         /** @hide */
+        public void onBuffering(boolean buffering) {
+            synchronized (this) {
+                if (DEBUG) Log.d(TAG, "onBuffering: " + buffering);
+                mBuffering = buffering;
+                scheduleNotification(REFRESH_AND_NOTIFY_TIME, 0 /* delay */);
+            }
+        }
+
+        /** @hide */
         public void onStopped() {
             synchronized(this) {
                 if (DEBUG) Log.d(TAG, "onStopped");
                 mPaused = true;
                 mStopped = true;
                 mSeeking = false;
+                mBuffering = false;
                 scheduleNotification(NOTIFY_STOP, 0 /* delay */);
             }
         }
@@ -3458,6 +3499,7 @@
                 synchronized(this) {
                     mStopped = false;
                     mSeeking = true;
+                    mBuffering = false;
                     scheduleNotification(NOTIFY_SEEK, 0 /* delay */);
                 }
             }
@@ -3660,7 +3702,7 @@
                         nanoTime >= mLastNanoTime + MAX_NS_WITHOUT_POSITION_CHECK) {
                     try {
                         mLastTimeUs = mPlayer.getCurrentPosition() * 1000L;
-                        mPaused = !mPlayer.isPlaying();
+                        mPaused = !mPlayer.isPlaying() || mBuffering;
                         if (DEBUG) Log.v(TAG, (mPaused ? "paused" : "playing") + " at " + mLastTimeUs);
                     } catch (IllegalStateException e) {
                         if (mPausing) {
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 1b054cc..f27e635 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -16,9 +16,9 @@
 
 package android.media;
 
+import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.app.ActivityThread;
-import android.app.Application;
 import android.hardware.Camera;
 import android.os.Handler;
 import android.os.Looper;
@@ -112,7 +112,8 @@
         /* Native setup requires a weak reference to our object.
          * It's easier to create it here than in C++.
          */
-        native_setup(new WeakReference<MediaRecorder>(this), packageName, getMyOpPackageName());
+        native_setup(new WeakReference<MediaRecorder>(this), packageName,
+                ActivityThread.currentOpPackageName());
     }
 
     /**
@@ -142,22 +143,28 @@
 
     /**
      * Configures the recorder to use a persistent surface when using SURFACE video source.
-     * <p> May only be called after {@link #prepare} in lieu of {@link #getSurface}.
-     * Frames rendered to the Surface before {@link #start} will be discarded.</p>
+     * <p> May only be called before {@link #prepare}. If called, {@link #getSurface} should
+     * not be used and will throw IllegalStateException. Frames rendered to the Surface
+     * before {@link #start} will be discarded.</p>
 
      * @param surface a persistent input surface created by
      *           {@link MediaCodec#createPersistentInputSurface}
-     * @throws IllegalStateException if it is called before {@link #prepare}, after
-     * {@link #stop}, or is called when VideoSource is not set to SURFACE.
+     * @throws IllegalStateException if it is called after {@link #prepare} and before
+     * {@link #stop}.
      * @throws IllegalArgumentException if the surface was not created by
      *           {@link MediaCodec#createPersistentInputSurface}.
      * @see MediaCodec#createPersistentInputSurface
      * @see MediaRecorder.VideoSource
      */
-    public void usePersistentSurface(Surface surface) {
-        throw new IllegalArgumentException("not implemented");
+    public void usePersistentSurface(@NonNull Surface surface) {
+        if (!(surface instanceof MediaCodec.PersistentSurface)) {
+            throw new IllegalArgumentException("not a PersistentSurface");
+        }
+        native_usePersistentSurface(surface);
     }
 
+    private native final void native_usePersistentSurface(@NonNull Surface surface);
+
     /**
      * Sets a Surface to show a preview of recorded media (video). Calls this
      * before prepare() to make sure that the desirable preview display is
@@ -178,9 +185,9 @@
     /**
      * Defines the audio source.
      * An audio source defines both a default physical source of audio signal, and a recording
-     * configuration; it's also known as a capture preset. These constants are for instance used
+     * configuration. These constants are for instance used
      * in {@link MediaRecorder#setAudioSource(int)} or
-     * {@link AudioRecord.Builder#setCapturePreset(int)}.
+     * {@link AudioRecord.Builder#setAudioSource(int)}.
      */
     public final class AudioSource {
 
@@ -1089,15 +1096,4 @@
 
     @Override
     protected void finalize() { native_finalize(); }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioRecord outside of an app");
-    }
 }
diff --git a/media/java/android/media/MediaSync.java b/media/java/android/media/MediaSync.java
index dc6760d..b7ef95c 100644
--- a/media/java/android/media/MediaSync.java
+++ b/media/java/android/media/MediaSync.java
@@ -20,7 +20,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.media.AudioTrack;
-import android.media.PlaybackSettings;
+import android.media.PlaybackParams;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -62,7 +62,7 @@
  *   // videoDecoder.releaseOutputBuffer(videoOutputBufferIx, videoPresentationTimeNs);
  *   // More details are available as below.
  *   ...
- *   sync.queueAudio(audioByteBuffer, bufferIndex, size, audioPresentationTimeUs); // non-blocking.
+ *   sync.queueAudio(audioByteBuffer, bufferIndex, audioPresentationTimeUs); // non-blocking.
  *   // The audioByteBuffer and bufferIndex will be returned via callback.
  *   // More details are available as below.
  *   ...
@@ -112,7 +112,7 @@
  * initial underrun.
  * <p>
  */
-final public class MediaSync {
+public final class MediaSync {
     /**
      * MediaSync callback interface. Used to notify the user asynchronously
      * of various MediaSync events.
@@ -170,14 +170,12 @@
     private static class AudioBuffer {
         public ByteBuffer mByteBuffer;
         public int mBufferIndex;
-        public int mSizeInBytes;
         long mPresentationTimeUs;
 
         public AudioBuffer(@NonNull ByteBuffer byteBuffer, int bufferIndex,
-                           int sizeInBytes, long presentationTimeUs) {
+                           long presentationTimeUs) {
             mByteBuffer = byteBuffer;
             mBufferIndex = bufferIndex;
-            mSizeInBytes = sizeInBytes;
             mPresentationTimeUs = presentationTimeUs;
         }
     }
@@ -199,6 +197,7 @@
     private final Object mAudioLock = new Object();
     private AudioTrack mAudioTrack = null;
     private List<AudioBuffer> mAudioBuffers = new LinkedList<AudioBuffer>();
+    // this is only used for paused/running decisions, so it is not affected by clock drift
     private float mPlaybackRate = 0.0f;
 
     private long mNativeContext;
@@ -311,13 +310,13 @@
      * @throws IllegalArgumentException if the surface has been released, is invalid,
      *     or can not be connected.
      * @throws IllegalStateException if setting the surface is not supported, e.g.
-     *     not in the Initialized state, or another surface has already been configured.
+     *     not in the Initialized state, or another surface has already been set.
      */
     public void setSurface(@Nullable Surface surface) {
-        native_configureSurface(surface);
+        native_setSurface(surface);
     }
 
-    private native final void native_configureSurface(@Nullable Surface surface);
+    private native final void native_setSurface(@Nullable Surface surface);
 
     /**
      * Sets the audio track for MediaSync.
@@ -327,21 +326,17 @@
      * @param audioTrack Specify an AudioTrack through which to render the audio data.
      * @throws IllegalArgumentException if the audioTrack has been released, or is invalid.
      * @throws IllegalStateException if setting the audio track is not supported, e.g.
-     *     not in the Initialized state, or another audio track has already been configured.
+     *     not in the Initialized state, or another audio track has already been set.
      */
     public void setAudioTrack(@Nullable AudioTrack audioTrack) {
-        // AudioTrack has sanity check for configured sample rate.
-        int nativeSampleRateInHz = (audioTrack == null ? 0 : audioTrack.getSampleRate());
-
-        native_configureAudioTrack(audioTrack, nativeSampleRateInHz);
+        native_setAudioTrack(audioTrack);
         mAudioTrack = audioTrack;
         if (audioTrack != null && mAudioThread == null) {
             createAudioThread();
         }
     }
 
-    private native final void native_configureAudioTrack(
-            @Nullable AudioTrack audioTrack, int nativeSampleRateInHz);
+    private native final void native_setAudioTrack(@Nullable AudioTrack audioTrack);
 
     /**
      * Requests a Surface to use as the input. This may only be called after
@@ -349,7 +344,7 @@
      * <p>
      * The application is responsible for calling release() on the Surface when
      * done.
-     * @throws IllegalStateException if not configured, or another input surface has
+     * @throws IllegalStateException if not set, or another input surface has
      *     already been created.
      */
     @NonNull
@@ -416,18 +411,18 @@
      * @throws IllegalArgumentException if audioMode is not supported.
      */
     public void setPlaybackRate(float rate, @PlaybackRateAudioMode int audioMode) {
-        PlaybackSettings rateSettings = new PlaybackSettings();
-        rateSettings.allowDefaults();
+        PlaybackParams rateParams = new PlaybackParams();
+        rateParams.allowDefaults();
         switch (audioMode) {
             case PLAYBACK_RATE_AUDIO_MODE_DEFAULT:
-                rateSettings.setSpeed(rate).setPitch(1.0f);
+                rateParams.setSpeed(rate).setPitch(1.0f);
                 break;
             case PLAYBACK_RATE_AUDIO_MODE_STRETCH:
-                rateSettings.setSpeed(rate).setPitch(1.0f)
-                        .setAudioFallbackMode(rateSettings.AUDIO_FALLBACK_MODE_FAIL);
+                rateParams.setSpeed(rate).setPitch(1.0f)
+                        .setAudioFallbackMode(rateParams.AUDIO_FALLBACK_MODE_FAIL);
                 break;
             case PLAYBACK_RATE_AUDIO_MODE_RESAMPLE:
-                rateSettings.setSpeed(rate).setPitch(rate);
+                rateParams.setSpeed(rate).setPitch(rate);
                 break;
             default:
             {
@@ -435,19 +430,19 @@
                 throw new IllegalArgumentException(msg);
             }
         }
-        setPlaybackSettings(rateSettings);
+        setPlaybackParams(rateParams);
     }
 
     /**
-     * Sets playback rate using {@link PlaybackSettings}.
+     * Sets playback rate using {@link PlaybackParams}.
      * <p>
-     * When using MediaSync with {@link AudioTrack}, set playback settings using this
+     * When using MediaSync with {@link AudioTrack}, set playback params using this
      * call instead of calling it directly on the track, so that the sync is aware of
-     * the settings change.
+     * the params change.
      * <p>
      * This call also works if there is no audio track.
      *
-     * @param settings the playback settings to use. {@link PlaybackSettings#getSpeed
+     * @param params the playback params to use. {@link PlaybackParams#getSpeed
      *     Speed} is the ratio between desired playback rate and normal one. 1.0 means
      *     normal playback speed. 0.0 means pause. Value larger than 1.0 means faster playback,
      *     while value between 0.0 and 1.0 for slower playback. <b>Note:</b> the normal rate
@@ -456,44 +451,19 @@
      *
      * @throws IllegalStateException if the internal sync engine or the audio track has not
      *     been initialized.
-     * @throws IllegalArgumentException if the settings are not supported.
+     * @throws IllegalArgumentException if the params are not supported.
      */
-    public void setPlaybackSettings(@NonNull PlaybackSettings settings) {
-        float rate;
-        try {
-            rate = settings.getSpeed();
-
-            // rate is specified
-            if (mAudioTrack != null) {
-                try {
-                    if (rate == 0.0) {
-                        mAudioTrack.pause();
-                    } else {
-                        mAudioTrack.setPlaybackSettings(settings);
-                        mAudioTrack.play();
-                    }
-                } catch (IllegalStateException e) {
-                    throw e;
-                }
-            }
-
-            synchronized(mAudioLock) {
-                mPlaybackRate = rate;
-            }
-            if (mPlaybackRate != 0.0 && mAudioThread != null) {
-                postRenderAudio(0);
-            }
-            native_setPlaybackRate(mPlaybackRate);
-        } catch (IllegalStateException e) {
-            // rate is not specified; still, propagate settings to audio track
-            if (mAudioTrack != null) {
-                mAudioTrack.setPlaybackSettings(settings);
-            }
+    public void setPlaybackParams(@NonNull PlaybackParams params) {
+        synchronized(mAudioLock) {
+            mPlaybackRate = native_setPlaybackParams(params);;
+        }
+        if (mPlaybackRate != 0.0 && mAudioThread != null) {
+            postRenderAudio(0);
         }
     }
 
     /**
-     * Gets the playback rate using {@link PlaybackSettings}.
+     * Gets the playback rate using {@link PlaybackParams}.
      *
      * @return the playback rate being used.
      *
@@ -501,40 +471,40 @@
      *     been initialized.
      */
     @NonNull
-    public PlaybackSettings getPlaybackSettings() {
-        if (mAudioTrack != null) {
-            return mAudioTrack.getPlaybackSettings();
-        } else {
-            PlaybackSettings settings = new PlaybackSettings();
-            settings.allowDefaults();
-            settings.setSpeed(mPlaybackRate);
-            return settings;
-        }
-    }
+    public native PlaybackParams getPlaybackParams();
 
-    private native final void native_setPlaybackRate(float rate);
+    private native float native_setPlaybackParams(@NonNull PlaybackParams params);
 
     /**
      * Sets A/V sync mode.
      *
-     * @param settings the A/V sync settings to apply
+     * @param params the A/V sync params to apply
      *
      * @throws IllegalStateException if the internal player engine has not been
      * initialized.
-     * @throws IllegalArgumentException if settings are not supported.
+     * @throws IllegalArgumentException if params are not supported.
      */
-    public native void setSyncSettings(@NonNull SyncSettings settings);
+    public void setSyncParams(@NonNull SyncParams params) {
+        synchronized(mAudioLock) {
+            mPlaybackRate = native_setSyncParams(params);;
+        }
+        if (mPlaybackRate != 0.0 && mAudioThread != null) {
+            postRenderAudio(0);
+        }
+    }
+
+    private native float native_setSyncParams(@NonNull SyncParams params);
 
     /**
      * Gets the A/V sync mode.
      *
-     * @return the A/V sync settings
+     * @return the A/V sync params
      *
      * @throws IllegalStateException if the internal player engine has not been
      * initialized.
      */
     @NonNull
-    public native SyncSettings getSyncSettings();
+    public native SyncParams getSyncParams();
 
     /**
      * Flushes all buffers from the sync object.
@@ -595,23 +565,20 @@
      *     to the client via registered callback.
      * @param bufferIndex the buffer index used to identify audioData. It will be returned to
      *     the client along with audioData. This helps applications to keep track of audioData.
-     * @param sizeInBytes number of bytes to queue.
      * @param presentationTimeUs the presentation timestamp in microseconds for the first frame
      *     in the buffer.
-     * @throws IllegalStateException if audio track is not configured or internal configureation
+     * @throws IllegalStateException if audio track is not set or internal configureation
      *     has not been done correctly.
      */
     public void queueAudio(
-            @NonNull ByteBuffer audioData, int bufferIndex, int sizeInBytes,
-            long presentationTimeUs) {
+            @NonNull ByteBuffer audioData, int bufferIndex, long presentationTimeUs) {
         if (mAudioTrack == null || mAudioThread == null) {
             throw new IllegalStateException(
-                    "AudioTrack is NOT configured or audio thread is not created");
+                    "AudioTrack is NOT set or audio thread is not created");
         }
 
         synchronized(mAudioLock) {
-            mAudioBuffers.add(new AudioBuffer(
-                    audioData, bufferIndex, sizeInBytes, presentationTimeUs));
+            mAudioBuffers.add(new AudioBuffer(audioData, bufferIndex, presentationTimeUs));
         }
 
         if (mPlaybackRate != 0.0) {
@@ -633,18 +600,19 @@
                     }
 
                     AudioBuffer audioBuffer = mAudioBuffers.get(0);
+                    int size = audioBuffer.mByteBuffer.remaining();
                     int sizeWritten = mAudioTrack.write(
                             audioBuffer.mByteBuffer,
-                            audioBuffer.mSizeInBytes,
+                            size,
                             AudioTrack.WRITE_NON_BLOCKING);
                     if (sizeWritten > 0) {
                         if (audioBuffer.mPresentationTimeUs != -1) {
                             native_updateQueuedAudioData(
-                                    audioBuffer.mSizeInBytes, audioBuffer.mPresentationTimeUs);
+                                    size, audioBuffer.mPresentationTimeUs);
                             audioBuffer.mPresentationTimeUs = -1;
                         }
 
-                        if (sizeWritten == audioBuffer.mSizeInBytes) {
+                        if (sizeWritten == size) {
                             postReturnByteBuffer(audioBuffer);
                             mAudioBuffers.remove(0);
                             if (!mAudioBuffers.isEmpty()) {
@@ -652,8 +620,6 @@
                             }
                             return;
                         }
-
-                        audioBuffer.mSizeInBytes -= sizeWritten;
                     }
                     long pendingTimeMs = TimeUnit.MICROSECONDS.toMillis(
                             native_getPlayTimeForPendingAudioFrames());
diff --git a/media/java/android/media/OnAudioDeviceConnectionListener.java b/media/java/android/media/OnAudioDeviceConnectionListener.java
index 71c135a..57e9e17 100644
--- a/media/java/android/media/OnAudioDeviceConnectionListener.java
+++ b/media/java/android/media/OnAudioDeviceConnectionListener.java
@@ -18,13 +18,13 @@
 
 /**
  * OnAudioDeviceConnectionListener defines the interface for notification listeners in the
- * {@link AudioDevicesManager}
+ * {@link AudioManager}
  */
 public interface OnAudioDeviceConnectionListener {
     /**
-     * Called by the {@link AudioDevicesManager} to indicate that an audio device has been
+     * Called by the {@link AudioManager} to indicate that an audio device has been
      * connected or disconnected. A listener will probably call the
-     * {@link AudioDevicesManager#listDevices} method to retrieve the current list of audio
+     * {@link AudioManager#getDevices} method to retrieve the current list of audio
      * devices.
      */
     public void onAudioDeviceConnection();
diff --git a/media/java/android/media/OnAudioRecordRoutingListener.java b/media/java/android/media/OnAudioRecordRoutingListener.java
deleted file mode 100644
index 8ff41c5..0000000
--- a/media/java/android/media/OnAudioRecordRoutingListener.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-/**
- * OnAudioDeviceConnectionListener defines the interface for notification listeners in the
- * {@link AudioDevicesManager}
- */
-public interface OnAudioRecordRoutingListener {
-    /**
-     * Called when the routing of an AudioRecord changes from either and explicit or
-     * policy rerouting.
-     */
-    public void onAudioRecordRouting(AudioRecord audioRecord);
-}
diff --git a/media/java/android/media/OnAudioTrackRoutingListener.java b/media/java/android/media/OnAudioTrackRoutingListener.java
deleted file mode 100644
index 18c72ef..0000000
--- a/media/java/android/media/OnAudioTrackRoutingListener.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.media;
-
-/**
- * OnAudioDeviceConnectionListener defines the interface for notification listeners in the
- * {@link AudioDevicesManager}
- */
-public interface OnAudioTrackRoutingListener {
-    /**
-     * Called when the routing of an AudioTrack changes from either and explicit or
-     * policy rerouting.
-     */
-    public void onAudioTrackRouting(AudioTrack audioTrack);
-}
diff --git a/media/java/android/media/PlaybackSettings.java b/media/java/android/media/PlaybackParams.java
similarity index 81%
rename from media/java/android/media/PlaybackSettings.java
rename to media/java/android/media/PlaybackParams.java
index b2e1033..e41b2b6 100644
--- a/media/java/android/media/PlaybackSettings.java
+++ b/media/java/android/media/PlaybackParams.java
@@ -22,21 +22,21 @@
 import android.annotation.IntDef;
 
 /**
- * Structure for common playback settings.
+ * Structure for common playback params.
  *
- * Used by {@link AudioTrack} {@link AudioTrack#getPlaybackSettings()} and
- * {@link AudioTrack#setPlaybackSettings(PlaybackSettings)}
+ * Used by {@link AudioTrack} {@link AudioTrack#getPlaybackParams()} and
+ * {@link AudioTrack#setPlaybackParams(PlaybackParams)}
  * to control playback behavior.
  * <p> <strong>audio fallback mode:</strong>
  * select out-of-range parameter handling.
  * <ul>
- * <li> {@link PlaybackSettings#AUDIO_FALLBACK_MODE_DEFAULT}:
+ * <li> {@link PlaybackParams#AUDIO_FALLBACK_MODE_DEFAULT}:
  *   System will determine best handling. </li>
- * <li> {@link PlaybackSettings#AUDIO_FALLBACK_MODE_MUTE}:
- *   Play silence for settings normally out of range.</li>
- * <li> {@link PlaybackSettings#AUDIO_FALLBACK_MODE_FAIL}:
+ * <li> {@link PlaybackParams#AUDIO_FALLBACK_MODE_MUTE}:
+ *   Play silence for params normally out of range.</li>
+ * <li> {@link PlaybackParams#AUDIO_FALLBACK_MODE_FAIL}:
  *   Return {@link java.lang.IllegalArgumentException} from
- *   <code>AudioTrack.setPlaybackSettings(PlaybackSettings)</code>.</li>
+ *   <code>AudioTrack.setPlaybackParams(PlaybackParams)</code>.</li>
  * </ul>
  * <p> <strong>pitch:</strong> increases or decreases the tonal frequency of the audio content.
  * It is expressed as a multiplicative factor, where normal pitch is 1.0f.
@@ -52,7 +52,7 @@
  * similar to {@link AudioTrack#setPlaybackRate(int)}.</li>
  * </ul>
  */
-public final class PlaybackSettings {
+public final class PlaybackParams {
     /** @hide */
     @IntDef(
         value = {
@@ -81,14 +81,14 @@
     /** @hide */
     public static final int AUDIO_STRETCH_MODE_VOICE = 1;
 
-    // flags to indicate which settings are actually set
+    // flags to indicate which params are actually set
     private static final int SET_SPEED               = 1 << 0;
     private static final int SET_PITCH               = 1 << 1;
     private static final int SET_AUDIO_FALLBACK_MODE = 1 << 2;
     private static final int SET_AUDIO_STRETCH_MODE  = 1 << 3;
     private int mSet = 0;
 
-    // settings
+    // params
     private int mAudioFallbackMode = AUDIO_FALLBACK_MODE_DEFAULT;
     private int mAudioStretchMode = AUDIO_STRETCH_MODE_DEFAULT;
     private float mPitch = 1.0f;
@@ -99,9 +99,9 @@
      * Otherwise a {@link java.lang.IllegalArgumentException} exception
      * is raised when getting those properties
      * which have defaults but have never been set.
-     * @return this <code>PlaybackSettings</code> instance.
+     * @return this <code>PlaybackParams</code> instance.
      */
-    public PlaybackSettings allowDefaults() {
+    public PlaybackParams allowDefaults() {
         mSet |= SET_AUDIO_FALLBACK_MODE | SET_AUDIO_STRETCH_MODE | SET_PITCH | SET_SPEED;
         return this;
     }
@@ -109,9 +109,9 @@
     /**
      * Sets the audio fallback mode.
      * @param audioFallbackMode
-     * @return this <code>PlaybackSettings</code> instance.
+     * @return this <code>PlaybackParams</code> instance.
      */
-    public PlaybackSettings setAudioFallbackMode(@AudioFallbackMode int audioFallbackMode) {
+    public PlaybackParams setAudioFallbackMode(@AudioFallbackMode int audioFallbackMode) {
         mAudioFallbackMode = audioFallbackMode;
         mSet |= SET_AUDIO_FALLBACK_MODE;
         return this;
@@ -133,9 +133,9 @@
      * @hide
      * Sets the audio stretch mode.
      * @param audioStretchMode
-     * @return this <code>PlaybackSettings</code> instance.
+     * @return this <code>PlaybackParams</code> instance.
      */
-    public PlaybackSettings setAudioStretchMode(@AudioStretchMode int audioStretchMode) {
+    public PlaybackParams setAudioStretchMode(@AudioStretchMode int audioStretchMode) {
         mAudioStretchMode = audioStretchMode;
         mSet |= SET_AUDIO_STRETCH_MODE;
         return this;
@@ -157,9 +157,9 @@
     /**
      * Sets the pitch factor.
      * @param pitch
-     * @return this <code>PlaybackSettings</code> instance.
+     * @return this <code>PlaybackParams</code> instance.
      */
-    public PlaybackSettings setPitch(float pitch) {
+    public PlaybackParams setPitch(float pitch) {
         mPitch = pitch;
         mSet |= SET_PITCH;
         return this;
@@ -180,9 +180,9 @@
     /**
      * Sets the speed factor.
      * @param speed
-     * @return this <code>PlaybackSettings</code> instance.
+     * @return this <code>PlaybackParams</code> instance.
      */
-    public PlaybackSettings setSpeed(float speed) {
+    public PlaybackParams setSpeed(float speed) {
         mSpeed = speed;
         mSet |= SET_SPEED;
         return this;
diff --git a/media/java/android/media/SyncSettings.java b/media/java/android/media/SyncParams.java
similarity index 87%
rename from media/java/android/media/SyncSettings.java
rename to media/java/android/media/SyncParams.java
index 9740147..00a8dc0 100644
--- a/media/java/android/media/SyncSettings.java
+++ b/media/java/android/media/SyncParams.java
@@ -22,31 +22,31 @@
 import android.annotation.IntDef;
 
 /**
- * Structure for common A/V sync settings.
+ * Structure for common A/V sync params.
  *
- * Used by {@link MediaSync} {link MediaSync#getSyncSettings()} and
- * {link MediaSync#setSyncSettings(SyncSettings)}
+ * Used by {@link MediaSync} {link MediaSync#getSyncParams()} and
+ * {link MediaSync#setSyncParams(SyncParams)}
  * to control A/V sync behavior.
  * <p> <strong>audio adjust mode:</strong>
  * select handling of audio track when changing playback speed due to sync.
  * <ul>
- * <li> {@link SyncSettings#AUDIO_ADJUST_MODE_DEFAULT}:
+ * <li> {@link SyncParams#AUDIO_ADJUST_MODE_DEFAULT}:
  *   System will determine best handling. </li>
- * <li> {@link SyncSettings#AUDIO_ADJUST_MODE_STRETCH}:
+ * <li> {@link SyncParams#AUDIO_ADJUST_MODE_STRETCH}:
  *   Change the speed of audio playback without altering its pitch.</li>
- * <li> {@link SyncSettings#AUDIO_ADJUST_MODE_RESAMPLE}:
+ * <li> {@link SyncParams#AUDIO_ADJUST_MODE_RESAMPLE}:
  *   Change the speed of audio playback by resampling the audio.</li>
  * </ul>
  * <p> <strong>sync source:</strong> select
  * clock source for sync.
  * <ul>
- * <li> {@link SyncSettings#SYNC_SOURCE_DEFAULT}:
+ * <li> {@link SyncParams#SYNC_SOURCE_DEFAULT}:
  *   System will determine best selection.</li>
- * <li> {@link SyncSettings#SYNC_SOURCE_SYSTEM_CLOCK}:
+ * <li> {@link SyncParams#SYNC_SOURCE_SYSTEM_CLOCK}:
  *   Use system clock for sync source.</li>
- * <li> {@link SyncSettings#SYNC_SOURCE_AUDIO}:
+ * <li> {@link SyncParams#SYNC_SOURCE_AUDIO}:
  *   Use audio track for sync source.</li>
- * <li> {@link SyncSettings#SYNC_SOURCE_VSYNC}:
+ * <li> {@link SyncParams#SYNC_SOURCE_VSYNC}:
  *   Syncronize media to vsync.</li>
  * </ul>
  * <p> <strong>tolerance:</strong> specifies the amount of allowed playback rate
@@ -55,7 +55,7 @@
  * <p> <strong>frameRate:</strong> initial hint for video frame rate. Used when
  * sync source is vsync.
  */
-public final class SyncSettings {
+public final class SyncParams {
     /** @hide */
     @IntDef(
         value = {
@@ -155,14 +155,14 @@
      */
     public static final int AUDIO_ADJUST_MODE_RESAMPLE = 2;
 
-    // flags to indicate which settings are actually set
+    // flags to indicate which params are actually set
     private static final int SET_SYNC_SOURCE         = 1 << 0;
     private static final int SET_AUDIO_ADJUST_MODE   = 1 << 1;
     private static final int SET_TOLERANCE           = 1 << 2;
     private static final int SET_FRAME_RATE          = 1 << 3;
     private int mSet = 0;
 
-    // settings
+    // params
     private int mAudioAdjustMode = AUDIO_ADJUST_MODE_STRETCH;
     private int mSyncSource = SYNC_SOURCE_DEFAULT;
     private float mTolerance = 0.f;
@@ -173,9 +173,9 @@
      * Otherwise a {@link java.lang.IllegalArgumentException} exception
      * is raised when getting those properties
      * which have defaults but have never been set.
-     * @return this <code>SyncSettings</code> instance.
+     * @return this <code>SyncParams</code> instance.
      */
-    public SyncSettings allowDefaults() {
+    public SyncParams allowDefaults() {
         mSet |= SET_SYNC_SOURCE | SET_AUDIO_ADJUST_MODE | SET_TOLERANCE;
         return this;
     }
@@ -183,9 +183,9 @@
     /**
      * Sets the audio adjust mode.
      * @param audioAdjustMode
-     * @return this <code>SyncSettings</code> instance.
+     * @return this <code>SyncParams</code> instance.
      */
-    public SyncSettings setAudioAdjustMode(@AudioAdjustMode int audioAdjustMode) {
+    public SyncParams setAudioAdjustMode(@AudioAdjustMode int audioAdjustMode) {
         mAudioAdjustMode = audioAdjustMode;
         mSet |= SET_AUDIO_ADJUST_MODE;
         return this;
@@ -206,9 +206,9 @@
     /**
      * Sets the sync source.
      * @param syncSource
-     * @return this <code>SyncSettings</code> instance.
+     * @return this <code>SyncParams</code> instance.
      */
-    public SyncSettings setSyncSource(@SyncSource int syncSource) {
+    public SyncParams setSyncSource(@SyncSource int syncSource) {
         mSyncSource = syncSource;
         mSet |= SET_SYNC_SOURCE;
         return this;
@@ -231,9 +231,9 @@
      * @param tolerance A non-negative number representing
      *     the maximum deviation of the playback rate from the playback rate
      *     set. ({@code abs(actual_rate - set_rate) / set_rate})
-     * @return this <code>SyncSettings</code> instance.
+     * @return this <code>SyncParams</code> instance.
      */
-    public SyncSettings setTolerance(float tolerance) {
+    public SyncParams setTolerance(float tolerance) {
         mTolerance = tolerance;
         mSet |= SET_TOLERANCE;
         return this;
@@ -257,9 +257,9 @@
      * Sets the video frame rate hint to be used. By default the frame rate is unspecified.
      * @param frameRate A non-negative number used as an initial hint on
      *     the video frame rate to be used when using vsync as the sync source.
-     * @return this <code>SyncSettings</code> instance.
+     * @return this <code>SyncParams</code> instance.
      */
-    public SyncSettings setFrameRate(float frameRate) {
+    public SyncParams setFrameRate(float frameRate) {
         mFrameRate = frameRate;
         mSet |= SET_FRAME_RATE;
         return this;
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index 9fc90df..b94a7e6 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -19,7 +19,6 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.app.ActivityThread;
-import android.app.Application;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -397,7 +396,7 @@
         // native initialization
         int initResult = native_setup(new WeakReference<AudioEffect>(this),
                 type.toString(), uuid.toString(), priority, audioSession, id,
-                desc, getMyOpPackageName());
+                desc, ActivityThread.currentOpPackageName());
         if (initResult != SUCCESS && initResult != ALREADY_EXISTS) {
             Log.e(TAG, "Error code " + initResult
                     + " when initializing AudioEffect.");
@@ -1359,15 +1358,4 @@
         }
         return b;
     }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioEffect outside of an app");
-    }
 }
diff --git a/media/java/android/media/audiofx/Visualizer.java b/media/java/android/media/audiofx/Visualizer.java
index 0c48063..0fe7246 100644
--- a/media/java/android/media/audiofx/Visualizer.java
+++ b/media/java/android/media/audiofx/Visualizer.java
@@ -17,7 +17,6 @@
 package android.media.audiofx;
 
 import android.app.ActivityThread;
-import android.app.Application;
 import android.util.Log;
 import java.lang.ref.WeakReference;
 import android.os.Handler;
@@ -209,7 +208,7 @@
             mState = STATE_UNINITIALIZED;
             // native initialization
             int result = native_setup(new WeakReference<Visualizer>(this), audioSession, id,
-                    getMyOpPackageName());
+                    ActivityThread.currentOpPackageName());
             if (result != SUCCESS && result != ALREADY_EXISTS) {
                 Log.e(TAG, "Error code "+result+" when initializing Visualizer.");
                 switch (result) {
@@ -769,16 +768,5 @@
         }
 
     }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioRecord outside of an app");
-    }
 }
 
diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java
index 6aa4d8a..4ffac6d 100644
--- a/media/java/android/media/audiopolicy/AudioMix.java
+++ b/media/java/android/media/audiopolicy/AudioMix.java
@@ -36,20 +36,30 @@
     private int mRouteFlags;
     private String mRegistrationId;
     private int mMixType = MIX_TYPE_INVALID;
-    private int mMixState = MIX_STATE_DISABLED;
+    int mMixState = MIX_STATE_DISABLED;
+    int mCallbackFlags;
 
     /**
      * All parameters are guaranteed valid through the Builder.
      */
-    private AudioMix(AudioMixingRule rule, AudioFormat format, int routeFlags) {
+    private AudioMix(AudioMixingRule rule, AudioFormat format, int routeFlags, int callbackFlags) {
         mRule = rule;
         mFormat = format;
         mRouteFlags = routeFlags;
         mRegistrationId = null;
         mMixType = rule.getTargetMixType();
+        mCallbackFlags = callbackFlags;
     }
 
-    // ROUTE_FLAG_* values to keep in sync with frameworks/av/include/media/AudioPolicy.h
+    // CALLBACK_FLAG_* values: keep in sync with AudioMix::kCbFlag* values defined
+    // in frameworks/av/include/media/AudioPolicy.h
+    /** @hide */
+    public final static int CALLBACK_FLAG_NOTIFY_ACTIVITY = 0x1;
+    // when adding new MIX_FLAG_* flags, add them to this mask of authorized masks:
+    private final static int CALLBACK_FLAGS_ALL = CALLBACK_FLAG_NOTIFY_ACTIVITY;
+
+    // ROUTE_FLAG_* values: keep in sync with MIX_ROUTE_FLAG_* values defined
+    // in frameworks/av/include/media/AudioPolicy.h
     /**
      * An audio mix behavior where the output of the mix is sent to the original destination of
      * the audio signal, i.e. an output device for an output mix, or a recording for an input mix.
@@ -161,6 +171,7 @@
         private AudioMixingRule mRule = null;
         private AudioFormat mFormat = null;
         private int mRouteFlags = 0;
+        private int mCallbackFlags = 0;
 
         /**
          * @hide
@@ -199,6 +210,22 @@
         }
 
         /**
+         * @hide
+         * Only used by AudioPolicyConfig, not a public API.
+         * @param callbackFlags which callbacks are called from native
+         * @return the same Builder instance.
+         * @throws IllegalArgumentException
+         */
+        public Builder setCallbackFlags(int flags) throws IllegalArgumentException {
+            if ((flags != 0) && ((flags & CALLBACK_FLAGS_ALL) == 0)) {
+                throw new IllegalArgumentException("Illegal callback flags 0x"
+                        + Integer.toHexString(flags).toUpperCase());
+            }
+            mCallbackFlags = flags;
+            return this;
+        }
+
+        /**
          * Sets the {@link AudioFormat} for the mix.
          * @param format a non-null {@link AudioFormat} instance.
          * @return the same Builder instance.
@@ -256,7 +283,7 @@
                 }
                 mFormat = new AudioFormat.Builder().setSampleRate(rate).build();
             }
-            return new AudioMix(mRule, mFormat, mRouteFlags);
+            return new AudioMix(mRule, mFormat, mRouteFlags, mCallbackFlags);
         }
     }
 }
diff --git a/media/java/android/media/audiopolicy/AudioPolicy.java b/media/java/android/media/audiopolicy/AudioPolicy.java
index f128044..423b467 100644
--- a/media/java/android/media/audiopolicy/AudioPolicy.java
+++ b/media/java/android/media/audiopolicy/AudioPolicy.java
@@ -189,6 +189,12 @@
 
         @SystemApi
         public AudioPolicy build() {
+            if (mStatusListener != null) {
+                // the AudioPolicy status listener includes updates on each mix activity state
+                for (AudioMix mix : mMixes) {
+                    mix.mCallbackFlags |= AudioMix.CALLBACK_FLAG_NOTIFY_ACTIVITY;
+                }
+            }
             return new AudioPolicy(new AudioPolicyConfig(mMixes), mContext, mLooper,
                     mFocusListener, mStatusListener);
         }
@@ -432,6 +438,18 @@
                         + afi.getClientId() + "wasNotified=" + wasNotified);
             }
         }
+
+        public void notifyMixStateUpdate(String regId, int state) {
+            for (AudioMix mix : mConfig.getMixes()) {
+                if (mix.getRegistration().equals(regId)) {
+                    mix.mMixState = state;
+                    sendMsg(MSG_MIX_STATE_UPDATE, mix, 0/*ignored*/);
+                    if (DEBUG) {
+                        Log.v(TAG, "notifyMixStateUpdate: regId=" + regId + " state=" + state);
+                    }
+                }
+            }
+        }
     };
 
     //==================================================
@@ -440,6 +458,7 @@
     private final static int MSG_POLICY_STATUS_CHANGE = 0;
     private final static int MSG_FOCUS_GRANT = 1;
     private final static int MSG_FOCUS_LOSS = 2;
+    private final static int MSG_MIX_STATE_UPDATE = 3;
 
     private class EventHandler extends Handler {
         public EventHandler(AudioPolicy ap, Looper looper) {
@@ -464,6 +483,11 @@
                                 (AudioFocusInfo) msg.obj, msg.arg1 != 0);
                     }
                     break;
+                case MSG_MIX_STATE_UPDATE:
+                    if (mStatusListener != null) {
+                        mStatusListener.onMixStateUpdate((AudioMix) msg.obj);
+                    }
+                    break;
                 default:
                     Log.e(TAG, "Unknown event " + msg.what);
             }
diff --git a/media/java/android/media/audiopolicy/AudioPolicyConfig.java b/media/java/android/media/audiopolicy/AudioPolicyConfig.java
index 917e07b..252f5f4 100644
--- a/media/java/android/media/audiopolicy/AudioPolicyConfig.java
+++ b/media/java/android/media/audiopolicy/AudioPolicyConfig.java
@@ -59,6 +59,10 @@
         mMixes.add(mix);
     }
 
+    public ArrayList<AudioMix> getMixes() {
+        return mMixes;
+    }
+
     @Override
     public int hashCode() {
         return Objects.hash(mMixes);
@@ -75,6 +79,8 @@
         for (AudioMix mix : mMixes) {
             // write mix route flags
             dest.writeInt(mix.getRouteFlags());
+            // write callback flags
+            dest.writeInt(mix.mCallbackFlags);
             // write mix format
             dest.writeInt(mix.getFormat().getSampleRate());
             dest.writeInt(mix.getFormat().getEncoding());
@@ -96,6 +102,8 @@
             // read mix route flags
             int routeFlags = in.readInt();
             mixBuilder.setRouteFlags(routeFlags);
+            // read callback flags
+            mixBuilder.setCallbackFlags(in.readInt());
             // read mix format
             int sampleRate = in.readInt();
             int encoding = in.readInt();
diff --git a/media/java/android/media/audiopolicy/IAudioPolicyCallback.aidl b/media/java/android/media/audiopolicy/IAudioPolicyCallback.aidl
index c777c58..ad8af15 100644
--- a/media/java/android/media/audiopolicy/IAudioPolicyCallback.aidl
+++ b/media/java/android/media/audiopolicy/IAudioPolicyCallback.aidl
@@ -25,4 +25,7 @@
     // callbacks for audio focus
     void notifyAudioFocusGrant(in AudioFocusInfo afi, int requestResult);
     void notifyAudioFocusLoss(in AudioFocusInfo afi, boolean wasNotified);
+
+    // callback for mix activity status update
+    void notifyMixStateUpdate(in String regId, int state);
 }
diff --git a/media/java/android/media/midi/MidiDeviceInfo.java b/media/java/android/media/midi/MidiDeviceInfo.java
index 35374ed..57607e9 100644
--- a/media/java/android/media/midi/MidiDeviceInfo.java
+++ b/media/java/android/media/midi/MidiDeviceInfo.java
@@ -298,6 +298,9 @@
 
     @Override
     public String toString() {
+        // This is a hack to force the mProperties Bundle to unparcel so we can
+        // print all the names and values.
+        mProperties.getString(PROPERTY_NAME);
         return ("MidiDeviceInfo[mType=" + mType +
                 ",mInputPortCount=" + mInputPortCount +
                 ",mOutputPortCount=" + mOutputPortCount +
diff --git a/media/java/android/media/midi/MidiDeviceStatus.java b/media/java/android/media/midi/MidiDeviceStatus.java
index 7522dcf..d4abeff 100644
--- a/media/java/android/media/midi/MidiDeviceStatus.java
+++ b/media/java/android/media/midi/MidiDeviceStatus.java
@@ -89,10 +89,9 @@
 
     @Override
     public String toString() {
-        StringBuilder builder = new StringBuilder(mDeviceInfo.toString());
         int inputPortCount = mDeviceInfo.getInputPortCount();
         int outputPortCount = mDeviceInfo.getOutputPortCount();
-        builder.append(" mInputPortOpen=[");
+        StringBuilder builder = new StringBuilder("mInputPortOpen=[");
         for (int i = 0; i < inputPortCount; i++) {
             builder.append(mInputPortOpen[i]);
             if (i < inputPortCount -1) {
diff --git a/media/java/android/media/midi/MidiReceiver.java b/media/java/android/media/midi/MidiReceiver.java
index d069075..f8799d4 100644
--- a/media/java/android/media/midi/MidiReceiver.java
+++ b/media/java/android/media/midi/MidiReceiver.java
@@ -23,6 +23,10 @@
  */
 abstract public class MidiReceiver {
     /**
+     * Although public, this method should be considered a private implementation
+     * detail. Client code should call {@link #send} or {@link #sendWithTimestamp}
+     * instead.
+     *
      * Called to pass MIDI data to the receiver.
      * May fail if count exceeds {@link #getMaxMessageSize}.
      *
diff --git a/media/java/android/media/routing/IMediaRouteClientCallback.aidl b/media/java/android/media/routing/IMediaRouteClientCallback.aidl
deleted file mode 100644
index d90ea3b..0000000
--- a/media/java/android/media/routing/IMediaRouteClientCallback.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 2014 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.media.routing;
-
-import android.media.routing.MediaRouteSelector;
-import android.media.routing.ParcelableConnectionInfo;
-import android.media.routing.ParcelableDestinationInfo;
-import android.media.routing.ParcelableRouteInfo;
-import android.os.IBinder;
-import android.os.Bundle;
-
-/**
- * @hide
- */
-oneway interface IMediaRouteClientCallback {
-    void onDestinationFound(int seq, in ParcelableDestinationInfo destination,
-            in ParcelableRouteInfo[] routes);
-
-    void onDestinationLost(int seq, String id);
-
-    void onDiscoveryFailed(int seq, int error, in CharSequence message, in Bundle extras);
-
-    void onConnected(int seq, in ParcelableConnectionInfo connection);
-
-    void onDisconnected(int seq);
-
-    void onConnectionFailed(int seq, int error, in CharSequence message, in Bundle extras);
-}
diff --git a/media/java/android/media/routing/IMediaRouteService.aidl b/media/java/android/media/routing/IMediaRouteService.aidl
deleted file mode 100644
index 493ab6d..0000000
--- a/media/java/android/media/routing/IMediaRouteService.aidl
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 2014 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.media.routing;
-
-import android.media.routing.IMediaRouteClientCallback;
-import android.media.routing.MediaRouteSelector;
-import android.os.Bundle;
-
-/**
- * Interface to an app's MediaRouteService.
- * @hide
- */
-oneway interface IMediaRouteService {
-    void registerClient(int clientUid, String clientPackageName,
-            in IMediaRouteClientCallback callback);
-
-    void unregisterClient(in IMediaRouteClientCallback callback);
-
-    void startDiscovery(in IMediaRouteClientCallback callback, int seq,
-            in List<MediaRouteSelector> selectors, int flags);
-
-    void stopDiscovery(in IMediaRouteClientCallback callback);
-
-    void connect(in IMediaRouteClientCallback callback, int seq,
-            String destinationId, String routeId, int flags, in Bundle extras);
-
-    void disconnect(in IMediaRouteClientCallback callback);
-
-    void pauseStream(in IMediaRouteClientCallback callback);
-
-    void resumeStream(in IMediaRouteClientCallback callback);
-}
-
diff --git a/media/java/android/media/routing/IMediaRouterDelegate.aidl b/media/java/android/media/routing/IMediaRouterDelegate.aidl
deleted file mode 100644
index 35f84c8..0000000
--- a/media/java/android/media/routing/IMediaRouterDelegate.aidl
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (C) 2014 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.media.routing;
-
-/** @hide */
-interface IMediaRouterDelegate {
-
-}
-
diff --git a/media/java/android/media/routing/IMediaRouterRoutingCallback.aidl b/media/java/android/media/routing/IMediaRouterRoutingCallback.aidl
deleted file mode 100644
index 173ae55..0000000
--- a/media/java/android/media/routing/IMediaRouterRoutingCallback.aidl
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (C) 2014 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.media.routing;
-
-/** @hide */
-interface IMediaRouterRoutingCallback {
-
-}
-
diff --git a/media/java/android/media/routing/IMediaRouterStateCallback.aidl b/media/java/android/media/routing/IMediaRouterStateCallback.aidl
deleted file mode 100644
index 0299904..0000000
--- a/media/java/android/media/routing/IMediaRouterStateCallback.aidl
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (C) 2014 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.media.routing;
-
-/** @hide */
-interface IMediaRouterStateCallback {
-
-}
-
diff --git a/media/java/android/media/routing/MediaRouteSelector.aidl b/media/java/android/media/routing/MediaRouteSelector.aidl
deleted file mode 100644
index 37bfa4a..0000000
--- a/media/java/android/media/routing/MediaRouteSelector.aidl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2014, 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.media.routing;
-
-parcelable MediaRouteSelector;
diff --git a/media/java/android/media/routing/MediaRouteSelector.java b/media/java/android/media/routing/MediaRouteSelector.java
deleted file mode 100644
index 0bfc796..0000000
--- a/media/java/android/media/routing/MediaRouteSelector.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright (C) 2014 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.media.routing;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.media.routing.MediaRouter.RouteFeatures;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A media route selector consists of a set of constraints that are used to select
- * the routes to which an application would like to connect.  The constraints consist
- * of a set of required or optional features and protocols.  The constraints may also
- * require the use of a specific media route service package or additional characteristics
- * that are described by a bundle of extra parameters.
- * <p>
- * The application will typically create several different selectors that express
- * various combinations of characteristics that it would like to use together when
- * it connects to a destination media device.  For each destination that is discovered,
- * media route services will publish some number of routes and include information
- * about which selector each route matches.  The application will then choose among
- * these routes to determine which best satisfies its desired purpose and connect to it.
- * </p>
- */
-public final class MediaRouteSelector implements Parcelable {
-    private final int mRequiredFeatures;
-    private final int mOptionalFeatures;
-    private final List<String> mRequiredProtocols;
-    private final List<String> mOptionalProtocols;
-    private final String mServicePackageName;
-    private final Bundle mExtras;
-
-    MediaRouteSelector(int requiredFeatures, int optionalFeatures,
-            List<String> requiredProtocols, List<String> optionalProtocols,
-            String servicePackageName, Bundle extras) {
-        mRequiredFeatures = requiredFeatures;
-        mOptionalFeatures = optionalFeatures;
-        mRequiredProtocols = requiredProtocols;
-        mOptionalProtocols = optionalProtocols;
-        mServicePackageName = servicePackageName;
-        mExtras = extras;
-    }
-
-    /**
-     * Gets the set of required route features.
-     *
-     * @return A set of required route feature flags.
-     */
-    public @RouteFeatures int getRequiredFeatures() {
-        return mRequiredFeatures;
-    }
-
-    /**
-     * Gets the set of optional route features.
-     *
-     * @return A set of optional route feature flags.
-     */
-    public @RouteFeatures int getOptionalFeatures() {
-        return mOptionalFeatures;
-    }
-
-    /**
-     * Gets the list of route protocols that a route must support in order to be selected.
-     * <p>
-     * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-     * for more information.
-     * </p>
-     *
-     * @return The list of fully qualified route protocol names.
-     */
-    public @NonNull List<String> getRequiredProtocols() {
-        return mRequiredProtocols;
-    }
-
-    /**
-     * Gets the list of optional route protocols that a client may use if they are available.
-     * <p>
-     * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-     * for more information.
-     * </p>
-     *
-     * @return The list of optional fully qualified route protocol names.
-     */
-    public @NonNull List<String> getOptionalProtocols() {
-        return mOptionalProtocols;
-    }
-
-    /**
-     * Returns true if the selector includes a required or optional request for
-     * the specified protocol using its fully qualified class name.
-     * <p>
-     * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-     * for more information.
-     * </p>
-     *
-     * @param clazz The protocol class.
-     * @return True if the protocol was requested.
-     */
-    public boolean containsProtocol(@NonNull Class<?> clazz) {
-        return containsProtocol(clazz.getName());
-    }
-
-    /**
-     * Returns true if the selector includes a required or optional request for
-     * the specified protocol.
-     * <p>
-     * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-     * for more information.
-     * </p>
-     *
-     * @param name The name of the protocol.
-     * @return True if the protocol was requested.
-     */
-    public boolean containsProtocol(@NonNull String name) {
-        return mRequiredProtocols.contains(name)
-                || mOptionalProtocols.contains(name);
-    }
-
-    /**
-     * Gets the package name of a specific media route service that this route selector
-     * requires.
-     *
-     * @return The required media route service package name, or null if none.
-     */
-    public @Nullable String getServicePackageName() {
-        return mServicePackageName;
-    }
-
-    /**
-     * Gets optional extras that may be used to select or configure routes for a
-     * particular purpose.  Some extras may be used by media route services to apply
-     * additional constraints or parameters for the routes to be discovered.
-     *
-     * @return The optional extras, or null if none.
-     */
-    public @Nullable Bundle getExtras() {
-        return mExtras;
-    }
-
-    @Override
-    public String toString() {
-        return "MediaRouteSelector{ "
-                + ", requiredFeatures=0x" + Integer.toHexString(mRequiredFeatures)
-                + ", optionalFeatures=0x" + Integer.toHexString(mOptionalFeatures)
-                + ", requiredProtocols=" + mRequiredProtocols
-                + ", optionalProtocols=" + mOptionalProtocols
-                + ", servicePackageName=" + mServicePackageName
-                + ", extras=" + mExtras + " }";
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(mRequiredFeatures);
-        dest.writeInt(mOptionalFeatures);
-        dest.writeStringList(mRequiredProtocols);
-        dest.writeStringList(mOptionalProtocols);
-        dest.writeString(mServicePackageName);
-        dest.writeBundle(mExtras);
-    }
-
-    public static final Parcelable.Creator<MediaRouteSelector> CREATOR =
-            new Parcelable.Creator<MediaRouteSelector>() {
-        @Override
-        public MediaRouteSelector createFromParcel(Parcel source) {
-            int requiredFeatures = source.readInt();
-            int optionalFeatures = source.readInt();
-            ArrayList<String> requiredProtocols = new ArrayList<String>();
-            ArrayList<String> optionalProtocols = new ArrayList<String>();
-            source.readStringList(requiredProtocols);
-            source.readStringList(optionalProtocols);
-            return new MediaRouteSelector(requiredFeatures, optionalFeatures,
-                    requiredProtocols, optionalProtocols,
-                    source.readString(), source.readBundle());
-        }
-
-        @Override
-        public MediaRouteSelector[] newArray(int size) {
-            return new MediaRouteSelector[size];
-        }
-    };
-
-    /**
-     * Builder for {@link MediaRouteSelector} objects.
-     */
-    public static final class Builder {
-        private int mRequiredFeatures;
-        private int mOptionalFeatures;
-        private final ArrayList<String> mRequiredProtocols = new ArrayList<String>();
-        private final ArrayList<String> mOptionalProtocols = new ArrayList<String>();
-        private String mServicePackageName;
-        private Bundle mExtras;
-
-        /**
-         * Creates an initially empty selector builder.
-         */
-        public Builder() {
-        }
-
-        /**
-         * Sets the set of required route features.
-         *
-         * @param features A set of required route feature flags.
-         */
-        public @NonNull Builder setRequiredFeatures(@RouteFeatures int features) {
-            mRequiredFeatures = features;
-            return this;
-        }
-
-        /**
-         * Sets the set of optional route features.
-         *
-         * @param features A set of optional route feature flags.
-         */
-        public @NonNull Builder setOptionalFeatures(@RouteFeatures int features) {
-            mOptionalFeatures = features;
-            return this;
-        }
-
-        /**
-         * Adds a route protocol that a route must support in order to be selected
-         * using its fully qualified class name.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         *
-         * @param clazz The protocol class.
-         * @return this
-         */
-        public @NonNull Builder addRequiredProtocol(@NonNull Class<?> clazz) {
-            if (clazz == null) {
-                throw new IllegalArgumentException("clazz must not be null");
-            }
-            return addRequiredProtocol(clazz.getName());
-        }
-
-        /**
-         * Adds a route protocol that a route must support in order to be selected.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         *
-         * @param name The fully qualified name of the required protocol.
-         * @return this
-         */
-        public @NonNull Builder addRequiredProtocol(@NonNull String name) {
-            if (TextUtils.isEmpty(name)) {
-                throw new IllegalArgumentException("name must not be null or empty");
-            }
-            mRequiredProtocols.add(name);
-            return this;
-        }
-
-        /**
-         * Adds an optional route protocol that a client may use if available
-         * using its fully qualified class name.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         *
-         * @param clazz The protocol class.
-         * @return this
-         */
-        public @NonNull Builder addOptionalProtocol(@NonNull Class<?> clazz) {
-            if (clazz == null) {
-                throw new IllegalArgumentException("clazz must not be null");
-            }
-            return addOptionalProtocol(clazz.getName());
-        }
-
-        /**
-         * Adds an optional route protocol that a client may use if available.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         *
-         * @param name The fully qualified name of the optional protocol.
-         * @return this
-         */
-        public @NonNull Builder addOptionalProtocol(@NonNull String name) {
-            if (TextUtils.isEmpty(name)) {
-                throw new IllegalArgumentException("name must not be null or empty");
-            }
-            mOptionalProtocols.add(name);
-            return this;
-        }
-
-        /**
-         * Sets the package name of the media route service to which this selector
-         * appertains.
-         * <p>
-         * If a package name is specified here then this selector will only be
-         * passed to media route services from that package.  This has the effect
-         * of restricting the set of matching routes to just those that are offered
-         * by that package.
-         * </p>
-         *
-         * @param packageName The required service package name, or null if none.
-         * @return this
-         */
-        public @NonNull Builder setServicePackageName(@Nullable String packageName) {
-            mServicePackageName = packageName;
-            return this;
-        }
-
-        /**
-         * Sets optional extras that may be used to select or configure routes for a
-         * particular purpose.  Some extras may be used by route services to specify
-         * additional constraints or parameters for the routes to be discovered.
-         *
-         * @param extras The optional extras, or null if none.
-         * @return this
-         */
-        public @NonNull Builder setExtras(@Nullable Bundle extras) {
-            mExtras = extras;
-            return this;
-        }
-
-        /**
-         * Builds the {@link MediaRouteSelector} object.
-         *
-         * @return The new media route selector instance.
-         */
-        public @NonNull MediaRouteSelector build() {
-            return new MediaRouteSelector(mRequiredFeatures, mOptionalFeatures,
-                    mRequiredProtocols, mOptionalProtocols, mServicePackageName, mExtras);
-        }
-    }
-}
diff --git a/media/java/android/media/routing/MediaRouteService.java b/media/java/android/media/routing/MediaRouteService.java
deleted file mode 100644
index 4d5a8a9..0000000
--- a/media/java/android/media/routing/MediaRouteService.java
+++ /dev/null
@@ -1,1023 +0,0 @@
-/*
- * Copyright (C) 2014 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.media.routing;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.SdkConstant;
-import android.app.Service;
-import android.content.Intent;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.media.routing.MediaRouter.ConnectionError;
-import android.media.routing.MediaRouter.ConnectionInfo;
-import android.media.routing.MediaRouter.ConnectionRequest;
-import android.media.routing.MediaRouter.DestinationInfo;
-import android.media.routing.MediaRouter.DiscoveryError;
-import android.media.routing.MediaRouter.DiscoveryRequest;
-import android.media.routing.MediaRouter.RouteInfo;
-import android.media.routing.MediaRouter.ServiceMetadata;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.ArrayMap;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Media route services implement strategies for discovering
- * and establishing connections to media devices and their routes.  These services
- * are also known as media route providers.
- * <p>
- * Each media route service subclass is responsible for enabling applications
- * and the system to interact with media devices of some kind.
- * For example, one particular media route service implementation might
- * offer support for discovering nearby wireless display devices and streaming
- * video contents to them; another media route service implementation might
- * offer support for discovering nearby speakers and streaming media appliances
- * and sending commands to play content on request.
- * </p><p>
- * Subclasses must override the {@link #onCreateClientSession} method to return
- * a {@link ClientSession} object that implements the {@link ClientSession#onStartDiscovery},
- * {@link ClientSession#onStopDiscovery}, and {@link ClientSession#onConnect} methods
- * to allow clients to discover and connect to media devices.
- * </p><p>
- * This object is not thread-safe.  All callbacks are invoked on the main looper.
- * </p>
- *
- * <h3>Clients</h3>
- * <p>
- * The clients of this API are media applications that would like to discover
- * and connect to media devices.  The client may also be the system, such as
- * when the user initiates display mirroring via the Cast Screen function.
- * </p><p>
- * There may be multiple client sessions active at the same time.  Each client
- * session can request discovery and connect to routes independently of any
- * other client.  It is the responsibility of the media route service to maintain
- * separate state for each client session and to ensure that clients cannot interfere
- * with one another in harmful ways.
- * </p><p>
- * Notwithstanding the requirement to support any number of concurrent client
- * sessions, the media route service may impose constraints on how many clients
- * can connect to the same media device in a particular mode at the same time.
- * In some cases, media devices may support connections from an arbitrary number
- * of clients simultaneously but often it may be necessary to ensure that only
- * one client is in control.  When this happens, the media route service should
- * report a connection error unless the connection request specifies that the
- * client should take control of the media device (and forcibly disconnect other
- * clients that may be using it).
- * </p>
- *
- * <h3>Destinations</h3>
- * <p>
- * The media devices to which an application may send media content are referred
- * to in the API as destinations.  Each destination therefore represents a single
- * independent device such as a speaker or TV set.  Destinations are given meaningful
- * names and descriptions to help the user associate them with devices in their
- * environment.
- * </p><p>
- * Destinations may be local or remote and may be accessed through various means,
- * often wirelessly.  The user may install media route services to enable
- * media applications to connect to a variety of destinations with different
- * capabilities.
- * </p>
- *
- * <h3>Routes</h3>
- * <p>
- * Routes represent possible usages or means of reaching and interacting with
- * a destination.  Since destinations may support many different features, they may
- * each offer multiple routes for applications to choose from based on their needs.
- * For example, one route might express the ability to stream locally rendered audio
- * and video to the device; another route might express the ability to send a URL for
- * the destination to download from the network and play all by itself.
- * </p><p>
- * Routes are discovered according to the set of capabilities that
- * an application or the system is seeking to use at a particular time.  For example,
- * if an application wants to stream music to a destination then it will ask the
- * {@link MediaRouter} to find routes to destinations can stream music and ignore
- * all other destinations that cannot.
- * </p><p>
- * In general, the application will inspect the set of routes that have been
- * offered then connect to the most appropriate route for its desired purpose.
- * </p>
- *
- * <h3>Discovery</h3>
- * <p>
- * Discovery is the process of finding destinations based on a description of the
- * kinds of routes that an application or the system would like to use.
- * </p><p>
- * Discovery begins when {@link ClientSession#onStartDiscovery} is called and ends when
- * {@link ClientSession#onStopDiscovery} is called.  There may be multiple simultaneous
- * discovery requests in progress at the same time from different clients.  It is up to
- * the media route service to perform these requests in parallel or multiplex them
- * as required.
- * </p><p>
- * Media route services are <em>strongly encouraged</em> to use the information
- * in the discovery request to optimize discovery and avoid redundant work.
- * In the case where no media device supported by the media route service
- * could possibly offer the requested capabilities, the
- * {@link ClientSession#onStartDiscovery} method should return <code>false</code> to
- * let the system know that it can unbind from the media route service and
- * release its resources.
- * </p>
- *
- * <h3>Settings</h3>
- * <p>
- * Many kinds of devices can be discovered on demand simply by scanning the local network
- * or using wireless protocols such as Bluetooth to find them.  However, in some cases
- * it may be necessary for the user to manually configure destinations before they
- * can be used (or to adjust settings later).  Actual user configuration of destinations
- * is beyond the scope of this API but media route services may specify an activity
- * in their manifest that the user can launch to perform these tasks.
- * </p><p>
- * Note that media route services that are installed from the store must be enabled
- * by the user before they become available for applications to use.
- * The {@link android.provider.Settings#ACTION_CAST_SETTINGS Settings.ACTION_CAST_SETTINGS}
- * settings activity provides the ability for the user to configure media route services.
- * </p>
- *
- * <h3>Manifest Declaration</h3>
- * <p>
- * Media route services must be declared in the manifest along with meta-data
- * about the kinds of routes that they are capable of discovering.  The system
- * uses this information to optimize the set of services to which it binds in
- * order to satisfy a particular discovery request.
- * </p><p>
- * To extend this class, you must declare the service in your manifest file with
- * the {@link android.Manifest.permission#BIND_MEDIA_ROUTE_SERVICE} permission
- * and include an intent filter with the {@link #SERVICE_INTERFACE} action.  You must
- * also add meta-data to describe the kinds of routes that your service is capable
- * of discovering.
- * </p><p>
- * For example:
- * </p><pre>
- * &lt;service android:name=".MediaRouteProvider"
- *          android:label="&#64;string/service_name"
- *          android:permission="android.permission.BIND_MEDIA_ROUTE_SERVICE">
- *     &lt;intent-filter>
- *         &lt;action android:name="android.media.routing.MediaRouteService" />
- *     &lt;/intent-filter>
- *
- *     TODO: INSERT METADATA DECLARATIONS HERE
- *
- * &lt;/service>
- * </pre>
- */
-public abstract class MediaRouteService extends Service {
-    private static final String TAG = "MediaRouteService";
-
-    private static final boolean DEBUG = true;
-
-    private final Handler mHandler;
-    private final BinderService mService;
-    private final ArrayMap<IBinder, ClientRecord> mClientRecords =
-            new ArrayMap<IBinder, ClientRecord>();
-
-    private ServiceMetadata mMetadata;
-
-    /**
-     * The {@link Intent} that must be declared as handled by the service.
-     */
-    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
-    public static final String SERVICE_INTERFACE =
-            "android.media.routing.MediaRouteService";
-
-    /**
-     * Creates a media route service.
-     */
-    public MediaRouteService() {
-        mHandler = new Handler(true);
-        mService = new BinderService();
-    }
-
-    @Override
-    public @Nullable IBinder onBind(Intent intent) {
-        if (SERVICE_INTERFACE.equals(intent.getAction())) {
-            return mService;
-        }
-        return null;
-    }
-
-    /**
-     * Creates a new client session on behalf of a client.
-     * <p>
-     * The implementation should return a {@link ClientSession} for the client
-     * to use.  The media route service must take care to manage the state of
-     * each client session independently from any others that might also be
-     * in use at the same time.
-     * </p>
-     *
-     * @param client Information about the client.
-     * @return The client session object, or null if the client is not allowed
-     * to interact with this media route service.
-     */
-    public abstract @Nullable ClientSession onCreateClientSession(@NonNull ClientInfo client);
-
-    /**
-     * Gets metadata about this service.
-     * <p>
-     * Use this method to obtain a {@link ServiceMetadata} object to provide when creating
-     * a {@link android.media.routing.MediaRouter.DestinationInfo.Builder}.
-     * </p>
-     *
-     * @return Metadata about this service.
-     */
-    public @NonNull ServiceMetadata getServiceMetadata() {
-        if (mMetadata == null) {
-            try {
-                mMetadata = new ServiceMetadata(this);
-            } catch (NameNotFoundException ex) {
-                Log.wtf(TAG, "Could not retrieve own service metadata!");
-            }
-        }
-        return mMetadata;
-    }
-
-    /**
-     * Enables a single client to access the functionality of the media route service.
-     */
-    public static abstract class ClientSession {
-        /**
-         * Starts discovery.
-         * <p>
-         * If the media route service is capable of discovering routes that satisfy
-         * the request then this method should start discovery and return true.
-         * Otherwise, this method should return false.  If false is returned,
-         * then the framework will not call {@link #onStopDiscovery} since discovery
-         * was never actually started.
-         * </p><p>
-         * There may already be other discovery requests in progress at the same time
-         * for other clients; the media route service must keep track of them all.
-         * </p>
-         *
-         * @param req The discovery request to start.
-         * @param callback A callback to receive discovery events related to this
-         * particular request.  The events that the service sends to this callback
-         * will be sent to the client that initiated the discovery request.
-         * @return True if discovery has started.  False if the media route service
-         * is unable to discover routes that satisfy the request.
-         */
-        public abstract boolean onStartDiscovery(@NonNull DiscoveryRequest req,
-                @NonNull DiscoveryCallback callback);
-
-        /**
-         * Stops discovery.
-         * <p>
-         * If {@link #onStartDiscovery} returned true, then this method will eventually
-         * be called when the framework no longer requires this discovery request
-         * to be performed.
-         * </p><p>
-         * There may still be other discovery requests in progress for other clients;
-         * they must keep working until they have each been stopped by their client.
-         * </p>
-         */
-        public abstract void onStopDiscovery();
-
-        /**
-         * Starts connecting to a route.
-         *
-         * @param req The connection request.
-         * @param callback A callback to receive events connection events related
-         * to this particular request.  The events that the service sends to this callback
-         * will be sent to the client that initiated the discovery request.
-         * @return True if the connection is in progress, or false if the client
-         * unable to connect to the requested route.
-         */
-        public abstract boolean onConnect(@NonNull ConnectionRequest req,
-                @NonNull ConnectionCallback callback);
-
-        /**
-         * Called when the client requests to disconnect from the route
-         * or abort a connection attempt in progress.
-         */
-        public abstract void onDisconnect();
-
-        /**
-         * Called when the client requests to pause streaming of content to
-         * live audio/video routes such as when it goes into the background.
-         * <p>
-         * The default implementation does nothing.
-         * </p>
-         */
-        public void onPauseStream() { }
-
-        /**
-         * Called when the application requests to resume streaming of content to
-         * live audio/video routes such as when it returns to the foreground.
-         * <p>
-         * The default implementation does nothing.
-         * </p>
-         */
-        public void onResumeStream() { }
-
-        /**
-         * Called when the client is releasing the session.
-         * <p>
-         * The framework automatically takes care of stopping discovery and
-         * terminating the connection politely before calling this method to release
-         * the session.
-         * </p><p>
-         * The default implementation does nothing.
-         * </p>
-         */
-        public void onRelease() { }
-    }
-
-    /**
-     * Provides events in response to a discovery request.
-     */
-    public final class DiscoveryCallback {
-        private final ClientRecord mRecord;
-
-        DiscoveryCallback(ClientRecord record) {
-            mRecord = record;
-        }
-
-        /**
-         * Called by the service when a destination is found that
-         * offers one or more routes that satisfy the discovery request.
-         * <p>
-         * This method should be called whenever the list of available routes
-         * at a destination changes or whenever the properties of the destination
-         * itself change.
-         * </p>
-         *
-         * @param destination The destination that was found.
-         * @param routes The list of that destination's routes that satisfy the
-         * discovery request.
-         */
-        public void onDestinationFound(final @NonNull DestinationInfo destination,
-                final @NonNull List<RouteInfo> routes) {
-            if (destination == null) {
-                throw new IllegalArgumentException("destination must not be null");
-            }
-            if (routes == null) {
-                throw new IllegalArgumentException("routes must not be null");
-            }
-            for (int i = 0; i < routes.size(); i++) {
-                if (routes.get(i).getDestination() != destination) {
-                    throw new IllegalArgumentException("routes must refer to the "
-                            + "destination");
-                }
-            }
-
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mRecord.dispatchDestinationFound(DiscoveryCallback.this,
-                            destination, routes);
-                }
-            });
-        }
-
-        /**
-         * Called by the service when a destination is no longer
-         * reachable or is no longer offering any routes that satisfy
-         * the discovery request.
-         *
-         * @param destination The destination that went away.
-         */
-        public void onDestinationLost(final @NonNull DestinationInfo destination) {
-            if (destination == null) {
-                throw new IllegalArgumentException("destination must not be null");
-            }
-
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mRecord.dispatchDestinationLost(DiscoveryCallback.this, destination);
-                }
-            });
-        }
-
-        /**
-         * Called by the service when a discovery has failed in a non-recoverable manner.
-         *
-         * @param error The error code: one of
-         * {@link MediaRouter#DISCOVERY_ERROR_UNKNOWN},
-         * {@link MediaRouter#DISCOVERY_ERROR_ABORTED},
-         * or {@link MediaRouter#DISCOVERY_ERROR_NO_CONNECTIVITY}.
-         * @param message The localized error message, or null if none.  This message
-         * may be shown to the user.
-         * @param extras Additional information about the error which a client
-         * may use, or null if none.
-         */
-        public void onDiscoveryFailed(final @DiscoveryError int error,
-                final @Nullable CharSequence message, final @Nullable Bundle extras) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mRecord.dispatchDiscoveryFailed(DiscoveryCallback.this,
-                            error, message, extras);
-                }
-            });
-        }
-    }
-
-    /**
-     * Provides events in response to a connection request.
-     */
-    public final class ConnectionCallback {
-        private final ClientRecord mRecord;
-
-        ConnectionCallback(ClientRecord record) {
-            mRecord = record;
-        }
-
-        /**
-         * Called by the service when the connection succeeds.
-         *
-         * @param connection Immutable information about the connection.
-         */
-        public void onConnected(final @NonNull ConnectionInfo connection) {
-            if (connection == null) {
-                throw new IllegalArgumentException("connection must not be null");
-            }
-
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mRecord.dispatchConnected(ConnectionCallback.this, connection);
-                }
-            });
-        }
-
-        /**
-         * Called by the service when the connection is terminated normally.
-         * <p>
-         * Abnormal termination is reported via {@link #onConnectionFailed}.
-         * </p>
-         */
-        public void onDisconnected() {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mRecord.dispatchDisconnected(ConnectionCallback.this);
-                }
-            });
-        }
-
-        /**
-         * Called by the service when a connection attempt or connection in
-         * progress has failed in a non-recoverable manner.
-         *
-         * @param error The error code: one of
-         * {@link MediaRouter#CONNECTION_ERROR_ABORTED},
-         * {@link MediaRouter#CONNECTION_ERROR_UNAUTHORIZED},
-         * {@link MediaRouter#CONNECTION_ERROR_UNREACHABLE},
-         * {@link MediaRouter#CONNECTION_ERROR_BUSY},
-         * {@link MediaRouter#CONNECTION_ERROR_TIMEOUT},
-         * {@link MediaRouter#CONNECTION_ERROR_BROKEN},
-         * or {@link MediaRouter#CONNECTION_ERROR_BARGED}.
-         * @param message The localized error message, or null if none.  This message
-         * may be shown to the user.
-         * @param extras Additional information about the error which a client
-         * may use, or null if none.
-         */
-        public void onConnectionFailed(final @ConnectionError int error,
-                final @Nullable CharSequence message, final @Nullable Bundle extras) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mRecord.dispatchConnectionFailed(ConnectionCallback.this,
-                            error, message, extras);
-                }
-            });
-        }
-    }
-
-    /**
-     * Identifies a client of the media route service.
-     */
-    public static final class ClientInfo {
-        private final int mUid;
-        private final String mPackageName;
-
-        ClientInfo(int uid, String packageName) {
-            mUid = uid;
-            mPackageName = packageName;
-        }
-
-        /**
-         * Gets the UID of the client application.
-         */
-        public int getUid() {
-            return mUid;
-        }
-
-        /**
-         * Gets the package name of the client application.
-         */
-        public @NonNull String getPackageName() {
-            return mPackageName;
-        }
-
-        @Override
-        public @NonNull String toString() {
-            return "ClientInfo{ uid=" + mUid + ", package=" + mPackageName + " }";
-        }
-    }
-
-    private final class BinderService extends IMediaRouteService.Stub {
-        @Override
-        public void registerClient(final int clientUid, final String clientPackageName,
-                final IMediaRouteClientCallback callback) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientInfo client = new ClientInfo(clientUid, clientPackageName);
-                    if (DEBUG) {
-                        Log.d(TAG, "registerClient: client=" + client);
-                    }
-
-                    ClientSession session = onCreateClientSession(client);
-                    if (session == null) {
-                        // request refused by service
-                        Log.w(TAG, "Media route service refused to create session for client: "
-                                + "client=" + client);
-                        return;
-                    }
-
-                    ClientRecord record = new ClientRecord(callback, client, session);
-                    try {
-                        callback.asBinder().linkToDeath(record, 0);
-                    } catch (RemoteException ex) {
-                        // client died prematurely
-                        Log.w(TAG, "Client died prematurely while creating session: "
-                                + "client=" + client);
-                        record.release();
-                        return;
-                    }
-
-                    mClientRecords.put(callback.asBinder(), record);
-                }
-            });
-        }
-
-        @Override
-        public void unregisterClient(IMediaRouteClientCallback callback) {
-            unregisterClient(callback, false);
-        }
-
-        void unregisterClient(final IMediaRouteClientCallback callback,
-                final boolean died) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientRecord record = mClientRecords.remove(callback.asBinder());
-                    if (record == null) {
-                        return; // spurious
-                    }
-
-                    if (DEBUG) {
-                        Log.d(TAG, "unregisterClient: client=" + record.getClientInfo()
-                                + ", died=" + died);
-                    }
-
-                    record.release();
-                    callback.asBinder().unlinkToDeath(record, 0);
-                }
-            });
-        }
-
-        @Override
-        public void startDiscovery(final IMediaRouteClientCallback callback,
-                final int seq, final List<MediaRouteSelector> selectors,
-                final int flags) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientRecord record = mClientRecords.get(callback.asBinder());
-                    if (record == null) {
-                        return; // spurious
-                    }
-
-                    if (DEBUG) {
-                        Log.d(TAG, "startDiscovery: client=" + record.getClientInfo()
-                                + ", seq=" + seq + ", selectors=" + selectors
-                                + ", flags=0x" + Integer.toHexString(flags));
-                    }
-                    record.startDiscovery(seq, selectors, flags);
-                }
-            });
-        }
-
-        @Override
-        public void stopDiscovery(final IMediaRouteClientCallback callback) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientRecord record = mClientRecords.get(callback.asBinder());
-                    if (record == null) {
-                        return; // spurious
-                    }
-
-                    if (DEBUG) {
-                        Log.d(TAG, "stopDiscovery: client=" + record.getClientInfo());
-                    }
-                    record.stopDiscovery();
-                }
-            });
-        }
-
-        @Override
-        public void connect(final IMediaRouteClientCallback callback,
-                final int seq, final String destinationId, final String routeId,
-                final int flags, final Bundle extras) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientRecord record = mClientRecords.get(callback.asBinder());
-                    if (record == null) {
-                        return; // spurious
-                    }
-
-                    if (DEBUG) {
-                        Log.d(TAG, "connect: client=" + record.getClientInfo()
-                                + ", seq=" + seq + ", destinationId=" + destinationId
-                                + ", routeId=" + routeId
-                                + ", flags=0x" + Integer.toHexString(flags)
-                                + ", extras=" + extras);
-                    }
-                    record.connect(seq, destinationId, routeId, flags, extras);
-                }
-            });
-        }
-
-        @Override
-        public void disconnect(final IMediaRouteClientCallback callback) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientRecord record = mClientRecords.get(callback.asBinder());
-                    if (record == null) {
-                        return; // spurious
-                    }
-
-                    if (DEBUG) {
-                        Log.d(TAG, "disconnect: client=" + record.getClientInfo());
-                    }
-                    record.disconnect();
-                }
-            });
-        }
-
-        @Override
-        public void pauseStream(final IMediaRouteClientCallback callback) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientRecord record = mClientRecords.get(callback.asBinder());
-                    if (record == null) {
-                        return; // spurious
-                    }
-
-                    if (DEBUG) {
-                        Log.d(TAG, "pauseStream: client=" + record.getClientInfo());
-                    }
-                    record.pauseStream();
-                }
-            });
-        }
-
-        @Override
-        public void resumeStream(final IMediaRouteClientCallback callback) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ClientRecord record = mClientRecords.get(callback.asBinder());
-                    if (record == null) {
-                        return; // spurious
-                    }
-
-                    if (DEBUG) {
-                        Log.d(TAG, "resumeStream: client=" + record.getClientInfo());
-                    }
-                    record.resumeStream();
-                }
-            });
-        }
-    }
-
-    // Must be accessed on handler
-    private final class ClientRecord implements IBinder.DeathRecipient {
-        private final IMediaRouteClientCallback mClientCallback;
-        private final ClientInfo mClient;
-        private final ClientSession mSession;
-
-        private int mDiscoverySeq;
-        private DiscoveryRequest mDiscoveryRequest;
-        private DiscoveryCallback mDiscoveryCallback;
-        private final ArrayMap<String, DestinationRecord> mDestinations =
-                new ArrayMap<String, DestinationRecord>();
-
-        private int mConnectionSeq;
-        private ConnectionRequest mConnectionRequest;
-        private ConnectionCallback mConnectionCallback;
-        private ConnectionInfo mConnection;
-        private boolean mConnectionPaused;
-
-        public ClientRecord(IMediaRouteClientCallback callback,
-                ClientInfo client, ClientSession session) {
-            mClientCallback = callback;
-            mClient = client;
-            mSession = session;
-        }
-
-        // Invoked on binder thread unlike all other methods in this class.
-        @Override
-        public void binderDied() {
-            mService.unregisterClient(mClientCallback, true);
-        }
-
-        public ClientInfo getClientInfo() {
-            return mClient;
-        }
-
-        public void release() {
-            stopDiscovery();
-            disconnect();
-        }
-
-        public void startDiscovery(int seq, List<MediaRouteSelector> selectors,
-                int flags) {
-            stopDiscovery();
-
-            mDiscoverySeq = seq;
-            mDiscoveryRequest = new DiscoveryRequest(selectors);
-            mDiscoveryRequest.setFlags(flags);
-            mDiscoveryCallback = new DiscoveryCallback(this);
-            boolean started = mSession.onStartDiscovery(mDiscoveryRequest, mDiscoveryCallback);
-            if (!started) {
-                dispatchDiscoveryFailed(mDiscoveryCallback,
-                        MediaRouter.DISCOVERY_ERROR_ABORTED, null, null);
-                clearDiscovery();
-            }
-        }
-
-        public void stopDiscovery() {
-            if (mDiscoveryRequest != null) {
-                mSession.onStopDiscovery();
-                clearDiscovery();
-            }
-        }
-
-        private void clearDiscovery() {
-            mDestinations.clear();
-            mDiscoveryRequest = null;
-            mDiscoveryCallback = null;
-        }
-
-        public void connect(int seq, String destinationId, String routeId,
-                int flags, Bundle extras) {
-            disconnect();
-
-            mConnectionSeq = seq;
-            mConnectionCallback = new ConnectionCallback(this);
-
-            DestinationRecord destinationRecord = mDestinations.get(destinationId);
-            if (destinationRecord == null) {
-                Log.w(TAG, "Aborting connection to route since no matching destination "
-                        + "was found in the list of known destinations: "
-                        + "destinationId=" + destinationId);
-                dispatchConnectionFailed(mConnectionCallback,
-                        MediaRouter.CONNECTION_ERROR_ABORTED, null, null);
-                clearConnection();
-                return;
-            }
-
-            RouteInfo route = destinationRecord.getRoute(routeId);
-            if (route == null) {
-                Log.w(TAG, "Aborting connection to route since no matching route "
-                        + "was found in the list of known routes: "
-                        + "destination=" + destinationRecord.destination
-                        + ", routeId=" + routeId);
-                dispatchConnectionFailed(mConnectionCallback,
-                        MediaRouter.CONNECTION_ERROR_ABORTED, null, null);
-                clearConnection();
-                return;
-            }
-
-            mConnectionRequest = new ConnectionRequest(route);
-            mConnectionRequest.setFlags(flags);
-            mConnectionRequest.setExtras(extras);
-            boolean started = mSession.onConnect(mConnectionRequest, mConnectionCallback);
-            if (!started) {
-                dispatchConnectionFailed(mConnectionCallback,
-                        MediaRouter.CONNECTION_ERROR_ABORTED, null, null);
-                clearConnection();
-            }
-        }
-
-        public void disconnect() {
-            if (mConnectionRequest != null) {
-                mSession.onDisconnect();
-                clearConnection();
-            }
-        }
-
-        private void clearConnection() {
-            mConnectionRequest = null;
-            mConnectionCallback = null;
-            if (mConnection != null) {
-                mConnection.close();
-                mConnection = null;
-            }
-            mConnectionPaused = false;
-        }
-
-        public void pauseStream() {
-            if (mConnectionRequest != null && !mConnectionPaused) {
-                mConnectionPaused = true;
-                mSession.onPauseStream();
-            }
-        }
-
-        public void resumeStream() {
-            if (mConnectionRequest != null && mConnectionPaused) {
-                mConnectionPaused = false;
-                mSession.onResumeStream();
-            }
-        }
-
-        public void dispatchDestinationFound(DiscoveryCallback callback,
-                DestinationInfo destination, List<RouteInfo> routes) {
-            if (callback == mDiscoveryCallback) {
-                if (DEBUG) {
-                    Log.d(TAG, "destinationFound: destination=" + destination
-                            + ", routes=" + routes);
-                }
-                mDestinations.put(destination.getId(),
-                        new DestinationRecord(destination, routes));
-
-                ParcelableDestinationInfo pdi = new ParcelableDestinationInfo();
-                pdi.id = destination.getId();
-                pdi.name = destination.getName();
-                pdi.description = destination.getDescription();
-                pdi.iconResourceId = destination.getIconResourceId();
-                pdi.extras = destination.getExtras();
-                ArrayList<ParcelableRouteInfo> pris = new ArrayList<ParcelableRouteInfo>();
-                for (RouteInfo route : routes) {
-                    int selectorIndex = mDiscoveryRequest.getSelectors().indexOf(
-                            route.getSelector());
-                    if (selectorIndex < 0) {
-                        Log.w(TAG, "Ignoring route because the selector does not match "
-                                + "any of those that were originally supplied by the "
-                                + "client's discovery request: destination=" + destination
-                                + ", route=" + route);
-                        continue;
-                    }
-
-                    ParcelableRouteInfo pri = new ParcelableRouteInfo();
-                    pri.id = route.getId();
-                    pri.selectorIndex = selectorIndex;
-                    pri.features = route.getFeatures();
-                    pri.protocols = route.getProtocols().toArray(
-                            new String[route.getProtocols().size()]);
-                    pri.extras = route.getExtras();
-                    pris.add(pri);
-                }
-                try {
-                    mClientCallback.onDestinationFound(mDiscoverySeq, pdi,
-                            pris.toArray(new ParcelableRouteInfo[pris.size()]));
-                } catch (RemoteException ex) {
-                    // binder death handled elsewhere
-                }
-            }
-        }
-
-        public void dispatchDestinationLost(DiscoveryCallback callback,
-                DestinationInfo destination) {
-            if (callback == mDiscoveryCallback) {
-                if (DEBUG) {
-                    Log.d(TAG, "destinationLost: destination=" + destination);
-                }
-
-                if (mDestinations.get(destination.getId()).destination == destination) {
-                    mDestinations.remove(destination.getId());
-                    try {
-                        mClientCallback.onDestinationLost(mDiscoverySeq, destination.getId());
-                    } catch (RemoteException ex) {
-                        // binder death handled elsewhere
-                    }
-                }
-            }
-        }
-
-        public void dispatchDiscoveryFailed(DiscoveryCallback callback,
-                int error, CharSequence message, Bundle extras) {
-            if (callback == mDiscoveryCallback) {
-                if (DEBUG) {
-                    Log.d(TAG, "discoveryFailed: error=" + error + ", message=" + message
-                            + ", extras=" + extras);
-                }
-
-                try {
-                    mClientCallback.onDiscoveryFailed(mDiscoverySeq, error, message, extras);
-                } catch (RemoteException ex) {
-                    // binder death handled elsewhere
-                }
-            }
-        }
-
-        public void dispatchConnected(ConnectionCallback callback, ConnectionInfo connection) {
-            if (callback == mConnectionCallback) {
-                if (DEBUG) {
-                    Log.d(TAG, "connected: connection=" + connection);
-                }
-                if (mConnection == null) {
-                    mConnection = connection;
-
-                    ParcelableConnectionInfo pci = new ParcelableConnectionInfo();
-                    pci.audioAttributes = connection.getAudioAttributes();
-                    pci.presentationDisplayId = connection.getPresentationDisplay() != null ?
-                            connection.getPresentationDisplay().getDisplayId() : -1;
-                    pci.protocolBinders = new IBinder[connection.getProtocols().size()];
-                    for (int i = 0; i < pci.protocolBinders.length; i++) {
-                        pci.protocolBinders[i] = connection.getProtocolBinder(i);
-                    }
-                    pci.extras = connection.getExtras();
-                    try {
-                        mClientCallback.onConnected(mConnectionSeq, pci);
-                    } catch (RemoteException ex) {
-                        // binder death handled elsewhere
-                    }
-                } else {
-                    Log.w(TAG, "Media route service called onConnected() while already "
-                            + "connected.");
-                }
-            }
-        }
-
-        public void dispatchDisconnected(ConnectionCallback callback) {
-            if (callback == mConnectionCallback) {
-                if (DEBUG) {
-                    Log.d(TAG, "disconnected");
-                }
-
-                if (mConnection != null) {
-                    mConnection.close();
-                    mConnection = null;
-
-                    try {
-                        mClientCallback.onDisconnected(mConnectionSeq);
-                    } catch (RemoteException ex) {
-                        // binder death handled elsewhere
-                    }
-                }
-            }
-        }
-
-        public void dispatchConnectionFailed(ConnectionCallback callback,
-                int error, CharSequence message, Bundle extras) {
-            if (callback == mConnectionCallback) {
-                if (DEBUG) {
-                    Log.d(TAG, "connectionFailed: error=" + error + ", message=" + message
-                            + ", extras=" + extras);
-                }
-
-                try {
-                    mClientCallback.onConnectionFailed(mConnectionSeq, error, message, extras);
-                } catch (RemoteException ex) {
-                    // binder death handled elsewhere
-                }
-            }
-        }
-    }
-
-    private static final class DestinationRecord {
-        public final DestinationInfo destination;
-        public final List<RouteInfo> routes;
-
-        public DestinationRecord(DestinationInfo destination, List<RouteInfo> routes) {
-            this.destination = destination;
-            this.routes = routes;
-        }
-
-        public RouteInfo getRoute(String routeId) {
-            final int count = routes.size();
-            for (int i = 0; i < count; i++) {
-                RouteInfo route = routes.get(i);
-                if (route.getId().equals(routeId)) {
-                    return route;
-                }
-            }
-            return null;
-        }
-    }
-}
diff --git a/media/java/android/media/routing/MediaRouter.java b/media/java/android/media/routing/MediaRouter.java
deleted file mode 100644
index 4f6d324..0000000
--- a/media/java/android/media/routing/MediaRouter.java
+++ /dev/null
@@ -1,1886 +0,0 @@
-/*
- * Copyright (C) 2014 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.media.routing;
-
-import android.annotation.DrawableRes;
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.app.Presentation;
-import android.app.Service;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ServiceInfo;
-import android.graphics.drawable.Drawable;
-import android.hardware.display.DisplayManager;
-import android.media.AudioAttributes;
-import android.media.AudioManager;
-import android.media.AudioTrack;
-import android.media.VolumeProvider;
-import android.media.session.MediaController;
-import android.media.session.MediaSession;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.IInterface;
-import android.text.TextUtils;
-import android.util.ArrayMap;
-import android.view.Display;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Media router allows applications to discover, connect to, control,
- * and send content to nearby media devices known as destinations.
- * <p>
- * There are generally two participants involved in media routing: an
- * application that wants to send media content to a destination and a
- * {@link MediaRouteService media route service} that provides the
- * service of transporting that content where it needs to go on behalf of the
- * application.
- * </p><p>
- * To send media content to a destination, the application must ask the system
- * to discover available routes to destinations that provide certain capabilities,
- * establish a connection to a route, then send messages through the connection to
- * control the routing of audio and video streams, launch remote applications,
- * and invoke other functions of the destination.
- * </p><p>
- * Media router objects are thread-safe.
- * </p>
- *
- * <h3>Destinations</h3>
- * <p>
- * The media devices to which an application may send media content are referred
- * to in the API as destinations.  Each destination therefore represents a single
- * independent device such as a speaker or TV set.  Destinations are given meaningful
- * names and descriptions to help the user associate them with devices in their
- * environment.
- * </p><p>
- * Destinations may be local or remote and may be accessed through various means,
- * often wirelessly.  The user may install media route services to enable
- * media applications to connect to a variety of destinations with different
- * capabilities.
- * </p>
- *
- * <h3>Routes</h3>
- * <p>
- * Routes represent possible usages or means of reaching and interacting with
- * a destination.  Since destinations may support many different features, they may
- * each offer multiple routes for applications to choose from based on their needs.
- * For example, one route might express the ability to stream locally rendered audio
- * and video to the device; another route might express the ability to send a URL for
- * the destination to download from the network and play all by itself.
- * </p><p>
- * Routes are discovered according to the set of capabilities that
- * an application or the system is seeking to use at a particular time.  For example,
- * if an application wants to stream music to a destination then it will ask the
- * {@link MediaRouter} to find routes to destinations can stream music and ignore
- * all other destinations that cannot.
- * </p><p>
- * In general, the application will inspect the set of routes that have been
- * offered then connect to the most appropriate route for its desired purpose.
- * </p>
- *
- * <h3>Route Selection</h3>
- * <p>
- * When the user open the media route chooser activity, the system will display
- * a list of nearby media destinations which have been discovered.  After the
- * choice is made the application may connect to one of the routes offered by
- * this destination and begin communicating with the destination.
- * </p><p>
- * Destinations are located through a process called discovery.  During discovery,
- * the system will start installed {@link MediaRouteService media route services}
- * to scan the network for nearby devices that offer the kinds of capabilities that the
- * application is seeking to use.  The application specifies the capabilities it requires by
- * adding {@link MediaRouteSelector media route selectors} to the media router
- * using the {@link #addSelector} method.  Only destinations that provide routes
- * which satisfy at least one of these media route selectors will be discovered.
- * </p><p>
- * Once the user has selected a destination, the application will be given a chance
- * to choose one of the routes to which it would like to connect.  The application
- * may switch to a different route from the same destination at a later time but
- * in order to connect to a new destination, the application must once again launch
- * the media route chooser activity to ask the user to choose a destination.
- * </p>
- *
- * <h3>Route Protocols</h3>
- * <p>
- * Route protocols express capabilities offered by routes.  Each media route selector
- * must specify at least one required protocol by which the routes will be selected.
- * </p><p>
- * The framework provides several predefined <code>MediaRouteProtocols</code> which are
- * defined in the <code>android-support-media-protocols.jar</code> support library.
- * Applications must statically link this library to make use of these protocols.
- * </p><p>
- * The static library approach is used to enable ongoing extension and refinement
- * of protocols in the SDK and interoperability with the media router implementation
- * for older platform versions which is offered by the framework support library.
- * </p><p>
- * Media route services may also define custom media route protocols of their own
- * to enable applications to access specialized capabilities of certain destinations
- * assuming they have linked in the required protocol code.
- * </p><p>
- * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code> for more information.
- * </p>
- *
- * <h3>Connections</h3>
- * <p>
- * After connecting to a media route, the application can send commands to
- * the route using any of the protocols that it requested.  If the route supports live
- * audio or video streaming then the application can create an {@link AudioTrack} or
- * {@link Presentation} to route locally generated content to the destination.
- * </p>
- *
- * <h3>Delegation</h3>
- * <p>
- * The creator of the media router is responsible for establishing the policy for
- * discovering and connecting to destinations.  UI components may observe the state
- * of the media router by {@link #createDelegate creating} a {@link Delegate}.
- * </p><p>
- * The media router should also be attached to the {@link MediaSession media session}
- * that is handling media playback lifecycle.  This will allow
- * authorized {@link MediaController media controllers}, possibly running in other
- * processes, to provide UI to examine and change the media destination by
- * {@link MediaController#createMediaRouterDelegate creating} a {@link Delegate}
- * for the media router associated with the session.
- * </p>
- */
-public final class MediaRouter {
-    private final DisplayManager mDisplayManager;
-
-    private final Object mLock = new Object();
-
-    private RoutingCallback mRoutingCallback;
-    private Handler mRoutingCallbackHandler;
-
-    private boolean mReleased;
-    private int mDiscoveryState;
-    private int mConnectionState;
-    private final ArrayList<MediaRouteSelector> mSelectors =
-            new ArrayList<MediaRouteSelector>();
-    private final ArrayMap<DestinationInfo, List<RouteInfo>> mDiscoveredDestinations =
-            new ArrayMap<DestinationInfo, List<RouteInfo>>();
-    private RouteInfo mSelectedRoute;
-    private ConnectionInfo mConnection;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(value = { DISCOVERY_STATE_STOPPED, DISCOVERY_STATE_STARTED })
-    public @interface DiscoveryState { }
-
-    /**
-     * Discovery state: Discovery is not currently in progress.
-     */
-    public static final int DISCOVERY_STATE_STOPPED = 0;
-
-    /**
-     * Discovery state: Discovery is being performed.
-     */
-    public static final int DISCOVERY_STATE_STARTED = 1;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(flag = true, value = { DISCOVERY_FLAG_BACKGROUND })
-    public @interface DiscoveryFlags { }
-
-    /**
-     * Discovery flag: Indicates that the client has requested passive discovery in
-     * the background.  The media route service should try to use less power and rely
-     * more on its internal caches to minimize its impact.
-     */
-    public static final int DISCOVERY_FLAG_BACKGROUND = 1 << 0;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(value = { DISCOVERY_ERROR_UNKNOWN, DISCOVERY_ERROR_ABORTED,
-            DISCOVERY_ERROR_NO_CONNECTIVITY })
-    public @interface DiscoveryError { }
-
-    /**
-     * Discovery error: Unknown error; refer to the error message for details.
-     */
-    public static final int DISCOVERY_ERROR_UNKNOWN = 0;
-
-    /**
-     * Discovery error: The media router or media route service has decided not to
-     * handle the discovery request for some reason.
-     */
-    public static final int DISCOVERY_ERROR_ABORTED = 1;
-
-    /**
-     * Discovery error: The media route service is unable to perform discovery
-     * due to a lack of connectivity such as because the radio is disabled.
-     */
-    public static final int DISCOVERY_ERROR_NO_CONNECTIVITY = 2;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(value = { CONNECTION_STATE_DISCONNECTED, CONNECTION_STATE_CONNECTING,
-            CONNECTION_STATE_CONNECTED })
-    public @interface ConnectionState { }
-
-    /**
-     * Connection state: No destination has been selected.  Media content should
-     * be sent to the default output.
-     */
-    public static final int CONNECTION_STATE_DISCONNECTED = 0;
-
-    /**
-     * Connection state: The application is in the process of connecting to
-     * a route offered by the selected destination.
-     */
-    public static final int CONNECTION_STATE_CONNECTING = 1;
-
-    /**
-     * Connection state: The application has connected to a route offered by
-     * the selected destination.
-     */
-    public static final int CONNECTION_STATE_CONNECTED = 2;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(flag = true, value = { CONNECTION_FLAG_BARGE })
-    public @interface ConnectionFlags { }
-
-    /**
-     * Connection flag: Indicates that the client has requested to barge in and evict
-     * other clients that might have already connected to the destination and that
-     * would otherwise prevent this client from connecting.  When this flag is not
-     * set, the media route service should be polite and report
-     * {@link MediaRouter#CONNECTION_ERROR_BUSY} in case the destination is
-     * already occupied and cannot accept additional connections.
-     */
-    public static final int CONNECTION_FLAG_BARGE = 1 << 0;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(value = { CONNECTION_ERROR_UNKNOWN, CONNECTION_ERROR_ABORTED,
-            CONNECTION_ERROR_UNAUTHORIZED, CONNECTION_ERROR_UNAUTHORIZED,
-            CONNECTION_ERROR_BUSY, CONNECTION_ERROR_TIMEOUT, CONNECTION_ERROR_BROKEN })
-    public @interface ConnectionError { }
-
-    /**
-     * Connection error: Unknown error; refer to the error message for details.
-     */
-    public static final int CONNECTION_ERROR_UNKNOWN = 0;
-
-    /**
-     * Connection error: The media router or media route service has decided not to
-     * handle the connection request for some reason.
-     */
-    public static final int CONNECTION_ERROR_ABORTED = 1;
-
-    /**
-     * Connection error: The device has refused the connection from this client.
-     * This error should be avoided because the media route service should attempt
-     * to filter out devices that the client cannot access as it performs discovery
-     * on behalf of that client.
-     */
-    public static final int CONNECTION_ERROR_UNAUTHORIZED = 2;
-
-    /**
-     * Connection error: The device is unreachable over the network.
-     */
-    public static final int CONNECTION_ERROR_UNREACHABLE = 3;
-
-    /**
-     * Connection error: The device is already busy serving another client and
-     * the connection request did not ask to barge in.
-     */
-    public static final int CONNECTION_ERROR_BUSY = 4;
-
-    /**
-     * Connection error: A timeout occurred during connection.
-     */
-    public static final int CONNECTION_ERROR_TIMEOUT = 5;
-
-    /**
-     * Connection error: The connection to the device was severed unexpectedly.
-     */
-    public static final int CONNECTION_ERROR_BROKEN = 6;
-
-    /**
-     * Connection error: The connection was terminated because a different client barged
-     * in and took control of the destination.
-     */
-    public static final int CONNECTION_ERROR_BARGED = 7;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(value = { DISCONNECTION_REASON_APPLICATION_REQUEST,
-            DISCONNECTION_REASON_USER_REQUEST, DISCONNECTION_REASON_ERROR })
-    public @interface DisconnectionReason { }
-
-    /**
-     * Disconnection reason: The application requested disconnection itself.
-     */
-    public static final int DISCONNECTION_REASON_APPLICATION_REQUEST = 0;
-
-    /**
-     * Disconnection reason: The user requested disconnection.
-     */
-    public static final int DISCONNECTION_REASON_USER_REQUEST = 1;
-
-    /**
-     * Disconnection reason: An error occurred.
-     */
-    public static final int DISCONNECTION_REASON_ERROR = 2;
-
-    /** @hide */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(flag = true, value = { ROUTE_FEATURE_LIVE_AUDIO, ROUTE_FEATURE_LIVE_VIDEO })
-    public @interface RouteFeatures { }
-
-    /**
-     * Route feature: Live audio.
-     * <p>
-     * A route that supports live audio streams audio rendered by the application
-     * to the destination.
-     * </p><p>
-     * To take advantage of live audio routing, the application must render its
-     * media using the audio attributes specified by {@link #getPreferredAudioAttributes}.
-     * </p>
-     *
-     * @see #getPreferredAudioAttributes
-     * @see android.media.AudioAttributes
-     */
-    public static final int ROUTE_FEATURE_LIVE_AUDIO = 1 << 0;
-
-    /**
-     * Route feature: Live video.
-     * <p>
-     * A route that supports live video streams video rendered by the application
-     * to the destination.
-     * </p><p>
-     * To take advantage of live video routing, the application must render its
-     * media to a {@link android.app.Presentation presentation window} on the
-     * display specified by {@link #getPreferredPresentationDisplay}.
-     * </p>
-     *
-     * @see #getPreferredPresentationDisplay
-     * @see android.app.Presentation
-     */
-    public static final int ROUTE_FEATURE_LIVE_VIDEO = 1 << 1;
-
-    /**
-     * Creates a media router.
-     *
-     * @param context The context with which the router is associated.
-     */
-    public MediaRouter(@NonNull Context context) {
-        if (context == null) {
-            throw new IllegalArgumentException("context must not be null");
-        }
-
-        mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);
-    }
-
-    /** @hide */
-    public IMediaRouter getBinder() {
-        // todo
-        return null;
-    }
-
-    /**
-     * Disconnects from the selected destination and releases the media router.
-     * <p>
-     * This method should be called by the application when it no longer requires
-     * the media router to ensure that all bound resources may be cleaned up.
-     * </p>
-     */
-    public void release() {
-        synchronized (mLock) {
-            mReleased = true;
-            // todo
-        }
-    }
-
-    /**
-     * Returns true if the media router has been released.
-     */
-    public boolean isReleased() {
-        synchronized (mLock) {
-            return mReleased;
-        }
-    }
-
-    /**
-     * Gets the current route discovery state.
-     *
-     * @return The current discovery state: one of {@link #DISCOVERY_STATE_STOPPED},
-     * {@link #DISCOVERY_STATE_STARTED}.
-     */
-    public @DiscoveryState int getDiscoveryState() {
-        synchronized (mLock) {
-            return mDiscoveryState;
-        }
-    }
-
-    /**
-     * Gets the current route connection state.
-     *
-     * @return The current state: one of {@link #CONNECTION_STATE_DISCONNECTED},
-     * {@link #CONNECTION_STATE_CONNECTING} or {@link #CONNECTION_STATE_CONNECTED}.
-     */
-    public @ConnectionState int getConnectionState() {
-        synchronized (mLock) {
-            return mConnectionState;
-        }
-    }
-
-    /**
-     * Creates a media router delegate through which the destination of the media
-     * router may be controlled.
-     * <p>
-     * This is the point of entry for UI code that initiates discovery and
-     * connection to routes.
-     * </p>
-     */
-    public @NonNull Delegate createDelegate() {
-        return null; // todo
-    }
-
-    /**
-     * Sets a callback to participate in route discovery, filtering, and connection
-     * establishment.
-     *
-     * @param callback The callback to set, or null if none.
-     * @param handler The handler to receive callbacks, or null to use the current thread.
-     */
-    public void setRoutingCallback(@Nullable RoutingCallback callback,
-            @Nullable Handler handler) {
-        synchronized (mLock) {
-            if (callback == null) {
-                mRoutingCallback = null;
-                mRoutingCallbackHandler = null;
-            } else {
-                mRoutingCallback = callback;
-                mRoutingCallbackHandler = handler != null ? handler : new Handler();
-            }
-        }
-    }
-
-    /**
-     * Adds a media route selector to use to find destinations that have
-     * routes with the specified capabilities during route discovery.
-     */
-    public void addSelector(@NonNull MediaRouteSelector selector) {
-        if (selector == null) {
-            throw new IllegalArgumentException("selector must not be null");
-        }
-
-        synchronized (mLock) {
-            if (!mSelectors.contains(selector)) {
-                mSelectors.add(selector);
-                // todo
-            }
-        }
-    }
-
-    /**
-     * Removes a media route selector.
-     */
-    public void removeSelector(@NonNull MediaRouteSelector selector) {
-        if (selector == null) {
-            throw new IllegalArgumentException("selector must not be null");
-        }
-
-        synchronized (mLock) {
-            if (mSelectors.remove(selector)) {
-                // todo
-            }
-        }
-    }
-
-    /**
-     * Removes all media route selectors.
-     * <p>
-     * Note that at least one selector must be added in order to perform discovery.
-     * </p>
-     */
-    public void clearSelectors() {
-        synchronized (mLock) {
-            if (!mSelectors.isEmpty()) {
-                mSelectors.clear();
-                // todo
-            }
-        }
-    }
-
-    /**
-     * Gets a list of all media route selectors to consider during discovery.
-     */
-    public @NonNull List<MediaRouteSelector> getSelectors() {
-        synchronized (mLock) {
-            return new ArrayList<MediaRouteSelector>(mSelectors);
-        }
-    }
-
-    /**
-     * Gets the connection to the currently selected route.
-     *
-     * @return The connection to the currently selected route, or null if not connected.
-     */
-    public @NonNull ConnectionInfo getConnection() {
-        synchronized (mLock) {
-            return mConnection;
-        }
-    }
-
-    /**
-     * Gets the list of discovered destinations.
-     * <p>
-     * This list is only valid while discovery is running and is null otherwise.
-     * </p>
-     *
-     * @return The list of discovered destinations, or null if discovery is not running.
-     */
-    public @NonNull List<DestinationInfo> getDiscoveredDestinations() {
-        synchronized (mLock) {
-            if (mDiscoveryState == DISCOVERY_STATE_STARTED) {
-                return new ArrayList<DestinationInfo>(mDiscoveredDestinations.keySet());
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Gets the list of discovered routes for a particular destination.
-     * <p>
-     * This list is only valid while discovery is running and is null otherwise.
-     * </p>
-     *
-     * @param destination The destination for which to get the list of discovered routes.
-     * @return The list of discovered routes for the destination, or null if discovery
-     * is not running.
-     */
-    public @NonNull List<RouteInfo> getDiscoveredRoutes(@NonNull DestinationInfo destination) {
-        if (destination == null) {
-            throw new IllegalArgumentException("destination must not be null");
-        }
-        synchronized (mLock) {
-            if (mDiscoveryState == DISCOVERY_STATE_STARTED) {
-                List<RouteInfo> routes = mDiscoveredDestinations.get(destination);
-                if (routes != null) {
-                    return new ArrayList<RouteInfo>(routes);
-                }
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Gets the destination that has been selected.
-     *
-     * @return The selected destination, or null if disconnected.
-     */
-    public @Nullable DestinationInfo getSelectedDestination() {
-        synchronized (mLock) {
-            return mSelectedRoute != null ? mSelectedRoute.getDestination() : null;
-        }
-    }
-
-    /**
-     * Gets the route that has been selected.
-     *
-     * @return The selected destination, or null if disconnected.
-     */
-    public @Nullable RouteInfo getSelectedRoute() {
-        synchronized (mLock) {
-            return mSelectedRoute;
-        }
-    }
-
-    /**
-     * Gets the preferred audio attributes that should be used to stream live audio content
-     * based on the connected route.
-     * <p>
-     * Use an {@link AudioTrack} to send audio content to the destination with these
-     * audio attributes.
-     * </p><p>
-     * The preferred audio attributes may change when a connection is established but it
-     * will remain constant until disconnected.
-     * </p>
-     *
-     * @return The preferred audio attributes to use.  When connected, returns the
-     * route's audio attributes or null if it does not support live audio streaming.
-     * Otherwise returns audio attributes associated with {@link AudioAttributes#USAGE_MEDIA}.
-     */
-    public @Nullable AudioAttributes getPreferredAudioAttributes() {
-        synchronized (mLock) {
-            if (mConnection != null) {
-                return mConnection.getAudioAttributes();
-            }
-            return new AudioAttributes.Builder()
-                    .setLegacyStreamType(AudioManager.STREAM_MUSIC)
-                    .build();
-        }
-    }
-
-    /**
-     * Gets the preferred presentation display that should be used to stream live video content
-     * based on the connected route.
-     * <p>
-     * Use a {@link Presentation} to send video content to the destination with this display.
-     * </p><p>
-     * The preferred presentation display may change when a connection is established but it
-     * will remain constant until disconnected.
-     * </p>
-     *
-     * @return The preferred presentation display to use.  When connected, returns
-     * the route's presentation display or null if it does not support live video
-     * streaming.  Otherwise returns the first available
-     * {@link DisplayManager#DISPLAY_CATEGORY_PRESENTATION presentation display},
-     * such as a mirrored wireless or HDMI display or null if none.
-     */
-    public @Nullable Display getPreferredPresentationDisplay() {
-        synchronized (mLock) {
-            if (mConnection != null) {
-                return mConnection.getPresentationDisplay();
-            }
-            Display[] displays = mDisplayManager.getDisplays(
-                    DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
-            return displays.length != 0 ? displays[0] : null;
-        }
-    }
-
-    /**
-     * Gets the preferred volume provider that should be used to control the volume
-     * of content rendered on the currently selected route.
-     * <p>
-     * The preferred volume provider may change when a connection is established but it
-     * will remain the same until disconnected.
-     * </p>
-     *
-     * @return The preferred volume provider to use, or null if the currently
-     * selected route does not support remote volume adjustment or if the connection
-     * is not yet established.  If no route is selected, returns null to indicate
-     * that system volume control should be used.
-     */
-    public @Nullable VolumeProvider getPreferredVolumeProvider() {
-        synchronized (mLock) {
-            if (mConnection != null) {
-                return mConnection.getVolumeProvider();
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Requests to pause streaming of live audio or video routes.
-     * Should be called when the application is going into the background and is
-     * no longer rendering content locally.
-     * <p>
-     * This method does nothing unless a connection has been established.
-     * </p>
-     */
-    public void pauseStream() {
-        // todo
-    }
-
-    /**
-     * Requests to resume streaming of live audio or video routes.
-     * May be called when the application is returning to the foreground and is
-     * about to resume rendering content locally.
-     * <p>
-     * This method does nothing unless a connection has been established.
-     * </p>
-     */
-    public void resumeStream() {
-        // todo
-    }
-
-    /**
-     * This class is used by UI components to let the user discover and
-     * select a destination to which the media router should connect.
-     * <p>
-     * This API has somewhat more limited functionality than the {@link MediaRouter}
-     * itself because it is designed to allow applications to control
-     * the destination of media router instances that belong to other processes.
-     * </p><p>
-     * To control the destination of your own media router, call
-     * {@link #createDelegate} to obtain a local delegate object.
-     * </p><p>
-     * To control the destination of a media router that belongs to another process,
-     * first obtain a {@link MediaController} that is associated with the media playback
-     * that is occurring in that process, then call
-     * {@link MediaController#createMediaRouterDelegate} to obtain an instance of
-     * its destination controls.  Note that special permissions may be required to
-     * obtain the {@link MediaController} instance in the first place.
-     * </p>
-     */
-    public static final class Delegate {
-        /**
-         * Returns true if the media router has been released.
-         */
-        public boolean isReleased() {
-            // todo
-            return false;
-        }
-
-        /**
-         * Gets the current route discovery state.
-         *
-         * @return The current discovery state: one of {@link #DISCOVERY_STATE_STOPPED},
-         * {@link #DISCOVERY_STATE_STARTED}.
-         */
-        public @DiscoveryState int getDiscoveryState() {
-            // todo
-            return -1;
-        }
-
-        /**
-         * Gets the current route connection state.
-         *
-         * @return The current state: one of {@link #CONNECTION_STATE_DISCONNECTED},
-         * {@link #CONNECTION_STATE_CONNECTING} or {@link #CONNECTION_STATE_CONNECTED}.
-         */
-        public @ConnectionState int getConnectionState() {
-            // todo
-            return -1;
-        }
-
-        /**
-         * Gets the currently selected destination.
-         *
-         * @return The destination information, or null if none.
-         */
-        public @Nullable DestinationInfo getSelectedDestination() {
-            return null;
-        }
-
-        /**
-         * Gets the list of discovered destinations.
-         * <p>
-         * This list is only valid while discovery is running and is null otherwise.
-         * </p>
-         *
-         * @return The list of discovered destinations, or null if discovery is not running.
-         */
-        public @NonNull List<DestinationInfo> getDiscoveredDestinations() {
-            return null;
-        }
-
-        /**
-         * Adds a callback to receive state changes.
-         *
-         * @param callback The callback to set, or null if none.
-         * @param handler The handler to receive callbacks, or null to use the current thread.
-         */
-        public void addStateCallback(@Nullable StateCallback callback,
-                @Nullable Handler handler) {
-            if (callback == null) {
-                throw new IllegalArgumentException("callback must not be null");
-            }
-            if (handler == null) {
-                handler = new Handler();
-            }
-            // todo
-        }
-
-        /**
-         * Removes a callback for state changes.
-         *
-         * @param callback The callback to set, or null if none.
-         */
-        public void removeStateCallback(@Nullable StateCallback callback) {
-            // todo
-        }
-
-        /**
-         * Starts performing discovery.
-         * <p>
-         * Performing discovery is expensive.  Make sure to call {@link #stopDiscovery}
-         * as soon as possible once a new destination has been selected to allow the system
-         * to stop services associated with discovery.
-         * </p>
-         *
-         * @param flags The discovery flags, such as {@link MediaRouter#DISCOVERY_FLAG_BACKGROUND}.
-         */
-        public void startDiscovery(@DiscoveryFlags int flags) {
-            // todo
-        }
-
-        /**
-         * Stops performing discovery.
-         */
-        public void stopDiscovery() {
-            // todo
-        }
-
-        /**
-         * Connects to a destination during route discovery.
-         * <p>
-         * This method may only be called while route discovery is active and the
-         * destination appears in the
-         * {@link #getDiscoveredDestinations list of discovered destinations}.
-         * If the media router is already connected to a route then it will first disconnect
-         * from the current route then connect to the new route.
-         * </p>
-         *
-         * @param destination The destination to which the media router should connect.
-         * @param flags The connection flags, such as {@link MediaRouter#CONNECTION_FLAG_BARGE}.
-         */
-        public void connect(@NonNull DestinationInfo destination, @DiscoveryFlags int flags) {
-            // todo
-        }
-
-        /**
-         * Disconnects from the currently selected destination.
-         * <p>
-         * Does nothing if not currently connected.
-         * </p>
-         *
-         * @param reason The reason for the disconnection: one of
-         * {@link #DISCONNECTION_REASON_APPLICATION_REQUEST},
-         * {@link #DISCONNECTION_REASON_USER_REQUEST}, or {@link #DISCONNECTION_REASON_ERROR}.
-         */
-        public void disconnect(@DisconnectionReason int reason) {
-            // todo
-        }
-    }
-
-    /**
-     * Describes immutable properties of a connection to a route.
-     */
-    public static final class ConnectionInfo {
-        private final RouteInfo mRoute;
-        private final AudioAttributes mAudioAttributes;
-        private final Display mPresentationDisplay;
-        private final VolumeProvider mVolumeProvider;
-        private final IBinder[] mProtocolBinders;
-        private final Object[] mProtocolInstances;
-        private final Bundle mExtras;
-        private final ArrayList<Closeable> mCloseables;
-
-        private static final Class<?>[] MEDIA_ROUTE_PROTOCOL_CTOR_PARAMETERS =
-                new Class<?>[] { IBinder.class };
-
-        ConnectionInfo(RouteInfo route,
-                AudioAttributes audioAttributes, Display display,
-                VolumeProvider volumeProvider, IBinder[] protocolBinders,
-                Bundle extras, ArrayList<Closeable> closeables) {
-            mRoute = route;
-            mAudioAttributes = audioAttributes;
-            mPresentationDisplay = display;
-            mVolumeProvider = volumeProvider;
-            mProtocolBinders = protocolBinders;
-            mProtocolInstances = new Object[mProtocolBinders.length];
-            mExtras = extras;
-            mCloseables = closeables;
-        }
-
-        /**
-         * Gets the route that is connected.
-         */
-        public @NonNull RouteInfo getRoute() {
-            return mRoute;
-        }
-
-        /**
-         * Gets the audio attributes which the client should use to stream audio
-         * to the destination, or null if the route does not support live audio streaming.
-         */
-        public @Nullable AudioAttributes getAudioAttributes() {
-            return mAudioAttributes;
-        }
-
-        /**
-         * Gets the display which the client should use to stream video to the
-         * destination using a {@link Presentation}, or null if the route does not
-         * support live video streaming.
-         */
-        public @Nullable Display getPresentationDisplay() {
-            return mPresentationDisplay;
-        }
-
-        /**
-         * Gets the route's volume provider, or null if none.
-         */
-        public @Nullable VolumeProvider getVolumeProvider() {
-            return mVolumeProvider;
-        }
-
-        /**
-         * Gets the set of supported route features.
-         */
-        public @RouteFeatures int getFeatures() {
-            return mRoute.getFeatures();
-        }
-
-        /**
-         * Gets the list of supported route protocols.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         */
-        public @NonNull List<String> getProtocols() {
-            return mRoute.getProtocols();
-        }
-
-        /**
-         * Gets an instance of a route protocol object that wraps the protocol binder
-         * and provides easy access to the protocol's functionality.
-         * <p>
-         * This is a convenience method which invokes {@link #getProtocolBinder(String)}
-         * using the name of the provided class then passes the resulting {@link IBinder}
-         * to a single-argument constructor of that class.
-         * </p><p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         */
-        @SuppressWarnings("unchecked")
-        public @Nullable <T> T getProtocolObject(Class<T> clazz) {
-            int index = getProtocols().indexOf(clazz.getName());
-            if (index < 0) {
-                return null;
-            }
-            if (mProtocolInstances[index] == null && mProtocolBinders[index] != null) {
-                final Constructor<T> ctor;
-                try {
-                    ctor = clazz.getConstructor(MEDIA_ROUTE_PROTOCOL_CTOR_PARAMETERS);
-                } catch (NoSuchMethodException ex) {
-                    throw new RuntimeException("Could not find public constructor "
-                            + "with IBinder argument in protocol class: " + clazz.getName(), ex);
-                }
-                try {
-                    mProtocolInstances[index] = ctor.newInstance(mProtocolBinders[index]);
-                } catch (InstantiationException | IllegalAccessException
-                        | InvocationTargetException ex) {
-                    throw new RuntimeException("Could create instance of protocol class: "
-                            + clazz.getName(), ex);
-                }
-            }
-            return (T)mProtocolInstances[index];
-        }
-
-        /**
-         * Gets the {@link IBinder} that provides access to the specified route protocol
-         * or null if the protocol is not supported.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         */
-        public @Nullable IBinder getProtocolBinder(@NonNull String name) {
-            int index = getProtocols().indexOf(name);
-            return index >= 0 ? mProtocolBinders[index] : null;
-        }
-
-        /**
-         * Gets the {@link IBinder} that provides access to the specified route protocol
-         * at the given index in the protocol list or null if the protocol is not supported.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         */
-        public @Nullable IBinder getProtocolBinder(int index) {
-            return mProtocolBinders[index];
-        }
-
-        /**
-         * Gets optional extra media route service or protocol specific information about
-         * the connection.  Use the service or protocol name as the prefix for
-         * any extras to avoid namespace collisions.
-         */
-        public @Nullable Bundle getExtras() {
-            return mExtras;
-        }
-
-        /**
-         * Closes all closeables associated with the connection when the connection
-         * is being torn down.
-         */
-        void close() {
-            final int count = mCloseables.size();
-            for (int i = 0; i < count; i++) {
-                try {
-                    mCloseables.get(i).close();
-                } catch (IOException ex) {
-                }
-            }
-        }
-
-        @Override
-        public @NonNull String toString() {
-            return "ConnectionInfo{ route=" + mRoute
-                    + ", audioAttributes=" + mAudioAttributes
-                    + ", presentationDisplay=" + mPresentationDisplay
-                    + ", volumeProvider=" + mVolumeProvider
-                    + ", protocolBinders=" + mProtocolBinders + " }";
-        }
-
-        /**
-         * Builds {@link ConnectionInfo} objects.
-         */
-        public static final class Builder {
-            private final RouteInfo mRoute;
-            private AudioAttributes mAudioAttributes;
-            private Display mPresentationDisplay;
-            private VolumeProvider mVolumeProvider;
-            private final IBinder[] mProtocols;
-            private Bundle mExtras;
-            private final ArrayList<Closeable> mCloseables = new ArrayList<Closeable>();
-
-            /**
-             * Creates a builder for connection information.
-             *
-             * @param route The route that is connected.
-             */
-            public Builder(@NonNull RouteInfo route) {
-                if (route == null) {
-                    throw new IllegalArgumentException("route");
-                }
-                mRoute = route;
-                mProtocols = new IBinder[route.getProtocols().size()];
-            }
-
-            /**
-             * Sets the audio attributes which the client should use to stream audio
-             * to the destination, or null if the route does not support live audio streaming.
-             */
-            public @NonNull Builder setAudioAttributes(
-                    @Nullable AudioAttributes audioAttributes) {
-                mAudioAttributes = audioAttributes;
-                return this;
-            }
-
-            /**
-             * Sets the display which the client should use to stream video to the
-             * destination using a {@link Presentation}, or null if the route does not
-             * support live video streaming.
-             */
-            public @NonNull Builder setPresentationDisplay(@Nullable Display display) {
-                mPresentationDisplay = display;
-                return this;
-            }
-
-            /**
-             * Sets the route's volume provider, or null if none.
-             */
-            public @NonNull Builder setVolumeProvider(@Nullable VolumeProvider provider) {
-                mVolumeProvider = provider;
-                return this;
-            }
-
-            /**
-             * Sets the binder stub of a supported route protocol using
-             * the protocol's fully qualified class name.  The protocol must be one
-             * of those that was indicated as being supported by the route.
-             * <p>
-             * If the stub implements {@link Closeable} then it will automatically
-             * be closed when the client disconnects from the route.
-             * </p><p>
-             * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-             * for more information.
-             * </p>
-             */
-            public @NonNull Builder setProtocolStub(@NonNull Class<?> clazz,
-                    @NonNull IInterface stub) {
-                if (clazz == null) {
-                    throw new IllegalArgumentException("clazz must not be null");
-                }
-                if (stub == null) {
-                    throw new IllegalArgumentException("stub must not be null");
-                }
-                if (stub instanceof Closeable) {
-                    mCloseables.add((Closeable)stub);
-                }
-                return setProtocolBinder(clazz.getName(), stub.asBinder());
-            }
-
-            /**
-             * Sets the binder interface of a supported route protocol by name.
-             * The protocol must be one of those that was indicated as being supported
-             * by the route.
-             * <p>
-             * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-             * for more information.
-             * </p>
-             */
-            public @NonNull Builder setProtocolBinder(@NonNull String name,
-                    @NonNull IBinder binder) {
-                if (TextUtils.isEmpty(name)) {
-                    throw new IllegalArgumentException("name must not be null or empty");
-                }
-                if (binder == null) {
-                    throw new IllegalArgumentException("binder must not be null");
-                }
-                int index = mRoute.getProtocols().indexOf(name);
-                if (index < 0) {
-                    throw new IllegalArgumentException("name must specify a protocol that "
-                            + "the route actually declared that it supports: "
-                            + "name=" + name + ", protocols=" + mRoute.getProtocols());
-                }
-                mProtocols[index] = binder;
-                return this;
-            }
-
-            /**
-             * Sets optional extra media route service or protocol specific information about
-             * the connection.  Use the service or protocol name as the prefix for
-             * any extras to avoid namespace collisions.
-             */
-            public @NonNull Builder setExtras(@Nullable Bundle extras) {
-                mExtras = extras;
-                return this;
-            }
-
-            /**
-             * Builds the {@link ConnectionInfo} object.
-             */
-            public @NonNull ConnectionInfo build() {
-                return new ConnectionInfo(mRoute,
-                        mAudioAttributes, mPresentationDisplay,
-                        mVolumeProvider, mProtocols, mExtras, mCloseables);
-            }
-        }
-    }
-
-    /**
-     * Describes one particular way of routing media content to a destination
-     * according to the capabilities specified by a media route selector on behalf
-     * of an application.
-     */
-    public static final class RouteInfo {
-        private final String mId;
-        private final DestinationInfo mDestination;
-        private final MediaRouteSelector mSelector;
-        private final int mFeatures;
-        private final ArrayList<String> mProtocols;
-        private final Bundle mExtras;
-
-        RouteInfo(String id, DestinationInfo destination, MediaRouteSelector selector,
-                int features, ArrayList<String> protocols, Bundle extras) {
-            mId = id;
-            mDestination = destination;
-            mSelector = selector;
-            mFeatures = features;
-            mProtocols = protocols;
-            mExtras = extras;
-        }
-
-        /**
-         * Gets the route's stable identifier.
-         * <p>
-         * The id is intended to uniquely identify the route among all routes that
-         * are offered by a particular destination in such a way that the client can
-         * refer to it at a later time.
-         * </p>
-         */
-        public @NonNull String getId() {
-            return mId;
-        }
-
-        /**
-         * Gets the destination that is offering this route.
-         */
-        public @NonNull DestinationInfo getDestination() {
-            return mDestination;
-        }
-
-        /**
-         * Gets the media route selector provided by the client for which this
-         * route was created.
-         * <p>
-         * It is implied that this route supports all of the required capabilities
-         * that were expressed in the selector.
-         * </p>
-         */
-        public @NonNull MediaRouteSelector getSelector() {
-            return mSelector;
-        }
-
-        /**
-         * Gets the set of supported route features.
-         */
-        public @RouteFeatures int getFeatures() {
-            return mFeatures;
-        }
-
-        /**
-         * Gets the list of supported route protocols.
-         * <p>
-         * Refer to <code>android.support.media.protocols.MediaRouteProtocol</code>
-         * for more information.
-         * </p>
-         */
-        public @NonNull List<String> getProtocols() {
-            return mProtocols;
-        }
-
-        /**
-         * Gets optional extra information about the route, or null if none.
-         */
-        public @Nullable Bundle getExtras() {
-            return mExtras;
-        }
-
-        @Override
-        public @NonNull String toString() {
-            return "RouteInfo{ id=" + mId + ", destination=" + mDestination
-                    + ", features=0x" + Integer.toHexString(mFeatures)
-                    + ", selector=" + mSelector + ", protocols=" + mProtocols
-                    + ", extras=" + mExtras + " }";
-        }
-
-        /**
-         * Builds {@link RouteInfo} objects.
-         */
-        public static final class Builder {
-            private final DestinationInfo mDestination;
-            private final String mId;
-            private final MediaRouteSelector mSelector;
-            private int mFeatures;
-            private final ArrayList<String> mProtocols = new ArrayList<String>();
-            private Bundle mExtras;
-
-            /**
-             * Creates a builder for route information.
-             *
-             * @param id The route's stable identifier.
-             * @param destination The destination of this route.
-             * @param selector The media route selector provided by the client for which
-             * this route was created.  This must be one of the selectors that was
-             * included in the discovery request.
-             */
-            public Builder(@NonNull String id, @NonNull DestinationInfo destination,
-                    @NonNull MediaRouteSelector selector) {
-                if (TextUtils.isEmpty(id)) {
-                    throw new IllegalArgumentException("id must not be null or empty");
-                }
-                if (destination == null) {
-                    throw new IllegalArgumentException("destination must not be null");
-                }
-                if (selector == null) {
-                    throw new IllegalArgumentException("selector must not be null");
-                }
-                mDestination = destination;
-                mId = id;
-                mSelector = selector;
-            }
-
-            /**
-             * Sets the set of supported route features.
-             */
-            public @NonNull Builder setFeatures(@RouteFeatures int features) {
-                mFeatures = features;
-                return this;
-            }
-
-            /**
-             * Adds a supported route protocol using its fully qualified class name.
-             * <p>
-             * If the protocol was not requested by the client in its selector
-             * then it will be silently discarded.
-             * </p>
-             */
-            public @NonNull <T extends IInterface> Builder addProtocol(@NonNull Class<T> clazz) {
-                if (clazz == null) {
-                    throw new IllegalArgumentException("clazz must not be null");
-                }
-                return addProtocol(clazz.getName());
-            }
-
-            /**
-             * Adds a supported route protocol by name.
-             * <p>
-             * If the protocol was not requested by the client in its selector
-             * then it will be silently discarded.
-             * </p>
-             */
-            public @NonNull Builder addProtocol(@NonNull String name) {
-                if (TextUtils.isEmpty(name)) {
-                    throw new IllegalArgumentException("name must not be null");
-                }
-                if (mSelector.containsProtocol(name)) {
-                    mProtocols.add(name);
-                }
-                return this;
-            }
-
-            /**
-             * Sets optional extra information about the route, or null if none.
-             */
-            public @NonNull Builder setExtras(@Nullable Bundle extras) {
-                mExtras = extras;
-                return this;
-            }
-
-            /**
-             * Builds the {@link RouteInfo} object.
-             * <p>
-             * Ensures that all required protocols have been supplied.
-             * </p>
-             */
-            public @NonNull RouteInfo build() {
-                int missingFeatures = mSelector.getRequiredFeatures() & ~mFeatures;
-                if (missingFeatures != 0) {
-                    throw new IllegalStateException("The media route selector "
-                            + "specified required features which this route does "
-                            + "not appear to support so it should not have been published: "
-                            + "missing 0x" + Integer.toHexString(missingFeatures));
-                }
-                for (String protocol : mSelector.getRequiredProtocols()) {
-                    if (!mProtocols.contains(protocol)) {
-                        throw new IllegalStateException("The media route selector "
-                                + "specified required protocols which this route "
-                                + "does not appear to support so it should not have "
-                                + "been published: missing " + protocol);
-                    }
-                }
-                return new RouteInfo(mId, mDestination, mSelector,
-                        mFeatures, mProtocols, mExtras);
-            }
-        }
-    }
-
-    /**
-     * Describes a destination for media content such as a device,
-     * an individual port on a device, or a group of devices.
-     */
-    public static final class DestinationInfo {
-        private final String mId;
-        private final ServiceMetadata mService;
-        private final CharSequence mName;
-        private final CharSequence mDescription;
-        private final int mIconResourceId;
-        private final Bundle mExtras;
-
-        DestinationInfo(String id, ServiceMetadata service,
-                CharSequence name, CharSequence description,
-                int iconResourceId, Bundle extras) {
-            mId = id;
-            mService = service;
-            mName = name;
-            mDescription = description;
-            mIconResourceId = iconResourceId;
-            mExtras = extras;
-        }
-
-        /**
-         * Gets the destination's stable identifier.
-         * <p>
-         * The id is intended to uniquely identify the destination among all destinations
-         * provided by the media route service in such a way that the client can
-         * refer to it at a later time.  Ideally, the id should be resilient to
-         * user-initiated actions such as changes to the name or description
-         * of the destination.
-         * </p>
-         */
-        public @NonNull String getId() {
-            return mId;
-        }
-
-        /**
-         * Gets metadata about the service that is providing access to this destination.
-         */
-        public @NonNull ServiceMetadata getServiceMetadata() {
-            return mService;
-        }
-
-        /**
-         * Gets the destination's name for display to the user.
-         */
-        public @NonNull CharSequence getName() {
-            return mName;
-        }
-
-        /**
-         * Gets the destination's description for display to the user, or null if none.
-         */
-        public @Nullable CharSequence getDescription() {
-            return mDescription;
-        }
-
-        /**
-         * Gets an icon resource from the service's package which is used
-         * to identify the destination, or -1 if none.
-         */
-        public @DrawableRes int getIconResourceId() {
-            return mIconResourceId;
-        }
-
-        /**
-         * Loads the icon drawable, or null if none.
-         */
-        public @Nullable Drawable loadIcon(@NonNull PackageManager pm) {
-            return mIconResourceId >= 0 ? mService.getDrawable(pm, mIconResourceId) : null;
-        }
-
-        /**
-         * Gets optional extra information about the destination, or null if none.
-         */
-        public @Nullable Bundle getExtras() {
-            return mExtras;
-        }
-
-        @Override
-        public @NonNull String toString() {
-            return "DestinationInfo{ id=" + mId + ", service=" + mService + ", name=" + mName
-                    + ", description=" + mDescription + ", iconResourceId=" + mIconResourceId
-                    + ", extras=" + mExtras + " }";
-        }
-
-        /**
-         * Builds {@link DestinationInfo} objects.
-         */
-        public static final class Builder {
-            private final String mId;
-            private final ServiceMetadata mService;
-            private final CharSequence mName;
-            private CharSequence mDescription;
-            private int mIconResourceId = -1;
-            private Bundle mExtras;
-
-            /**
-             * Creates a builder for destination information.
-             *
-             * @param id The destination's stable identifier.
-             * @param service Metatada about the service that is providing access to
-             * this destination.
-             * @param name The destination's name for display to the user.
-             */
-            public Builder(@NonNull String id, @NonNull ServiceMetadata service,
-                    @NonNull CharSequence name) {
-                if (TextUtils.isEmpty(id)) {
-                    throw new IllegalArgumentException("id must not be null or empty");
-                }
-                if (service == null) {
-                    throw new IllegalArgumentException("service must not be null");
-                }
-                if (TextUtils.isEmpty(name)) {
-                    throw new IllegalArgumentException("name must not be null or empty");
-                }
-                mId = id;
-                mService = service;
-                mName = name;
-            }
-
-            /**
-             * Sets the destination's description for display to the user, or null if none.
-             */
-            public @NonNull Builder setDescription(@Nullable CharSequence description) {
-                mDescription = description;
-                return this;
-            }
-
-            /**
-             * Sets an icon resource from this package used to identify the destination,
-             * or -1 if none.
-             */
-            public @NonNull Builder setIconResourceId(@DrawableRes int resid) {
-                mIconResourceId = resid;
-                return this;
-            }
-
-            /**
-             * Gets optional extra information about the destination, or null if none.
-             */
-            public @NonNull Builder setExtras(@Nullable Bundle extras) {
-                mExtras = extras;
-                return this;
-            }
-
-            /**
-             * Builds the {@link DestinationInfo} object.
-             */
-            public @NonNull DestinationInfo build() {
-                return new DestinationInfo(mId, mService, mName, mDescription,
-                        mIconResourceId, mExtras);
-            }
-        }
-    }
-
-    /**
-     * Describes metadata about a {@link MediaRouteService} which is providing
-     * access to certain kinds of destinations.
-     */
-    public static final class ServiceMetadata {
-        private final ServiceInfo mService;
-        private CharSequence mLabel;
-        private Drawable mIcon;
-
-        ServiceMetadata(Service service) throws NameNotFoundException {
-            mService = service.getPackageManager().getServiceInfo(
-                    new ComponentName(service, service.getClass()),
-                    PackageManager.GET_META_DATA);
-        }
-
-        ServiceMetadata(ServiceInfo service) {
-            mService = service;
-        }
-
-        /**
-         * Gets the service's component information including it name, label and icon.
-         */
-        public @NonNull ServiceInfo getService() {
-            return mService;
-        }
-
-        /**
-         * Gets the service's component name.
-         */
-        public @NonNull ComponentName getComponentName() {
-            return new ComponentName(mService.packageName, mService.name);
-        }
-
-        /**
-         * Gets the service's package name.
-         */
-        public @NonNull String getPackageName() {
-            return mService.packageName;
-        }
-
-        /**
-         * Gets the service's name for display to the user, or null if none.
-         */
-        public @NonNull CharSequence getLabel(@NonNull PackageManager pm) {
-            if (mLabel == null) {
-                mLabel = mService.loadLabel(pm);
-            }
-            return mLabel;
-        }
-
-        /**
-         * Gets the icon drawable, or null if none.
-         */
-        public @Nullable Drawable getIcon(@NonNull PackageManager pm) {
-            if (mIcon == null) {
-                mIcon = mService.loadIcon(pm);
-            }
-            return mIcon;
-        }
-
-        // TODO: add service metadata
-
-        Drawable getDrawable(PackageManager pm, int resid) {
-            return pm.getDrawable(getPackageName(), resid, mService.applicationInfo);
-        }
-
-        @Override
-        public @NonNull String toString() {
-            return "ServiceInfo{ service=" + getComponentName().toShortString() + " }";
-        }
-    }
-
-    /**
-     * Describes a request to discover routes on behalf of an application.
-     */
-    public static final class DiscoveryRequest {
-        private final ArrayList<MediaRouteSelector> mSelectors =
-                new ArrayList<MediaRouteSelector>();
-        private int mFlags;
-
-        DiscoveryRequest(@NonNull List<MediaRouteSelector> selectors) {
-            setSelectors(selectors);
-        }
-
-        /**
-         * Sets the list of media route selectors to consider during discovery.
-         */
-        public void setSelectors(@NonNull List<MediaRouteSelector> selectors) {
-            if (selectors == null) {
-                throw new IllegalArgumentException("selectors");
-            }
-            mSelectors.clear();
-            mSelectors.addAll(selectors);
-        }
-
-        /**
-         * Gets the list of media route selectors to consider during discovery.
-         */
-        public @NonNull List<MediaRouteSelector> getSelectors() {
-            return mSelectors;
-        }
-
-        /**
-         * Gets discovery flags, such as {@link MediaRouter#DISCOVERY_FLAG_BACKGROUND}.
-         */
-        public @DiscoveryFlags int getFlags() {
-            return mFlags;
-        }
-
-        /**
-         * Sets discovery flags, such as {@link MediaRouter#DISCOVERY_FLAG_BACKGROUND}.
-         */
-        public void setFlags(@DiscoveryFlags int flags) {
-            mFlags = flags;
-        }
-
-        @Override
-        public @NonNull String toString() {
-            return "DiscoveryRequest{ selectors=" + mSelectors
-                    + ", flags=0x" + Integer.toHexString(mFlags)
-                    + " }";
-        }
-    }
-
-    /**
-     * Describes a request to connect to a previously discovered route on
-     * behalf of an application.
-     */
-    public static final class ConnectionRequest {
-        private RouteInfo mRoute;
-        private int mFlags;
-        private Bundle mExtras;
-
-        ConnectionRequest(@NonNull RouteInfo route) {
-            setRoute(route);
-        }
-
-        /**
-         * Gets the route to which to connect.
-         */
-        public @NonNull RouteInfo getRoute() {
-            return mRoute;
-        }
-
-        /**
-         * Sets the route to which to connect.
-         */
-        public void setRoute(@NonNull RouteInfo route) {
-            if (route == null) {
-                throw new IllegalArgumentException("route must not be null");
-            }
-            mRoute = route;
-        }
-
-        /**
-         * Gets connection flags, such as {@link MediaRouter#CONNECTION_FLAG_BARGE}.
-         */
-        public @ConnectionFlags int getFlags() {
-            return mFlags;
-        }
-
-        /**
-         * Sets connection flags, such as {@link MediaRouter#CONNECTION_FLAG_BARGE}.
-         */
-        public void setFlags(@ConnectionFlags int flags) {
-            mFlags = flags;
-        }
-
-        /**
-         * Gets optional extras supplied by the application as part of the call to
-         * connect, or null if none.  The media route service may use this
-         * information to configure the route during connection.
-         */
-        public @Nullable Bundle getExtras() {
-            return mExtras;
-        }
-
-        /**
-         * Sets optional extras supplied by the application as part of the call to
-         * connect, or null if none.  The media route service may use this
-         * information to configure the route during connection.
-         */
-        public void setExtras(@Nullable Bundle extras) {
-            mExtras = extras;
-        }
-
-        @Override
-        public @NonNull String toString() {
-            return "ConnectionRequest{ route=" + mRoute
-                    + ", flags=0x" + Integer.toHexString(mFlags)
-                    + ", extras=" + mExtras + " }";
-        }
-    }
-
-    /**
-     * Callback interface to specify policy for route discovery, filtering,
-     * and connection establishment as well as observe media router state changes.
-     */
-    public static abstract class RoutingCallback extends StateCallback {
-        /**
-         * Called to prepare a discovery request object to specify the desired
-         * media route selectors when the media router has been asked to start discovery.
-         * <p>
-         * By default, the discovery request contains all of the selectors which
-         * have been added to the media router.  Subclasses may override the list of
-         * selectors by modifying the discovery request object before returning.
-         * </p>
-         *
-         * @param request The discovery request object which may be modified by
-         * this method to alter how discovery will be performed.
-         * @param selectors The immutable list of media route selectors which were
-         * added to the media router.
-         * @return True to allow discovery to proceed or false to abort it.
-         * By default, this methods returns true.
-         */
-        public boolean onPrepareDiscoveryRequest(@NonNull DiscoveryRequest request,
-                @NonNull List<MediaRouteSelector> selectors) {
-            return true;
-        }
-
-        /**
-         * Called to prepare a connection request object to specify the desired
-         * route and connection parameters when the media router has been asked to
-         * connect to a particular destination.
-         * <p>
-         * By default, the connection request specifies the first available route
-         * to the destination.  Subclasses may override the route and destination
-         * or set additional connection parameters by modifying the connection request
-         * object before returning.
-         * </p>
-         *
-         * @param request The connection request object which may be modified by
-         * this method to alter how the connection will be established.
-         * @param destination The destination to which the media router was asked
-         * to connect.
-         * @param routes The list of routes that belong to that destination sorted
-         * in the same order as their matching media route selectors which were
-         * used during discovery.
-         * @return True to allow the connection to proceed or false to abort it.
-         * By default, this methods returns true.
-         */
-        public boolean onPrepareConnectionRequest(
-                @NonNull ConnectionRequest request,
-                @NonNull DestinationInfo destination, @NonNull List<RouteInfo> routes) {
-            return true;
-        }
-    }
-
-    /**
-     * Callback class to receive events from a {@link MediaRouter.Delegate}.
-     */
-    public static abstract class StateCallback {
-        /**
-         * Called when the media router has been released.
-         */
-        public void onReleased() { }
-
-        /**
-         * Called when the discovery state has changed.
-         *
-         * @param state The new discovery state: one of
-         * {@link #DISCOVERY_STATE_STOPPED} or {@link #DISCOVERY_STATE_STARTED}.
-         */
-        public void onDiscoveryStateChanged(@DiscoveryState int state) { }
-
-        /**
-         * Called when the connection state has changed.
-         *
-         * @param state The new connection state: one of
-         * {@link #CONNECTION_STATE_DISCONNECTED}, {@link #CONNECTION_STATE_CONNECTING}
-         * or {@link #CONNECTION_STATE_CONNECTED}.
-         */
-        public void onConnectionStateChanged(@ConnectionState int state) { }
-
-        /**
-         * Called when the selected destination has changed.
-         *
-         * @param destination The new selected destination, or null if none.
-         */
-        public void onSelectedDestinationChanged(@Nullable DestinationInfo destination) { }
-
-        /**
-         * Called when route discovery has started.
-         */
-        public void onDiscoveryStarted() { }
-
-        /**
-         * Called when route discovery has stopped normally.
-         * <p>
-         * Abnormal termination is reported via {@link #onDiscoveryFailed}.
-         * </p>
-         */
-        public void onDiscoveryStopped() { }
-
-        /**
-         * Called when discovery has failed in a non-recoverable manner.
-         *
-         * @param error The error code: one of
-         * {@link MediaRouter#DISCOVERY_ERROR_UNKNOWN},
-         * {@link MediaRouter#DISCOVERY_ERROR_ABORTED},
-         * or {@link MediaRouter#DISCOVERY_ERROR_NO_CONNECTIVITY}.
-         * @param message The localized error message, or null if none.  This message
-         * may be shown to the user.
-         * @param extras Additional information about the error which a client
-         * may use, or null if none.
-         */
-        public void onDiscoveryFailed(@DiscoveryError int error, @Nullable CharSequence message,
-                @Nullable Bundle extras) { }
-
-        /**
-         * Called when a new destination is found or has changed during discovery.
-         * <p>
-         * Certain destinations may be omitted because they have been filtered
-         * out by the media router's routing callback.
-         * </p>
-         *
-         * @param destination The destination that was found.
-         */
-        public void onDestinationFound(@NonNull DestinationInfo destination) { }
-
-        /**
-         * Called when a destination is no longer reachable or is no longer
-         * offering any routes that satisfy the discovery request.
-         *
-         * @param destination The destination that went away.
-         */
-        public void onDestinationLost(@NonNull DestinationInfo destination) { }
-
-        /**
-         * Called when a connection attempt begins.
-         */
-        public void onConnecting() { }
-
-        /**
-         * Called when the connection succeeds.
-         */
-        public void onConnected() { }
-
-        /**
-         * Called when the connection is terminated normally.
-         * <p>
-         * Abnormal termination is reported via {@link #onConnectionFailed}.
-         * </p>
-         */
-        public void onDisconnected() { }
-
-        /**
-         * Called when a connection attempt or connection in
-         * progress has failed in a non-recoverable manner.
-         *
-         * @param error The error code: one of
-         * {@link MediaRouter#CONNECTION_ERROR_ABORTED},
-         * {@link MediaRouter#CONNECTION_ERROR_UNAUTHORIZED},
-         * {@link MediaRouter#CONNECTION_ERROR_UNREACHABLE},
-         * {@link MediaRouter#CONNECTION_ERROR_BUSY},
-         * {@link MediaRouter#CONNECTION_ERROR_TIMEOUT},
-         * {@link MediaRouter#CONNECTION_ERROR_BROKEN},
-         * or {@link MediaRouter#CONNECTION_ERROR_BARGED}.
-         * @param message The localized error message, or null if none.  This message
-         * may be shown to the user.
-         * @param extras Additional information about the error which a client
-         * may use, or null if none.
-         */
-        public void onConnectionFailed(@ConnectionError int error,
-                @Nullable CharSequence message, @Nullable Bundle extras) { }
-    }
-}
diff --git a/media/java/android/media/routing/ParcelableConnectionInfo.aidl b/media/java/android/media/routing/ParcelableConnectionInfo.aidl
deleted file mode 100644
index 4a9ec94..0000000
--- a/media/java/android/media/routing/ParcelableConnectionInfo.aidl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2014, 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.media.routing;
-
-parcelable ParcelableConnectionInfo;
diff --git a/media/java/android/media/routing/ParcelableConnectionInfo.java b/media/java/android/media/routing/ParcelableConnectionInfo.java
deleted file mode 100644
index 45cfe9f..0000000
--- a/media/java/android/media/routing/ParcelableConnectionInfo.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2014 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.media.routing;
-
-import android.media.AudioAttributes;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * Internal parcelable representation of a media route connection.
- */
-class ParcelableConnectionInfo implements Parcelable {
-    public AudioAttributes audioAttributes;
-    public int presentationDisplayId = -1;
-    // todo: volume
-    public IBinder[] protocolBinders;
-    public Bundle extras;
-
-    public static final Parcelable.Creator<ParcelableConnectionInfo> CREATOR =
-            new Parcelable.Creator<ParcelableConnectionInfo>() {
-        @Override
-        public ParcelableConnectionInfo createFromParcel(Parcel source) {
-            ParcelableConnectionInfo info = new ParcelableConnectionInfo();
-            if (source.readInt() != 0) {
-                info.audioAttributes = AudioAttributes.CREATOR.createFromParcel(source);
-            }
-            info.presentationDisplayId = source.readInt();
-            info.protocolBinders = source.createBinderArray();
-            info.extras = source.readBundle();
-            return info;
-        }
-
-        @Override
-        public ParcelableConnectionInfo[] newArray(int size) {
-            return new ParcelableConnectionInfo[size];
-        }
-    };
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        if (audioAttributes != null) {
-            dest.writeInt(1);
-            audioAttributes.writeToParcel(dest, flags);
-        } else {
-            dest.writeInt(0);
-        }
-        dest.writeInt(presentationDisplayId);
-        dest.writeBinderArray(protocolBinders);
-        dest.writeBundle(extras);
-    }
-}
diff --git a/media/java/android/media/routing/ParcelableDestinationInfo.aidl b/media/java/android/media/routing/ParcelableDestinationInfo.aidl
deleted file mode 100644
index bf1c198..0000000
--- a/media/java/android/media/routing/ParcelableDestinationInfo.aidl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2014, 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.media.routing;
-
-parcelable ParcelableDestinationInfo;
diff --git a/media/java/android/media/routing/ParcelableDestinationInfo.java b/media/java/android/media/routing/ParcelableDestinationInfo.java
deleted file mode 100644
index eca5eec..0000000
--- a/media/java/android/media/routing/ParcelableDestinationInfo.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2014 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.media.routing;
-
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-/**
- * Internal parcelable representation of a media destination.
- */
-class ParcelableDestinationInfo implements Parcelable {
-    public String id;
-    public CharSequence name;
-    public CharSequence description;
-    public int iconResourceId;
-    public Bundle extras;
-
-    public static final Parcelable.Creator<ParcelableDestinationInfo> CREATOR =
-            new Parcelable.Creator<ParcelableDestinationInfo>() {
-        @Override
-        public ParcelableDestinationInfo createFromParcel(Parcel source) {
-            ParcelableDestinationInfo info = new ParcelableDestinationInfo();
-            info.id = source.readString();
-            info.name = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
-            info.description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
-            info.iconResourceId = source.readInt();
-            info.extras = source.readBundle();
-            return info;
-        }
-
-        @Override
-        public ParcelableDestinationInfo[] newArray(int size) {
-            return new ParcelableDestinationInfo[size];
-        }
-    };
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeString(id);
-        TextUtils.writeToParcel(name, dest, flags);
-        TextUtils.writeToParcel(description, dest, flags);
-        dest.writeInt(iconResourceId);
-        dest.writeBundle(extras);
-    }
-}
diff --git a/media/java/android/media/routing/ParcelableRouteInfo.aidl b/media/java/android/media/routing/ParcelableRouteInfo.aidl
deleted file mode 100644
index 126afaa..0000000
--- a/media/java/android/media/routing/ParcelableRouteInfo.aidl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2014, 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.media.routing;
-
-parcelable ParcelableRouteInfo;
diff --git a/media/java/android/media/routing/ParcelableRouteInfo.java b/media/java/android/media/routing/ParcelableRouteInfo.java
deleted file mode 100644
index fb1a547..0000000
--- a/media/java/android/media/routing/ParcelableRouteInfo.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2014 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.media.routing;
-
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * Internal parcelable representation of a media route.
- */
-class ParcelableRouteInfo implements Parcelable {
-    public String id;
-    public int selectorIndex; // index of selector within list used for discovery
-    public int features;
-    public String[] protocols;
-    public Bundle extras;
-
-    public static final Parcelable.Creator<ParcelableRouteInfo> CREATOR =
-            new Parcelable.Creator<ParcelableRouteInfo>() {
-        @Override
-        public ParcelableRouteInfo createFromParcel(Parcel source) {
-            ParcelableRouteInfo info = new ParcelableRouteInfo();
-            info.id = source.readString();
-            info.selectorIndex = source.readInt();
-            info.features = source.readInt();
-            info.protocols = source.createStringArray();
-            info.extras = source.readBundle();
-            return info;
-        }
-
-        @Override
-        public ParcelableRouteInfo[] newArray(int size) {
-            return new ParcelableRouteInfo[size];
-        }
-    };
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeString(id);
-        dest.writeInt(selectorIndex);
-        dest.writeInt(features);
-        dest.writeStringArray(protocols);
-        dest.writeBundle(extras);
-    }
-}
diff --git a/media/java/android/media/session/ISession.aidl b/media/java/android/media/session/ISession.aidl
index af3b72e..bd0019f 100644
--- a/media/java/android/media/session/ISession.aidl
+++ b/media/java/android/media/session/ISession.aidl
@@ -19,7 +19,6 @@
 import android.content.pm.ParceledListSlice;
 import android.media.AudioAttributes;
 import android.media.MediaMetadata;
-import android.media.routing.IMediaRouter;
 import android.media.session.ISessionController;
 import android.media.session.PlaybackState;
 import android.media.session.MediaSession;
@@ -35,7 +34,6 @@
     ISessionController getController();
     void setFlags(int flags);
     void setActive(boolean active);
-    void setMediaRouter(in IMediaRouter router);
     void setMediaButtonReceiver(in PendingIntent mbr);
     void setLaunchPendingIntent(in PendingIntent pi);
     void destroy();
diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl
index 8d58a60..285e5f7 100644
--- a/media/java/android/media/session/ISessionController.aidl
+++ b/media/java/android/media/session/ISessionController.aidl
@@ -20,8 +20,6 @@
 import android.content.pm.ParceledListSlice;
 import android.media.MediaMetadata;
 import android.media.Rating;
-import android.media.routing.IMediaRouterDelegate;
-import android.media.routing.IMediaRouterStateCallback;
 import android.media.session.ISessionControllerCallback;
 import android.media.session.MediaSession;
 import android.media.session.ParcelableVolumeInfo;
@@ -51,8 +49,6 @@
     void adjustVolume(int direction, int flags, String packageName);
     void setVolumeTo(int value, int flags, String packageName);
 
-    IMediaRouterDelegate createMediaRouterDelegate(IMediaRouterStateCallback callback);
-
     // These commands are for the TransportControls
     void play();
     void playFromMediaId(String mediaId, in Bundle extras);
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index dd81a22..2acee04 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -26,7 +26,6 @@
 import android.media.MediaMetadata;
 import android.media.Rating;
 import android.media.VolumeProvider;
-import android.media.routing.MediaRouter;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -120,17 +119,6 @@
     }
 
     /**
-     * Creates a media router delegate through which the destination of the media
-     * router may be observed and controlled.
-     *
-     * @return The media router delegate, or null if the media session does
-     * not support media routing.
-     */
-    public @Nullable MediaRouter.Delegate createMediaRouterDelegate() {
-        return new MediaRouter.Delegate();
-    }
-
-    /**
      * Send the specified media button event to the session. Only media keys can
      * be sent by this method, other keys will be ignored.
      *
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index cee82b4..e1e9b79 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -29,7 +29,6 @@
 import android.media.MediaMetadata;
 import android.media.Rating;
 import android.media.VolumeProvider;
-import android.media.routing.MediaRouter;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -225,23 +224,6 @@
     }
 
     /**
-     * Associates a {@link MediaRouter} with this session to control the destination
-     * of media content.
-     * <p>
-     * A media router may only be associated with at most one session at a time.
-     * </p>
-     *
-     * @param router The media router, or null to remove the current association.
-     */
-    public void setMediaRouter(@Nullable MediaRouter router) {
-        try {
-            mBinder.setMediaRouter(router != null ? router.getBinder() : null);
-        } catch (RemoteException e) {
-            Log.wtf(TAG, "Failure in setMediaButtonReceiver.", e);
-        }
-    }
-
-    /**
      * Set a pending intent for your media button receiver to allow restarting
      * playback after the session has been stopped. If your app is started in
      * this way an {@link Intent#ACTION_MEDIA_BUTTON} intent will be sent via
diff --git a/media/java/android/media/tv/TvContentRating.java b/media/java/android/media/tv/TvContentRating.java
index 966e41a..043b80e 100644
--- a/media/java/android/media/tv/TvContentRating.java
+++ b/media/java/android/media/tv/TvContentRating.java
@@ -171,6 +171,14 @@
  *         <td>TV content rating system for Brazil</td>
  *     </tr>
  *     <tr>
+ *         <td>CA_TV_EN</td>
+ *         <td>TV content rating system for Canada (English)</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_FR</td>
+ *         <td>TV content rating system for Canada (French)</td>
+ *     </tr>
+ *     <tr>
  *         <td>DVB</td>
  *         <td>DVB content rating system</td>
  *     </tr>
@@ -195,6 +203,10 @@
  *         <td>TV content rating system for Singapore</td>
  *     </tr>
  *     <tr>
+ *         <td>US_MV</td>
+ *         <td>Movie content rating system for the United States</td>
+ *     </tr>
+ *     <tr>
  *         <td>US_TV</td>
  *         <td>TV content rating system for the United States</td>
  *     </tr>
@@ -290,6 +302,60 @@
  *         <td>Content suitable for viewers over the age of 18</td>
  *     </tr>
  *     <tr>
+ *         <td valign="top" rowspan="7">CA_TV_EN</td>
+ *         <td>CA_TV_EN_EXEMPT</td>
+ *         <td>Exempt from ratings</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_EN_C</td>
+ *         <td>Suitable for children ages 2&#8211;7</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_EN_C8</td>
+ *         <td>Suitable for children ages 8 and older</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_EN_G</td>
+ *         <td>Suitable for the entire family</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_EN_PG</td>
+ *         <td>May contain moderate violence, profanity, nudity, and sexual references</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_EN_14</td>
+ *         <td>Intended for viewers ages 14 and older</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_EN_18</td>
+ *         <td>Intended for viewers ages 18 and older</td>
+ *     </tr>
+ *     <tr>
+ *         <td valign="top" rowspan="6">CA_TV_FR</td>
+ *         <td>CA_TV_FR_E</td>
+ *         <td>Exempt from ratings</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_FR_G</td>
+ *         <td>Appropriate for all ages</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_FR_8</td>
+ *         <td>Appropriate for children 8</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_FR_13</td>
+ *         <td>Suitable for children 13</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_FR_16</td>
+ *         <td>Recommended for children over the age of 16</td>
+ *     </tr>
+ *     <tr>
+ *         <td>CA_TV_FR_18</td>
+ *         <td>Only to be viewed by adults</td>
+ *     </tr>
+ *     <tr>
  *         <td valign="top" rowspan="15">DVB</td>
  *         <td>DVB_4</td>
  *         <td>Recommended for ages 4 and over</td>
@@ -608,6 +674,27 @@
  *         <td>Suitable for adults aged 21 and above</td>
  *     </tr>
  *     <tr>
+ *         <td valign="top" rowspan="5">US_MV</td>
+ *         <td>US_MV_G</td>
+ *         <td>General audiences</td>
+ *     </tr>
+ *     <tr>
+ *         <td>US_MV_PG</td>
+ *         <td>Parental guidance suggested</td>
+ *     </tr>
+ *     <tr>
+ *         <td>US_MV_PG13</td>
+ *         <td>Parents strongly cautioned</td>
+ *     </tr>
+ *     <tr>
+ *         <td>US_MV_R</td>
+ *         <td>Restricted, under 17 requires accompanying parent or adult guardian</td>
+ *     </tr>
+ *     <tr>
+ *         <td>US_MV_NC17</td>
+ *         <td>No one 17 and under admitted</td>
+ *     </tr>
+ *     <tr>
  *         <td valign="top" rowspan="6">US_TV</td>
  *         <td>US_TV_Y</td>
  *         <td>This program is designed to be appropriate for all children</td>
@@ -696,10 +783,15 @@
     private final int mHashCode;
 
     /**
-     * Rating constant denoting unrated content.
+     * Rating constant denoting unrated content. Used to handle the case where the content rating
+     * information is missing.
+     *
+     * <p>TV input services can call {@link TvInputManager#isRatingBlocked} with this constant to
+     * determine whether they should block unrated content. The subsequent call to
+     * {@link TvInputService.Session#notifyContentBlocked} with the same constant notifies
+     * applications that the current program content is blocked by parental controls.
      */
-    public static final TvContentRating UNRATED = new TvContentRating("com.android.tv", "",
-            "UNRATED", null);
+    public static final TvContentRating UNRATED = new TvContentRating("null", "null", "null", null);
 
     /**
      * Creates a {@code TvContentRating} object with predefined content rating strings.
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index 3272a23..dca0631 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -1035,7 +1035,7 @@
     /**
      * Checks whether a given TV content rating is blocked by the user.
      *
-     * @param rating The TV content rating to check.
+     * @param rating The TV content rating to check. Can be {@link TvContentRating#UNRATED}.
      * @return {@code true} if the given TV content rating is blocked, {@code false} otherwise.
      */
     public boolean isRatingBlocked(@NonNull TvContentRating rating) {
diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java
index 34c36c3..c1035b0 100644
--- a/media/java/android/media/tv/TvInputService.java
+++ b/media/java/android/media/tv/TvInputService.java
@@ -528,11 +528,12 @@
          * TvInputManager.isParentalControlsEnabled()} returns {@code true}). Whether the TV input
          * service should block the content or not is determined by invoking
          * {@link TvInputManager#isRatingBlocked TvInputManager.isRatingBlocked(TvContentRating)}
-         * with the content rating for the current program. Then the {@link TvInputManager} makes a
-         * judgment based on the user blocked ratings stored in the secure settings and returns the
-         * result. If the rating in question turns out to be blocked, the TV input service must
-         * immediately block the content and call this method with the content rating of the current
-         * program to prompt the PIN verification screen.
+         * with the content rating for the current program or {@link TvContentRating#UNRATED} in
+         * case the rating information is missing. Then the {@link TvInputManager} makes a judgment
+         * based on the user blocked ratings stored in the secure settings and returns the result.
+         * If the rating in question turns out to be blocked, the TV input service must immediately
+         * block the content and call this method with the content rating of the current program to
+         * prompt the PIN verification screen.
          *
          * <p>Each TV input service also needs to continuously listen to any changes made to the
          * parental controls settings by registering a broadcast receiver to receive
@@ -540,7 +541,8 @@
          * {@link TvInputManager#ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED} and immediately
          * reevaluate the current program with the new parental controls settings.
          *
-         * @param rating The content rating for the current TV program.
+         * @param rating The content rating for the current TV program. Can be
+         *            {@link TvContentRating#UNRATED}.
          * @see #notifyContentAllowed
          * @see TvInputManager
          */
diff --git a/media/jni/Android.mk b/media/jni/Android.mk
index dbb53b4..51d0140 100644
--- a/media/jni/Android.mk
+++ b/media/jni/Android.mk
@@ -20,7 +20,7 @@
     android_media_MediaScanner.cpp \
     android_media_MediaSync.cpp \
     android_media_ResampleInputStream.cpp \
-    android_media_SyncSettings.cpp \
+    android_media_SyncParams.cpp \
     android_media_Utils.cpp \
     android_mtp_MtpDatabase.cpp \
     android_mtp_MtpDevice.cpp \
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index e34f9ed..31fb37c 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -39,7 +39,7 @@
 #include <media/stagefright/foundation/AMessage.h>
 #include <media/stagefright/foundation/AString.h>
 #include <media/stagefright/MediaErrors.h>
-
+#include <media/stagefright/PersistentSurface.h>
 #include <nativehelper/ScopedLocalRef.h>
 
 #include <system/window.h>
@@ -70,10 +70,18 @@
     jint codecActionRecoverable;
 } gCodecActionCodes;
 
-static struct ExceptionReason {
-    jint reasonHardware;
-    jint reasonReclaimed;
-} gExceptionReason;
+static struct CodecErrorCodes {
+    jint errorInsufficientResource;
+    jint errorReclaimed;
+} gCodecErrorCodes;
+
+static struct {
+    jclass clazz;
+    jfieldID mLock;
+    jfieldID mPersistentObject;
+    jmethodID ctor;
+    jmethodID setNativeObjectLocked;
+} gPersistentSurfaceClassInfo;
 
 struct fields_t {
     jfieldID context;
@@ -87,6 +95,7 @@
 };
 
 static fields_t gFields;
+static const void *sRefBaseOwner;
 
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -245,11 +254,29 @@
     return mCodec->configure(format, mSurfaceTextureClient, crypto, flags);
 }
 
+status_t JMediaCodec::setSurface(
+        const sp<IGraphicBufferProducer> &bufferProducer) {
+    sp<Surface> client;
+    if (bufferProducer != NULL) {
+        client = new Surface(bufferProducer, true /* controlledByApp */);
+    }
+    status_t err = mCodec->setSurface(client);
+    if (err == OK) {
+        mSurfaceTextureClient = client;
+    }
+    return err;
+}
+
 status_t JMediaCodec::createInputSurface(
         sp<IGraphicBufferProducer>* bufferProducer) {
     return mCodec->createInputSurface(bufferProducer);
 }
 
+status_t JMediaCodec::usePersistentInputSurface(
+        const sp<PersistentSurface> &surface) {
+    return mCodec->usePersistentInputSurface(surface);
+}
+
 status_t JMediaCodec::start() {
     return mCodec->start();
 }
@@ -573,7 +600,7 @@
             env, env->FindClass("android/media/MediaCodec$CodecException"));
     CHECK(clazz.get() != NULL);
 
-    const jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(IILjava/lang/String;I)V");
+    const jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "(IILjava/lang/String;)V");
     CHECK(ctor != NULL);
 
     ScopedLocalRef<jstring> msgObj(
@@ -592,9 +619,19 @@
         break;
     }
 
-    int reason =
-        (err == DEAD_OBJECT) ? gExceptionReason.reasonReclaimed : gExceptionReason.reasonHardware;
-    return (jthrowable)env->NewObject(clazz.get(), ctor, err, actionCode, msgObj.get(), reason);
+    /* translate OS errors to Java API CodecException errorCodes */
+    switch (err) {
+        case NO_MEMORY:
+            err = gCodecErrorCodes.errorInsufficientResource;
+            break;
+        case DEAD_OBJECT:
+            err = gCodecErrorCodes.errorReclaimed;
+            break;
+        default:  /* Other error codes go out as is. */
+            break;
+    }
+
+    return (jthrowable)env->NewObject(clazz.get(), ctor, err, actionCode, msgObj.get());
 }
 
 void JMediaCodec::handleCallback(const sp<AMessage> &msg) {
@@ -797,6 +834,10 @@
             jniThrowException(env, "java/lang/IllegalStateException", msg);
             return 0;
 
+        case BAD_VALUE:
+            jniThrowException(env, "java/lang/IllegalArgumentException", msg);
+            return 0;
+
         default:
             if (isCryptoError(err)) {
                 throwCryptoException(env, err, msg);
@@ -869,6 +910,149 @@
     throwExceptionAsNecessary(env, err);
 }
 
+static void android_media_MediaCodec_native_setSurface(
+        JNIEnv *env,
+        jobject thiz,
+        jobject jsurface) {
+    sp<JMediaCodec> codec = getMediaCodec(env, thiz);
+
+    if (codec == NULL) {
+        throwExceptionAsNecessary(env, INVALID_OPERATION);
+        return;
+    }
+
+    sp<IGraphicBufferProducer> bufferProducer;
+    if (jsurface != NULL) {
+        sp<Surface> surface(android_view_Surface_getSurface(env, jsurface));
+        if (surface != NULL) {
+            bufferProducer = surface->getIGraphicBufferProducer();
+        } else {
+            jniThrowException(
+                    env,
+                    "java/lang/IllegalArgumentException",
+                    "The surface has been released");
+            return;
+        }
+    }
+
+    status_t err = codec->setSurface(bufferProducer);
+    throwExceptionAsNecessary(env, err);
+}
+
+sp<PersistentSurface> android_media_MediaCodec_getPersistentInputSurface(
+        JNIEnv* env, jobject object) {
+    sp<PersistentSurface> persistentSurface;
+
+    jobject lock = env->GetObjectField(
+            object, gPersistentSurfaceClassInfo.mLock);
+    if (env->MonitorEnter(lock) == JNI_OK) {
+        persistentSurface = reinterpret_cast<PersistentSurface *>(
+                env->GetLongField(object,
+                        gPersistentSurfaceClassInfo.mPersistentObject));
+        env->MonitorExit(lock);
+    }
+    env->DeleteLocalRef(lock);
+
+    return persistentSurface;
+}
+
+static jobject android_media_MediaCodec_createPersistentInputSurface(
+        JNIEnv* env, jclass /* clazz */) {
+    ALOGV("android_media_MediaCodec_createPersistentInputSurface");
+    sp<PersistentSurface> persistentSurface =
+        MediaCodec::CreatePersistentInputSurface();
+
+    if (persistentSurface == NULL) {
+        return NULL;
+    }
+
+    sp<Surface> surface = new Surface(
+            persistentSurface->getBufferProducer(), true);
+    if (surface == NULL) {
+        return NULL;
+    }
+
+    jobject object = env->NewObject(
+            gPersistentSurfaceClassInfo.clazz,
+            gPersistentSurfaceClassInfo.ctor);
+
+    if (object == NULL) {
+        if (env->ExceptionCheck()) {
+            ALOGE("Could not create PersistentSurface.");
+            env->ExceptionClear();
+        }
+        return NULL;
+    }
+
+    jobject lock = env->GetObjectField(
+            object, gPersistentSurfaceClassInfo.mLock);
+    if (env->MonitorEnter(lock) == JNI_OK) {
+        env->CallVoidMethod(
+                object,
+                gPersistentSurfaceClassInfo.setNativeObjectLocked,
+                (jlong)surface.get());
+        env->SetLongField(
+                object,
+                gPersistentSurfaceClassInfo.mPersistentObject,
+                (jlong)persistentSurface.get());
+        env->MonitorExit(lock);
+    } else {
+        env->DeleteLocalRef(object);
+        object = NULL;
+    }
+    env->DeleteLocalRef(lock);
+
+    if (object != NULL) {
+        surface->incStrong(&sRefBaseOwner);
+        persistentSurface->incStrong(&sRefBaseOwner);
+    }
+
+    return object;
+}
+
+static void android_media_MediaCodec_releasePersistentInputSurface(
+        JNIEnv* env, jclass /* clazz */, jobject object) {
+    sp<PersistentSurface> persistentSurface;
+
+    jobject lock = env->GetObjectField(
+            object, gPersistentSurfaceClassInfo.mLock);
+    if (env->MonitorEnter(lock) == JNI_OK) {
+        persistentSurface = reinterpret_cast<PersistentSurface *>(
+            env->GetLongField(
+                    object, gPersistentSurfaceClassInfo.mPersistentObject));
+        env->SetLongField(
+                object,
+                gPersistentSurfaceClassInfo.mPersistentObject,
+                (jlong)0);
+        env->MonitorExit(lock);
+    }
+    env->DeleteLocalRef(lock);
+
+    if (persistentSurface != NULL) {
+        persistentSurface->decStrong(&sRefBaseOwner);
+    }
+    // no need to release surface as it will be released by Surface's jni
+}
+
+static void android_media_MediaCodec_usePersistentInputSurface(
+        JNIEnv* env, jobject thiz, jobject object) {
+    ALOGV("android_media_MediaCodec_usePersistentInputSurface");
+
+    sp<JMediaCodec> codec = getMediaCodec(env, thiz);
+    if (codec == NULL) {
+        throwExceptionAsNecessary(env, INVALID_OPERATION);
+        return;
+    }
+
+    sp<PersistentSurface> persistentSurface =
+        android_media_MediaCodec_getPersistentInputSurface(env, object);
+
+    status_t err = codec->usePersistentInputSurface(persistentSurface);
+    if (err != NO_ERROR) {
+        throwExceptionAsNecessary(env, err);
+    }
+}
+
 static jobject android_media_MediaCodec_createInputSurface(JNIEnv* env,
         jobject thiz) {
     ALOGV("android_media_MediaCodec_createInputSurface");
@@ -1462,15 +1646,38 @@
     gCodecActionCodes.codecActionRecoverable =
         env->GetStaticIntField(clazz.get(), field);
 
-    field = env->GetStaticFieldID(clazz.get(), "REASON_HARDWARE", "I");
+    field = env->GetStaticFieldID(clazz.get(), "ERROR_INSUFFICIENT_RESOURCE", "I");
     CHECK(field != NULL);
-    gExceptionReason.reasonHardware =
+    gCodecErrorCodes.errorInsufficientResource =
         env->GetStaticIntField(clazz.get(), field);
 
-    field = env->GetStaticFieldID(clazz.get(), "REASON_RECLAIMED", "I");
+    field = env->GetStaticFieldID(clazz.get(), "ERROR_RECLAIMED", "I");
     CHECK(field != NULL);
-    gExceptionReason.reasonReclaimed =
+    gCodecErrorCodes.errorReclaimed =
         env->GetStaticIntField(clazz.get(), field);
+
+    clazz.reset(env->FindClass("android/view/Surface"));
+    CHECK(clazz.get() != NULL);
+
+    field = env->GetFieldID(clazz.get(), "mLock", "Ljava/lang/Object;");
+    CHECK(field != NULL);
+    gPersistentSurfaceClassInfo.mLock = field;
+
+    jmethodID method = env->GetMethodID(clazz.get(), "setNativeObjectLocked", "(J)V");
+    CHECK(method != NULL);
+    gPersistentSurfaceClassInfo.setNativeObjectLocked = method;
+
+    clazz.reset(env->FindClass("android/media/MediaCodec$PersistentSurface"));
+    CHECK(clazz.get() != NULL);
+    gPersistentSurfaceClassInfo.clazz = (jclass)env->NewGlobalRef(clazz.get());
+
+    method = env->GetMethodID(clazz.get(), "<init>", "()V");
+    CHECK(method != NULL);
+    gPersistentSurfaceClassInfo.ctor = method;
+
+    field = env->GetFieldID(clazz.get(), "mPersistentObject", "J");
+    CHECK(field != NULL);
+    gPersistentSurfaceClassInfo.mPersistentObject = field;
 }
 
 static void android_media_MediaCodec_native_setup(
@@ -1496,6 +1703,11 @@
                 String8::format("Failed to initialize %s, error %#x", tmp, err));
         env->ReleaseStringUTFChars(name, tmp);
         return;
+    } if (err == NO_MEMORY) {
+        throwCodecException(env, err, ACTION_CODE_TRANSIENT,
+                String8::format("Failed to initialize %s, error %#x", tmp, err));
+        env->ReleaseStringUTFChars(name, tmp);
+        return;
     } else if (err != OK) {
         // believed possible to try again
         jniThrowException(env, "java/io/IOException",
@@ -1521,6 +1733,17 @@
 
     { "native_reset", "()V", (void *)android_media_MediaCodec_reset },
 
+    { "native_releasePersistentInputSurface",
+      "(Landroid/view/Surface;)V",
+       (void *)android_media_MediaCodec_releasePersistentInputSurface},
+
+    { "native_createPersistentInputSurface",
+      "()Landroid/media/MediaCodec$PersistentSurface;",
+      (void *)android_media_MediaCodec_createPersistentInputSurface },
+
+    { "native_usePersistentInputSurface", "(Landroid/view/Surface;)V",
+      (void *)android_media_MediaCodec_usePersistentInputSurface },
+
     { "native_setCallback",
       "(Landroid/media/MediaCodec$Callback;)V",
       (void *)android_media_MediaCodec_native_setCallback },
@@ -1530,6 +1753,10 @@
       "Landroid/media/MediaCrypto;I)V",
       (void *)android_media_MediaCodec_native_configure },
 
+    { "native_setSurface",
+      "(Landroid/view/Surface;)V",
+      (void *)android_media_MediaCodec_native_setSurface },
+
     { "createInputSurface", "()Landroid/view/Surface;",
       (void *)android_media_MediaCodec_createInputSurface },
 
diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h
index 9f2785a..bf61f42 100644
--- a/media/jni/android_media_MediaCodec.h
+++ b/media/jni/android_media_MediaCodec.h
@@ -33,6 +33,7 @@
 struct ICrypto;
 struct IGraphicBufferProducer;
 struct MediaCodec;
+struct PersistentSurface;
 class Surface;
 
 struct JMediaCodec : public AHandler {
@@ -53,7 +54,11 @@
             const sp<ICrypto> &crypto,
             int flags);
 
+    status_t setSurface(
+            const sp<IGraphicBufferProducer> &surface);
+
     status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer);
+    status_t usePersistentInputSurface(const sp<PersistentSurface> &surface);
 
     status_t start();
     status_t stop();
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index 88a6771..59fb6d6 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -299,15 +299,16 @@
         return NULL;
     }
 
-    SkBitmap *bitmap = GraphicsJNI::getSkBitmap(env, jBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, jBitmap, &bitmap);
 
-    bitmap->lockPixels();
-    rotate((uint16_t*)bitmap->getPixels(),
+    bitmap.lockPixels();
+    rotate((uint16_t*)bitmap.getPixels(),
            (uint16_t*)((char*)videoFrame + sizeof(VideoFrame)),
            videoFrame->mWidth,
            videoFrame->mHeight,
            videoFrame->mRotationAngle);
-    bitmap->unlockPixels();
+    bitmap.unlockPixels();
 
     if (videoFrame->mDisplayWidth  != videoFrame->mWidth ||
         videoFrame->mDisplayHeight != videoFrame->mHeight) {
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 2c61779..d8041f4 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -38,8 +38,8 @@
 #include "utils/KeyedVector.h"
 #include "utils/String8.h"
 #include "android_media_MediaDataSource.h"
-#include "android_media_PlaybackSettings.h"
-#include "android_media_SyncSettings.h"
+#include "android_media_PlaybackParams.h"
+#include "android_media_SyncParams.h"
 #include "android_media_Utils.h"
 
 #include "android_os_Parcel.h"
@@ -69,8 +69,8 @@
 };
 static fields_t fields;
 
-static PlaybackSettings::fields_t gPlaybackSettingsFields;
-static SyncSettings::fields_t gSyncSettingsFields;
+static PlaybackParams::fields_t gPlaybackParamsFields;
+static SyncParams::fields_t gSyncParamsFields;
 
 static Mutex sLock;
 
@@ -174,6 +174,8 @@
     } else {  // Throw exception!
         if ( opStatus == (status_t) INVALID_OPERATION ) {
             jniThrowException(env, "java/lang/IllegalStateException", NULL);
+        } else if ( opStatus == (status_t) BAD_VALUE ) {
+            jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
         } else if ( opStatus == (status_t) PERMISSION_DENIED ) {
             jniThrowException(env, "java/lang/SecurityException", NULL);
         } else if ( opStatus != (status_t) OK ) {
@@ -426,7 +428,7 @@
 }
 
 static void
-android_media_MediaPlayer_setPlaybackSettings(JNIEnv *env, jobject thiz, jobject settings)
+android_media_MediaPlayer_setPlaybackParams(JNIEnv *env, jobject thiz, jobject params)
 {
     sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
     if (mp == NULL) {
@@ -434,20 +436,45 @@
         return;
     }
 
-    PlaybackSettings pbs;
-    pbs.fillFromJobject(env, gPlaybackSettingsFields, settings);
-    ALOGV("setPlaybackSettings: %d:%f %d:%f %d:%u %d:%u",
-            pbs.speedSet, pbs.audioRate.mSpeed,
-            pbs.pitchSet, pbs.audioRate.mPitch,
-            pbs.audioFallbackModeSet, pbs.audioRate.mFallbackMode,
-            pbs.audioStretchModeSet, pbs.audioRate.mStretchMode);
+    PlaybackParams pbp;
+    pbp.fillFromJobject(env, gPlaybackParamsFields, params);
+    ALOGV("setPlaybackParams: %d:%f %d:%f %d:%u %d:%u",
+            pbp.speedSet, pbp.audioRate.mSpeed,
+            pbp.pitchSet, pbp.audioRate.mPitch,
+            pbp.audioFallbackModeSet, pbp.audioRate.mFallbackMode,
+            pbp.audioStretchModeSet, pbp.audioRate.mStretchMode);
 
-    // TODO: pass playback settings to mediaplayer when audiotrack supports it
-    process_media_player_call(env, thiz, mp->setPlaybackRate(pbs.audioRate.mSpeed), NULL, NULL);
+    AudioPlaybackRate rate;
+    status_t err = mp->getPlaybackSettings(&rate);
+    if (err == OK) {
+        bool updatedRate = false;
+        if (pbp.speedSet) {
+            rate.mSpeed = pbp.audioRate.mSpeed;
+            updatedRate = true;
+        }
+        if (pbp.pitchSet) {
+            rate.mPitch = pbp.audioRate.mPitch;
+            updatedRate = true;
+        }
+        if (pbp.audioFallbackModeSet) {
+            rate.mFallbackMode = pbp.audioRate.mFallbackMode;
+            updatedRate = true;
+        }
+        if (pbp.audioStretchModeSet) {
+            rate.mStretchMode = pbp.audioRate.mStretchMode;
+            updatedRate = true;
+        }
+        if (updatedRate) {
+            err = mp->setPlaybackSettings(rate);
+        }
+    }
+    process_media_player_call(
+            env, thiz, err,
+            "java/lang/IllegalStateException", "unexpected error");
 }
 
 static jobject
-android_media_MediaPlayer_getPlaybackSettings(JNIEnv *env, jobject thiz)
+android_media_MediaPlayer_getPlaybackParams(JNIEnv *env, jobject thiz)
 {
     sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
     if (mp == NULL) {
@@ -455,30 +482,24 @@
         return NULL;
     }
 
-    PlaybackSettings pbs;
-    AudioPlaybackRate &audioRate = pbs.audioRate;
-
-    audioRate.mSpeed = 1.0f;
-    audioRate.mPitch = 1.0f;
-    audioRate.mFallbackMode = AUDIO_TIMESTRETCH_FALLBACK_DEFAULT;
-    audioRate.mStretchMode = AUDIO_TIMESTRETCH_STRETCH_DEFAULT;
-
-    // TODO: get this from mediaplayer when audiotrack supports it
-    // process_media_player_call(
-    //        env, thiz, mp->getPlaybackSettings(&audioRate), NULL, NULL);
+    PlaybackParams pbp;
+    AudioPlaybackRate &audioRate = pbp.audioRate;
+    process_media_player_call(
+            env, thiz, mp->getPlaybackSettings(&audioRate),
+            "java/lang/IllegalStateException", "unexpected error");
     ALOGV("getPlaybackSettings: %f %f %d %d",
             audioRate.mSpeed, audioRate.mPitch, audioRate.mFallbackMode, audioRate.mStretchMode);
 
-    pbs.speedSet = true;
-    pbs.pitchSet = true;
-    pbs.audioFallbackModeSet = true;
-    pbs.audioStretchModeSet = true;
+    pbp.speedSet = true;
+    pbp.pitchSet = true;
+    pbp.audioFallbackModeSet = true;
+    pbp.audioStretchModeSet = true;
 
-    return pbs.asJobject(env, gPlaybackSettingsFields);
+    return pbp.asJobject(env, gPlaybackParamsFields);
 }
 
 static void
-android_media_MediaPlayer_setSyncSettings(JNIEnv *env, jobject thiz, jobject settings)
+android_media_MediaPlayer_setSyncParams(JNIEnv *env, jobject thiz, jobject params)
 {
     sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
     if (mp == NULL) {
@@ -486,20 +507,42 @@
         return;
     }
 
-    SyncSettings scs;
-    scs.fillFromJobject(env, gSyncSettingsFields, settings);
-    ALOGV("setSyncSettings: %d:%d %d:%d %d:%f %d:%f",
-            scs.syncSourceSet, scs.syncSource,
-            scs.audioAdjustModeSet, scs.audioAdjustMode,
-            scs.toleranceSet, scs.tolerance,
-            scs.frameRateSet, scs.frameRate);
+    SyncParams scp;
+    scp.fillFromJobject(env, gSyncParamsFields, params);
+    ALOGV("setSyncParams: %d:%d %d:%d %d:%f %d:%f",
+          scp.syncSourceSet, scp.sync.mSource,
+          scp.audioAdjustModeSet, scp.sync.mAudioAdjustMode,
+          scp.toleranceSet, scp.sync.mTolerance,
+          scp.frameRateSet, scp.frameRate);
 
-    // TODO: pass sync settings to mediaplayer when it supports it
-    // process_media_player_call(env, thiz, mp->setSyncSettings(scs), NULL, NULL);
+    AVSyncSettings avsync;
+    float videoFrameRate;
+    status_t err = mp->getSyncSettings(&avsync, &videoFrameRate);
+    if (err == OK) {
+        bool updatedSync = scp.frameRateSet;
+        if (scp.syncSourceSet) {
+            avsync.mSource = scp.sync.mSource;
+            updatedSync = true;
+        }
+        if (scp.audioAdjustModeSet) {
+            avsync.mAudioAdjustMode = scp.sync.mAudioAdjustMode;
+            updatedSync = true;
+        }
+        if (scp.toleranceSet) {
+            avsync.mTolerance = scp.sync.mTolerance;
+            updatedSync = true;
+        }
+        if (updatedSync) {
+            err = mp->setSyncSettings(avsync, scp.frameRateSet ? scp.frameRate : -1.f);
+        }
+    }
+    process_media_player_call(
+            env, thiz, err,
+            "java/lang/IllegalStateException", "unexpected error");
 }
 
 static jobject
-android_media_MediaPlayer_getSyncSettings(JNIEnv *env, jobject thiz)
+android_media_MediaPlayer_getSyncParams(JNIEnv *env, jobject thiz)
 {
     sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
     if (mp == NULL) {
@@ -507,24 +550,30 @@
         return NULL;
     }
 
-    SyncSettings scs;
-    scs.syncSource = 0; // SYNC_SOURCE_DEFAULT
-    scs.audioAdjustMode = 0; // AUDIO_ADJUST_MODE_DEFAULT
-    scs.tolerance = 0.f;
-    scs.frameRate = 0.f;
+    SyncParams scp;
+    scp.frameRate = -1.f;
+    process_media_player_call(
+            env, thiz, mp->getSyncSettings(&scp.sync, &scp.frameRate),
+            "java/lang/IllegalStateException", "unexpected error");
 
-    // TODO: get this from mediaplayer when it supports it
-    // process_media_player_call(
-    //        env, thiz, mp->getSyncSettings(&scs), NULL, NULL);
     ALOGV("getSyncSettings: %d %d %f %f",
-            scs.syncSource, scs.audioAdjustMode, scs.tolerance, scs.frameRate);
+            scp.sync.mSource, scp.sync.mAudioAdjustMode, scp.sync.mTolerance, scp.frameRate);
 
-    scs.syncSourceSet = true;
-    scs.audioAdjustModeSet = true;
-    scs.toleranceSet = true;
-    scs.frameRateSet = false;
+    // sanity check params
+    if (scp.sync.mSource >= AVSYNC_SOURCE_MAX
+            || scp.sync.mAudioAdjustMode >= AVSYNC_AUDIO_ADJUST_MODE_MAX
+            || scp.sync.mTolerance < 0.f
+            || scp.sync.mTolerance >= AVSYNC_TOLERANCE_MAX) {
+        jniThrowException(env,  "java/lang/IllegalStateException", NULL);
+        return NULL;
+    }
 
-    return scs.asJobject(env, gSyncSettingsFields);
+    scp.syncSourceSet = true;
+    scp.audioAdjustModeSet = true;
+    scp.toleranceSet = true;
+    scp.frameRateSet = scp.frameRate >= 0.f;
+
+    return scp.asJobject(env, gSyncParamsFields);
 }
 
 static void
@@ -811,8 +860,8 @@
 
     env->DeleteLocalRef(clazz);
 
-    gPlaybackSettingsFields.init(env);
-    gSyncSettingsFields.init(env);
+    gPlaybackParamsFields.init(env);
+    gSyncParamsFields.init(env);
 }
 
 static void
@@ -1001,10 +1050,10 @@
     {"_stop",               "()V",                              (void *)android_media_MediaPlayer_stop},
     {"getVideoWidth",       "()I",                              (void *)android_media_MediaPlayer_getVideoWidth},
     {"getVideoHeight",      "()I",                              (void *)android_media_MediaPlayer_getVideoHeight},
-    {"setPlaybackSettings", "(Landroid/media/PlaybackSettings;)V", (void *)android_media_MediaPlayer_setPlaybackSettings},
-    {"getPlaybackSettings", "()Landroid/media/PlaybackSettings;", (void *)android_media_MediaPlayer_getPlaybackSettings},
-    {"setSyncSettings",     "(Landroid/media/SyncSettings;)V",  (void *)android_media_MediaPlayer_setSyncSettings},
-    {"getSyncSettings",     "()Landroid/media/SyncSettings;",   (void *)android_media_MediaPlayer_getSyncSettings},
+    {"setPlaybackParams", "(Landroid/media/PlaybackParams;)V", (void *)android_media_MediaPlayer_setPlaybackParams},
+    {"getPlaybackParams", "()Landroid/media/PlaybackParams;", (void *)android_media_MediaPlayer_getPlaybackParams},
+    {"setSyncParams",     "(Landroid/media/SyncParams;)V",  (void *)android_media_MediaPlayer_setSyncParams},
+    {"getSyncParams",     "()Landroid/media/SyncParams;",   (void *)android_media_MediaPlayer_getSyncParams},
     {"seekTo",              "(I)V",                             (void *)android_media_MediaPlayer_seekTo},
     {"_pause",              "()V",                              (void *)android_media_MediaPlayer_pause},
     {"isPlaying",           "()Z",                              (void *)android_media_MediaPlayer_isPlaying},
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 02297fc..0044bed 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -29,6 +29,7 @@
 #include <camera/ICameraService.h>
 #include <camera/Camera.h>
 #include <media/mediarecorder.h>
+#include <media/stagefright/PersistentSurface.h>
 #include <utils/threads.h>
 
 #include <ScopedUtfChars.h>
@@ -48,6 +49,8 @@
 
 // helper function to extract a native Camera object from a Camera Java object
 extern sp<Camera> get_native_camera(JNIEnv *env, jobject thiz, struct JNICameraContext** context);
+extern sp<PersistentSurface>
+android_media_MediaCodec_getPersistentInputSurface(JNIEnv* env, jobject object);
 
 struct fields_t {
     jfieldID    context;
@@ -115,6 +118,12 @@
     return android_view_Surface_getSurface(env, clazz);
 }
 
+static sp<PersistentSurface> get_persistentSurface(JNIEnv* env, jobject object)
+{
+    ALOGV("get_persistentSurface");
+    return android_media_MediaCodec_getPersistentInputSurface(env, object);
+}
+
 // Returns true if it throws an exception.
 static bool process_media_recorder_call(JNIEnv *env, status_t opStatus, const char* exception, const char* message)
 {
@@ -487,6 +496,18 @@
     android_media_MediaRecorder_release(env, thiz);
 }
 
+void android_media_MediaRecorder_usePersistentSurface(
+        JNIEnv* env, jobject thiz, jobject object) {
+    ALOGV("android_media_MediaRecorder_usePersistentSurface");
+
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+
+    sp<PersistentSurface> persistentSurface = get_persistentSurface(env, object);
+
+    process_media_recorder_call(env, mr->usePersistentSurface(persistentSurface),
+            "java/lang/IllegalArgumentException", "native_usePersistentSurface failed.");
+}
+
 // ----------------------------------------------------------------------------
 
 static JNINativeMethod gMethods[] = {
@@ -513,6 +534,7 @@
     {"native_setup",         "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V",
                                                                 (void *)android_media_MediaRecorder_native_setup},
     {"native_finalize",      "()V",                             (void *)android_media_MediaRecorder_native_finalize},
+    {"native_usePersistentSurface", "(Landroid/view/Surface;)V", (void *)android_media_MediaRecorder_usePersistentSurface },
 };
 
 // This function only registers the native methods, and is called from
diff --git a/media/jni/android_media_MediaSync.cpp b/media/jni/android_media_MediaSync.cpp
index f192262..8e0ed64 100644
--- a/media/jni/android_media_MediaSync.cpp
+++ b/media/jni/android_media_MediaSync.cpp
@@ -21,7 +21,8 @@
 #include "android_media_MediaSync.h"
 
 #include "android_media_AudioTrack.h"
-#include "android_media_SyncSettings.h"
+#include "android_media_PlaybackParams.h"
+#include "android_media_SyncParams.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/android_view_Surface.h"
 #include "jni.h"
@@ -29,6 +30,7 @@
 
 #include <gui/Surface.h>
 
+#include <media/AudioResamplerPublic.h>
 #include <media/AudioTrack.h>
 #include <media/stagefright/MediaClock.h>
 #include <media/stagefright/MediaSync.h>
@@ -47,7 +49,8 @@
 };
 
 static fields_t gFields;
-static SyncSettings::fields_t gSyncSettingsFields;
+static PlaybackParams::fields_t gPlaybackParamsFields;
+static SyncParams::fields_t gSyncParamsFields;
 
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -58,14 +61,12 @@
 JMediaSync::~JMediaSync() {
 }
 
-status_t JMediaSync::configureSurface(const sp<IGraphicBufferProducer> &bufferProducer) {
-    return mSync->configureSurface(bufferProducer);
+status_t JMediaSync::setSurface(const sp<IGraphicBufferProducer> &bufferProducer) {
+    return mSync->setSurface(bufferProducer);
 }
 
-status_t JMediaSync::configureAudioTrack(
-        const sp<AudioTrack> &audioTrack,
-        int32_t nativeSampleRateInHz) {
-    return mSync->configureAudioTrack(audioTrack, nativeSampleRateInHz);
+status_t JMediaSync::setAudioTrack(const sp<AudioTrack> &audioTrack) {
+    return mSync->setAudioTrack(audioTrack);
 }
 
 status_t JMediaSync::createInputSurface(
@@ -73,14 +74,34 @@
     return mSync->createInputSurface(bufferProducer);
 }
 
-status_t JMediaSync::setPlaybackRate(float rate) {
-    return mSync->setPlaybackRate(rate);
-}
-
 sp<const MediaClock> JMediaSync::getMediaClock() {
     return mSync->getMediaClock();
 }
 
+status_t JMediaSync::setPlaybackParams(const AudioPlaybackRate& rate) {
+    return mSync->setPlaybackSettings(rate);
+}
+
+void JMediaSync::getPlaybackParams(AudioPlaybackRate* rate /* nonnull */) {
+    mSync->getPlaybackSettings(rate);
+}
+
+status_t JMediaSync::setSyncParams(const AVSyncSettings& syncParams) {
+    return mSync->setSyncSettings(syncParams);
+}
+
+void JMediaSync::getSyncParams(AVSyncSettings* syncParams /* nonnull */) {
+    mSync->getSyncSettings(syncParams);
+}
+
+status_t JMediaSync::setVideoFrameRateHint(float rate) {
+    return mSync->setVideoFrameRateHint(rate);
+}
+
+float JMediaSync::getVideoFrameRate() {
+    return mSync->getVideoFrameRate();
+}
+
 status_t JMediaSync::updateQueuedAudioData(
         int sizeInBytes, int64_t presentationTimeUs) {
     return mSync->updateQueuedAudioData(sizeInBytes, presentationTimeUs);
@@ -142,9 +163,9 @@
     }
 }
 
-static void android_media_MediaSync_native_configureSurface(
+static void android_media_MediaSync_native_setSurface(
         JNIEnv *env, jobject thiz, jobject jsurface) {
-    ALOGV("android_media_MediaSync_configureSurface");
+    ALOGV("android_media_MediaSync_setSurface");
 
     sp<JMediaSync> sync = getMediaSync(env, thiz);
     if (sync == NULL) {
@@ -163,7 +184,7 @@
         }
     }
 
-    status_t err = sync->configureSurface(bufferProducer);
+    status_t err = sync->setSurface(bufferProducer);
 
     if (err == INVALID_OPERATION) {
         throwExceptionAsNecessary(
@@ -175,9 +196,9 @@
     }
 }
 
-static void android_media_MediaSync_native_configureAudioTrack(
-        JNIEnv *env, jobject thiz, jobject jaudioTrack, jint nativeSampleRateInHz) {
-    ALOGV("android_media_MediaSync_configureAudioTrack");
+static void android_media_MediaSync_native_setAudioTrack(
+        JNIEnv *env, jobject thiz, jobject jaudioTrack) {
+    ALOGV("android_media_MediaSync_setAudioTrack");
 
     sp<JMediaSync> sync = getMediaSync(env, thiz);
     if (sync == NULL) {
@@ -194,7 +215,7 @@
         }
     }
 
-    status_t err = sync->configureAudioTrack(audioTrack, nativeSampleRateInHz);
+    status_t err = sync->setAudioTrack(audioTrack);
 
     if (err == INVALID_OPERATION) {
         throwExceptionAsNecessary(
@@ -287,53 +308,160 @@
     return (jlong)playTimeUs;
 }
 
-static void
-android_media_MediaSync_setSyncSettings(JNIEnv *env, jobject thiz, jobject settings)
-{
+static jfloat android_media_MediaSync_setPlaybackParams(
+        JNIEnv *env, jobject thiz, jobject params) {
     sp<JMediaSync> sync = getMediaSync(env, thiz);
     if (sync == NULL) {
         throwExceptionAsNecessary(env, INVALID_OPERATION);
-        return;
+        return (jfloat)0.f;
     }
 
-    SyncSettings scs;
-    scs.fillFromJobject(env, gSyncSettingsFields, settings);
-    ALOGV("setSyncSettings: %d:%d %d:%d %d:%f %d:%f",
-            scs.syncSourceSet, scs.syncSource,
-            scs.audioAdjustModeSet, scs.audioAdjustMode,
-            scs.toleranceSet, scs.tolerance,
-            scs.frameRateSet, scs.frameRate);
+    PlaybackParams pbs;
+    pbs.fillFromJobject(env, gPlaybackParamsFields, params);
+    ALOGV("setPlaybackParams: %d:%f %d:%f %d:%u %d:%u",
+            pbs.speedSet, pbs.audioRate.mSpeed,
+            pbs.pitchSet, pbs.audioRate.mPitch,
+            pbs.audioFallbackModeSet, pbs.audioRate.mFallbackMode,
+            pbs.audioStretchModeSet, pbs.audioRate.mStretchMode);
 
-    // TODO: pass sync settings to mediasync when it supports it
+    AudioPlaybackRate rate;
+    sync->getPlaybackParams(&rate);
+    bool updatedRate = false;
+    if (pbs.speedSet) {
+        rate.mSpeed = pbs.audioRate.mSpeed;
+        updatedRate = true;
+    }
+    if (pbs.pitchSet) {
+        rate.mPitch = pbs.audioRate.mPitch;
+        updatedRate = true;
+    }
+    if (pbs.audioFallbackModeSet) {
+        rate.mFallbackMode = pbs.audioRate.mFallbackMode;
+        updatedRate = true;
+    }
+    if (pbs.audioStretchModeSet) {
+        rate.mStretchMode = pbs.audioRate.mStretchMode;
+        updatedRate = true;
+    }
+    if (updatedRate) {
+        status_t err = sync->setPlaybackParams(rate);
+        if (err != OK) {
+            throwExceptionAsNecessary(env, err);
+            return (jfloat)0.f;
+        }
+    }
+
+    sp<const MediaClock> mediaClock = sync->getMediaClock();
+    if (mediaClock == NULL) {
+        return (jfloat)0.f;
+    }
+
+    return (jfloat)mediaClock->getPlaybackRate();
 }
 
-static jobject
-android_media_MediaSync_getSyncSettings(JNIEnv *env, jobject thiz)
-{
+static jobject android_media_MediaSync_getPlaybackParams(
+        JNIEnv *env, jobject thiz) {
     sp<JMediaSync> sync = getMediaSync(env, thiz);
     if (sync == NULL) {
         throwExceptionAsNecessary(env, INVALID_OPERATION);
         return NULL;
     }
 
-    SyncSettings scs;
-    scs.syncSource = 0; // SYNC_SOURCE_DEFAULT
-    scs.audioAdjustMode = 0; // AUDIO_ADJUST_MODE_DEFAULT
-    scs.tolerance = 0.f;
-    scs.frameRate = 0.f;
+    PlaybackParams pbs;
+    AudioPlaybackRate &audioRate = pbs.audioRate;
+    sync->getPlaybackParams(&audioRate);
+    ALOGV("getPlaybackParams: %f %f %d %d",
+            audioRate.mSpeed, audioRate.mPitch, audioRate.mFallbackMode, audioRate.mStretchMode);
 
-    // TODO: get this from mediaplayer when it supports it
-    // process_media_player_call(
-    //        env, thiz, mp->getSyncSettings(&scs), NULL, NULL);
-    ALOGV("getSyncSettings: %d %d %f %f",
-            scs.syncSource, scs.audioAdjustMode, scs.tolerance, scs.frameRate);
+    pbs.speedSet = true;
+    pbs.pitchSet = true;
+    pbs.audioFallbackModeSet = true;
+    pbs.audioStretchModeSet = true;
+
+    return pbs.asJobject(env, gPlaybackParamsFields);
+}
+
+static jfloat android_media_MediaSync_setSyncParams(
+        JNIEnv *env, jobject thiz, jobject params) {
+    sp<JMediaSync> sync = getMediaSync(env, thiz);
+    if (sync == NULL) {
+        throwExceptionAsNecessary(env, INVALID_OPERATION);
+        return (jfloat)0.f;
+    }
+
+    SyncParams scs;
+    scs.fillFromJobject(env, gSyncParamsFields, params);
+    ALOGV("setSyncParams: %d:%d %d:%d %d:%f %d:%f",
+            scs.syncSourceSet, scs.sync.mSource,
+            scs.audioAdjustModeSet, scs.sync.mAudioAdjustMode,
+            scs.toleranceSet, scs.sync.mTolerance,
+            scs.frameRateSet, scs.frameRate);
+
+    AVSyncSettings avsync;
+    sync->getSyncParams(&avsync);
+    bool updatedSync = false;
+    status_t err = OK;
+    if (scs.syncSourceSet) {
+        avsync.mSource = scs.sync.mSource;
+        updatedSync = true;
+    }
+    if (scs.audioAdjustModeSet) {
+        avsync.mAudioAdjustMode = scs.sync.mAudioAdjustMode;
+        updatedSync = true;
+    }
+    if (scs.toleranceSet) {
+        avsync.mTolerance = scs.sync.mTolerance;
+        updatedSync = true;
+    }
+    if (updatedSync) {
+        err = sync->setSyncParams(avsync);
+    }
+
+    if (scs.frameRateSet && err == OK) {
+        err = sync->setVideoFrameRateHint(scs.frameRate);
+    }
+    if (err != OK) {
+        throwExceptionAsNecessary(env, err);
+        return (jfloat)0.f;
+    }
+
+    sp<const MediaClock> mediaClock = sync->getMediaClock();
+    if (mediaClock == NULL) {
+        return (jfloat)0.f;
+    }
+
+    return (jfloat)mediaClock->getPlaybackRate();
+}
+
+static jobject android_media_MediaSync_getSyncParams(JNIEnv *env, jobject thiz) {
+    sp<JMediaSync> sync = getMediaSync(env, thiz);
+    if (sync == NULL) {
+        throwExceptionAsNecessary(env, INVALID_OPERATION);
+        return NULL;
+    }
+
+    SyncParams scs;
+    sync->getSyncParams(&scs.sync);
+    scs.frameRate = sync->getVideoFrameRate();
+
+    ALOGV("getSyncParams: %d %d %f %f",
+            scs.sync.mSource, scs.sync.mAudioAdjustMode, scs.sync.mTolerance, scs.frameRate);
+
+    // sanity check params
+    if (scs.sync.mSource >= AVSYNC_SOURCE_MAX
+            || scs.sync.mAudioAdjustMode >= AVSYNC_AUDIO_ADJUST_MODE_MAX
+            || scs.sync.mTolerance < 0.f
+            || scs.sync.mTolerance >= AVSYNC_TOLERANCE_MAX) {
+        throwExceptionAsNecessary(env, INVALID_OPERATION);
+        return NULL;
+    }
 
     scs.syncSourceSet = true;
     scs.audioAdjustModeSet = true;
     scs.toleranceSet = true;
-    scs.frameRateSet = false;
+    scs.frameRateSet = scs.frameRate >= 0.f;
 
-    return scs.asJobject(env, gSyncSettingsFields);
+    return scs.asJobject(env, gSyncParamsFields);
 }
 
 static void android_media_MediaSync_native_init(JNIEnv *env) {
@@ -358,7 +486,8 @@
         env->GetFieldID(clazz.get(), "clockRate", "F");
     CHECK(gFields.mediaTimestampClockRateID != NULL);
 
-    gSyncSettingsFields.init(env);
+    gSyncParamsFields.init(env);
+    gPlaybackParamsFields.init(env);
 }
 
 static void android_media_MediaSync_native_setup(JNIEnv *env, jobject thiz) {
@@ -367,33 +496,18 @@
     setMediaSync(env, thiz, sync);
 }
 
-static void android_media_MediaSync_native_setPlaybackRate(
-        JNIEnv *env, jobject thiz, jfloat rate) {
-    sp<JMediaSync> sync = getMediaSync(env, thiz);
-    if (sync == NULL) {
-        throwExceptionAsNecessary(env, INVALID_OPERATION);
-        return;
-    }
-
-    status_t err = sync->setPlaybackRate(rate);
-    if (err != NO_ERROR) {
-        throwExceptionAsNecessary(env, err);
-        return;
-    }
-}
-
 static void android_media_MediaSync_native_finalize(JNIEnv *env, jobject thiz) {
     android_media_MediaSync_release(env, thiz);
 }
 
 static JNINativeMethod gMethods[] = {
-    { "native_configureSurface",
+    { "native_setSurface",
       "(Landroid/view/Surface;)V",
-      (void *)android_media_MediaSync_native_configureSurface },
+      (void *)android_media_MediaSync_native_setSurface },
 
-    { "native_configureAudioTrack",
-      "(Landroid/media/AudioTrack;I)V",
-      (void *)android_media_MediaSync_native_configureAudioTrack },
+    { "native_setAudioTrack",
+      "(Landroid/media/AudioTrack;)V",
+      (void *)android_media_MediaSync_native_setAudioTrack },
 
     { "createInputSurface", "()Landroid/view/Surface;",
       (void *)android_media_MediaSync_createInputSurface },
@@ -416,11 +530,17 @@
 
     { "native_release", "()V", (void *)android_media_MediaSync_release },
 
-    { "native_setPlaybackRate", "(F)V", (void *)android_media_MediaSync_native_setPlaybackRate },
+    { "native_setPlaybackParams", "(Landroid/media/PlaybackParams;)F",
+      (void *)android_media_MediaSync_setPlaybackParams },
 
-    { "setSyncSettings", "(Landroid/media/SyncSettings;)V", (void *)android_media_MediaSync_setSyncSettings},
+    { "getPlaybackParams", "()Landroid/media/PlaybackParams;",
+      (void *)android_media_MediaSync_getPlaybackParams },
 
-    { "getSyncSettings", "()Landroid/media/SyncSettings;", (void *)android_media_MediaSync_getSyncSettings},
+    { "native_setSyncParams", "(Landroid/media/SyncParams;)F",
+      (void *)android_media_MediaSync_setSyncParams },
+
+    { "getSyncParams", "()Landroid/media/SyncParams;",
+      (void *)android_media_MediaSync_getSyncParams },
 
     { "native_finalize", "()V", (void *)android_media_MediaSync_native_finalize },
 };
diff --git a/media/jni/android_media_MediaSync.h b/media/jni/android_media_MediaSync.h
index cf81a72..22c77c7 100644
--- a/media/jni/android_media_MediaSync.h
+++ b/media/jni/android_media_MediaSync.h
@@ -18,31 +18,37 @@
 #define _ANDROID_MEDIA_MEDIASYNC_H_
 
 #include <media/stagefright/foundation/ABase.h>
+#include <media/stagefright/MediaSync.h>
 #include <utils/Errors.h>
 #include <utils/RefBase.h>
 
 namespace android {
 
+struct AudioPlaybackRate;
 class AudioTrack;
-struct IGraphicBufferProducer;
+class IGraphicBufferProducer;
 struct MediaClock;
 class MediaSync;
 
 struct JMediaSync : public RefBase {
     JMediaSync();
 
-    status_t configureSurface(const sp<IGraphicBufferProducer> &bufferProducer);
-    status_t configureAudioTrack(
-            const sp<AudioTrack> &audioTrack, int32_t nativeSampleRateInHz);
+    status_t setSurface(const sp<IGraphicBufferProducer> &bufferProducer);
+    status_t setAudioTrack(const sp<AudioTrack> &audioTrack);
 
     status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer);
 
     status_t updateQueuedAudioData(int sizeInBytes, int64_t presentationTimeUs);
 
-    status_t setPlaybackRate(float rate);
-
     status_t getPlayTimeForPendingAudioFrames(int64_t *outTimeUs);
 
+    status_t setPlaybackParams(const AudioPlaybackRate& rate);
+    void getPlaybackParams(AudioPlaybackRate* rate /* nonnull */);
+    status_t setSyncParams(const AVSyncSettings& syncParams);
+    void getSyncParams(AVSyncSettings* syncParams /* nonnull */);
+    status_t setVideoFrameRateHint(float rate);
+    float getVideoFrameRate();
+
     sp<const MediaClock> getMediaClock();
 
 protected:
diff --git a/media/jni/android_media_PlaybackSettings.h b/media/jni/android_media_PlaybackParams.h
similarity index 75%
rename from media/jni/android_media_PlaybackSettings.h
rename to media/jni/android_media_PlaybackParams.h
index 1f4f256..5bf13e9 100644
--- a/media/jni/android_media_PlaybackSettings.h
+++ b/media/jni/android_media_PlaybackParams.h
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-#ifndef _ANDROID_MEDIA_PLAYBACK_SETTINGS_H_
-#define _ANDROID_MEDIA_PLAYBACK_SETTINGS_H_
+#ifndef _ANDROID_MEDIA_PLAYBACK_PARAMS_H_
+#define _ANDROID_MEDIA_PLAYBACK_PARAMS_H_
 
 #include <media/AudioResamplerPublic.h>
 
 namespace android {
 
 // This entire class is inline as it is used from both core and media
-struct PlaybackSettings {
+struct PlaybackParams {
     AudioPlaybackRate audioRate;
     bool speedSet;
     bool pitchSet;
@@ -44,7 +44,7 @@
         jint        set_audio_stretch_mode;
 
         void init(JNIEnv *env) {
-            jclass lclazz = env->FindClass("android/media/PlaybackSettings");
+            jclass lclazz = env->FindClass("android/media/PlaybackParams");
             if (lclazz == NULL) {
                 return;
             }
@@ -80,14 +80,14 @@
         }
     };
 
-    void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject settings) {
-        audioRate.mSpeed = env->GetFloatField(settings, fields.speed);
-        audioRate.mPitch = env->GetFloatField(settings, fields.pitch);
+    void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) {
+        audioRate.mSpeed = env->GetFloatField(params, fields.speed);
+        audioRate.mPitch = env->GetFloatField(params, fields.pitch);
         audioRate.mFallbackMode =
-            (AudioTimestretchFallbackMode)env->GetIntField(settings, fields.audio_fallback_mode);
+            (AudioTimestretchFallbackMode)env->GetIntField(params, fields.audio_fallback_mode);
         audioRate.mStretchMode =
-            (AudioTimestretchStretchMode)env->GetIntField(settings, fields.audio_stretch_mode);
-        int set = env->GetIntField(settings, fields.set);
+            (AudioTimestretchStretchMode)env->GetIntField(params, fields.audio_stretch_mode);
+        int set = env->GetIntField(params, fields.set);
 
         speedSet = set & fields.set_speed;
         pitchSet = set & fields.set_pitch;
@@ -96,25 +96,25 @@
     }
 
     jobject asJobject(JNIEnv *env, const fields_t& fields) {
-        jobject settings = env->NewObject(fields.clazz, fields.constructID);
-        if (settings == NULL) {
+        jobject params = env->NewObject(fields.clazz, fields.constructID);
+        if (params == NULL) {
             return NULL;
         }
-        env->SetFloatField(settings, fields.speed, (jfloat)audioRate.mSpeed);
-        env->SetFloatField(settings, fields.pitch, (jfloat)audioRate.mPitch);
-        env->SetIntField(settings, fields.audio_fallback_mode, (jint)audioRate.mFallbackMode);
-        env->SetIntField(settings, fields.audio_stretch_mode, (jint)audioRate.mStretchMode);
+        env->SetFloatField(params, fields.speed, (jfloat)audioRate.mSpeed);
+        env->SetFloatField(params, fields.pitch, (jfloat)audioRate.mPitch);
+        env->SetIntField(params, fields.audio_fallback_mode, (jint)audioRate.mFallbackMode);
+        env->SetIntField(params, fields.audio_stretch_mode, (jint)audioRate.mStretchMode);
         env->SetIntField(
-                settings, fields.set,
+                params, fields.set,
                 (speedSet ? fields.set_speed : 0)
                         | (pitchSet ? fields.set_pitch : 0)
                         | (audioFallbackModeSet ? fields.set_audio_fallback_mode : 0)
                         | (audioStretchModeSet  ? fields.set_audio_stretch_mode : 0));
 
-        return settings;
+        return params;
     }
 };
 
 }  // namespace android
 
-#endif  // _ANDROID_MEDIA_PLAYBACK_SETTINGS_H_
+#endif  // _ANDROID_MEDIA_PLAYBACK_PARAMS_H_
diff --git a/media/jni/android_media_SyncSettings.cpp b/media/jni/android_media_SyncParams.cpp
similarity index 66%
rename from media/jni/android_media_SyncSettings.cpp
rename to media/jni/android_media_SyncParams.cpp
index 2f0605e..d9b2f1d 100644
--- a/media/jni/android_media_SyncSettings.cpp
+++ b/media/jni/android_media_SyncParams.cpp
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-#include "android_media_SyncSettings.h"
+#include "android_media_SyncParams.h"
 
 #include "JNIHelp.h"
 
 namespace android {
 
-void SyncSettings::fields_t::init(JNIEnv *env) {
-    jclass lclazz = env->FindClass("android/media/SyncSettings");
+void SyncParams::fields_t::init(JNIEnv *env) {
+    jclass lclazz = env->FindClass("android/media/SyncParams");
     if (lclazz == NULL) {
         return;
     }
@@ -51,17 +51,17 @@
     env->DeleteLocalRef(lclazz);
 }
 
-void SyncSettings::fields_t::exit(JNIEnv *env) {
+void SyncParams::fields_t::exit(JNIEnv *env) {
     env->DeleteGlobalRef(clazz);
     clazz = NULL;
 }
 
-void SyncSettings::fillFromJobject(JNIEnv *env, const fields_t& fields, jobject settings) {
-    syncSource = env->GetIntField(settings, fields.sync_source);
-    audioAdjustMode = env->GetIntField(settings, fields.audio_adjust_mode);
-    tolerance = env->GetFloatField(settings, fields.tolerance);
-    frameRate = env->GetFloatField(settings, fields.frame_rate);
-    int set = env->GetIntField(settings, fields.set);
+void SyncParams::fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params) {
+    sync.mSource = (AVSyncSource)env->GetIntField(params, fields.sync_source);
+    sync.mAudioAdjustMode = (AVSyncAudioAdjustMode)env->GetIntField(params, fields.audio_adjust_mode);
+    sync.mTolerance = env->GetFloatField(params, fields.tolerance);
+    frameRate = env->GetFloatField(params, fields.frame_rate);
+    int set = env->GetIntField(params, fields.set);
 
     syncSourceSet = set & fields.set_sync_source;
     audioAdjustModeSet = set & fields.set_audio_adjust_mode;
@@ -69,23 +69,23 @@
     frameRateSet = set & fields.set_frame_rate;
 }
 
-jobject SyncSettings::asJobject(JNIEnv *env, const fields_t& fields) {
-    jobject settings = env->NewObject(fields.clazz, fields.constructID);
-    if (settings == NULL) {
+jobject SyncParams::asJobject(JNIEnv *env, const fields_t& fields) {
+    jobject params = env->NewObject(fields.clazz, fields.constructID);
+    if (params == NULL) {
         return NULL;
     }
-    env->SetIntField(settings, fields.sync_source, (jint)syncSource);
-    env->SetIntField(settings, fields.audio_adjust_mode, (jint)audioAdjustMode);
-    env->SetFloatField(settings, fields.tolerance, (jfloat)tolerance);
-    env->SetFloatField(settings, fields.frame_rate, (jfloat)frameRate);
+    env->SetIntField(params, fields.sync_source, (jint)sync.mSource);
+    env->SetIntField(params, fields.audio_adjust_mode, (jint)sync.mAudioAdjustMode);
+    env->SetFloatField(params, fields.tolerance, (jfloat)sync.mTolerance);
+    env->SetFloatField(params, fields.frame_rate, (jfloat)frameRate);
     env->SetIntField(
-            settings, fields.set,
+            params, fields.set,
             (syncSourceSet ? fields.set_sync_source : 0)
                     | (audioAdjustModeSet ? fields.set_audio_adjust_mode : 0)
                     | (toleranceSet ? fields.set_tolerance : 0)
                     | (frameRateSet ? fields.set_frame_rate : 0));
 
-    return settings;
+    return params;
 }
 
 }  // namespace android
diff --git a/media/jni/android_media_SyncSettings.h b/media/jni/android_media_SyncParams.h
similarity index 78%
rename from media/jni/android_media_SyncSettings.h
rename to media/jni/android_media_SyncParams.h
index 586533f..543d79a 100644
--- a/media/jni/android_media_SyncSettings.h
+++ b/media/jni/android_media_SyncParams.h
@@ -14,18 +14,17 @@
  * limitations under the License.
  */
 
-#ifndef _ANDROID_MEDIA_SYNC_SETTINGS_H_
-#define _ANDROID_MEDIA_SYNC_SETTINGS_H_
+#ifndef _ANDROID_MEDIA_SYNC_PARAMS_H_
+#define _ANDROID_MEDIA_SYNC_PARAMS_H_
 
 #include "jni.h"
 
+#include <media/stagefright/MediaSync.h>
+
 namespace android {
 
-struct SyncSettings {
-    // keep this here until it is implemented
-    int syncSource;
-    int audioAdjustMode;
-    float tolerance;
+struct SyncParams {
+    AVSyncSettings sync;
     float frameRate;
 
     bool syncSourceSet;
@@ -54,13 +53,13 @@
         void exit(JNIEnv *env);
     };
 
-    // fills this from an android.media.SyncSettings object
-    void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject settings);
+    // fills this from an android.media.SyncParams object
+    void fillFromJobject(JNIEnv *env, const fields_t& fields, jobject params);
 
-    // returns this as a android.media.SyncSettings object
+    // returns this as a android.media.SyncParams object
     jobject asJobject(JNIEnv *env, const fields_t& fields);
 };
 
 }  // namespace android
 
-#endif  // _ANDROID_MEDIA_SYNC_SETTINGS_H_
+#endif  // _ANDROID_MEDIA_SYNC_PARAMS_H_
diff --git a/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplayProvider.java b/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplayProvider.java
index e2df77c..4d3edb8 100644
--- a/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplayProvider.java
+++ b/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplayProvider.java
@@ -287,7 +287,7 @@
      */
     public PendingIntent getSettingsPendingIntent() {
         if (mSettingsPendingIntent == null) {
-            Intent settingsIntent = new Intent(Settings.ACTION_WIFI_DISPLAY_SETTINGS);
+            Intent settingsIntent = new Intent(Settings.ACTION_CAST_SETTINGS);
             settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                     | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
                     | Intent.FLAG_ACTIVITY_CLEAR_TOP);
diff --git a/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothMidiDevice.java b/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothMidiDevice.java
index 8d194e5..0ccbf6a 100644
--- a/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothMidiDevice.java
+++ b/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothMidiDevice.java
@@ -47,6 +47,7 @@
 public final class BluetoothMidiDevice {
 
     private static final String TAG = "BluetoothMidiDevice";
+    private static final boolean DEBUG = false;
 
     private static final int MAX_PACKET_SIZE = 20;
 
@@ -91,7 +92,6 @@
                         mBluetoothGatt.discoverServices());
             } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                 Log.i(TAG, "Disconnected from GATT server.");
-                // FIXME synchronize?
                 close();
             }
         }
@@ -120,8 +120,8 @@
                     }
                 }
             } else {
-                Log.w(TAG, "onServicesDiscovered received: " + status);
-                // FIXME - report error back to client?
+                Log.e(TAG, "onServicesDiscovered received: " + status);
+                close();
             }
         }
 
@@ -136,9 +136,12 @@
 
             BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
                     CLIENT_CHARACTERISTIC_CONFIG);
-            // FIXME null check
-            descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
-            mBluetoothGatt.writeDescriptor(descriptor);
+            if (descriptor != null) {
+                descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
+                mBluetoothGatt.writeDescriptor(descriptor);
+            } else {
+                Log.e(TAG, "No CLIENT_CHARACTERISTIC_CONFIG for device " + mBluetoothDevice);
+            }
         }
 
         @Override
@@ -152,8 +155,10 @@
         @Override
         public void onCharacteristicChanged(BluetoothGatt gatt,
                                             BluetoothGattCharacteristic characteristic) {
-//            logByteArray("Received ", characteristic.getValue(), 0,
-//                    characteristic.getValue().length);
+            if (DEBUG) {
+                logByteArray("Received ", characteristic.getValue(), 0,
+                        characteristic.getValue().length);
+            }
             mPacketDecoder.decodePacket(characteristic.getValue(), mOutputReceiver);
         }
     };
@@ -182,8 +187,10 @@
             byte[] writeBuffer = mWriteBuffers[count];
             System.arraycopy(buffer, 0, writeBuffer, 0, count);
             mCharacteristic.setValue(writeBuffer);
-//            logByteArray("Sent ", mCharacteristic.getValue(), 0,
-//                    mCharacteristic.getValue().length);
+            if (DEBUG) {
+                logByteArray("Sent ", mCharacteristic.getValue(), 0,
+                       mCharacteristic.getValue().length);
+            }
             mBluetoothGatt.writeCharacteristic(mCharacteristic);
         }
     }
@@ -239,16 +246,18 @@
         }.start();
     }
 
-    void close() {
+    private void close() {
+        synchronized (mBluetoothDevice) {
         mEventScheduler.close();
-        if (mDeviceServer != null) {
-            IoUtils.closeQuietly(mDeviceServer);
-            mDeviceServer = null;
-            mService.deviceClosed(mBluetoothDevice);
-        }
-        if (mBluetoothGatt != null) {
-            mBluetoothGatt.close();
-            mBluetoothGatt = null;
+            if (mDeviceServer != null) {
+                IoUtils.closeQuietly(mDeviceServer);
+                mDeviceServer = null;
+                mService.deviceClosed(mBluetoothDevice);
+            }
+            if (mBluetoothGatt != null) {
+                mBluetoothGatt.close();
+                mBluetoothGatt = null;
+            }
         }
     }
 
@@ -259,14 +268,7 @@
     private static void logByteArray(String prefix, byte[] value, int offset, int count) {
         StringBuilder builder = new StringBuilder(prefix);
         for (int i = offset; i < count; i++) {
-            String hex = Integer.toHexString(value[i]);
-            int length = hex.length();
-            if (length == 1) {
-                hex = "0x" + hex;
-            } else {
-                hex = hex.substring(length - 2, length);
-            }
-            builder.append(hex);
+            builder.append(String.format("0x%02X", value[i]));
             if (i != value.length - 1) {
                 builder.append(", ");
             }
diff --git a/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java b/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java
index 463edcf..99ea353 100644
--- a/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java
+++ b/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java
@@ -44,7 +44,7 @@
     // timestamp for first message in current packet
     private int mPacketTimestamp;
     // current running status, or zero if none
-    private int mRunningStatus;
+    private byte mRunningStatus;
 
     private boolean mWritePending;
 
@@ -56,12 +56,28 @@
         public void onReceive(byte[] msg, int offset, int count, long timestamp)
                 throws IOException {
 
-            int milliTimestamp = (int)(timestamp / MILLISECOND_NANOS) & MILLISECOND_MASK;
-            int status = msg[0] & 0xFF;
-
             synchronized (mLock) {
+                int milliTimestamp = (int)(timestamp / MILLISECOND_NANOS) & MILLISECOND_MASK;
+                byte status = msg[offset];
+                boolean isSysExStart = (status == MidiConstants.STATUS_SYSTEM_EXCLUSIVE);
+                boolean isSysExContinuation = ((status & 0x80) == 0);
+
+                int bytesNeeded;
+                if (isSysExStart || isSysExContinuation) {
+                    // SysEx messages can be split into multiple packets
+                    bytesNeeded = 1;
+                } else {
+                    bytesNeeded = count;
+                }
+
                 boolean needsTimestamp = (milliTimestamp != mPacketTimestamp);
-                int bytesNeeded = count;
+                if (isSysExStart) {
+                    // SysEx start byte must be preceded by a timestamp
+                    needsTimestamp = true;
+                } else if (isSysExContinuation) {
+                    // SysEx continuation packets must not have timestamp byte
+                    needsTimestamp = false;
+                }
                 if (needsTimestamp) bytesNeeded++;  // add one for timestamp byte
                 if (status == mRunningStatus) bytesNeeded--;    // subtract one for status byte
 
@@ -71,15 +87,12 @@
                     flushLocked(true);
                 }
 
-                // write header if we are starting a new packet
-                if (mAccumulatedBytes == 0) {
-                    // header byte with timestamp bits 7 - 12
-                    mAccumulationBuffer[mAccumulatedBytes++] = (byte)(0x80 | (milliTimestamp >> 7));
-                    mPacketTimestamp = milliTimestamp;
-                    needsTimestamp = true;
+                // write the header if necessary
+                if (appendHeader(milliTimestamp)) {
+                     needsTimestamp = !isSysExContinuation;
                 }
 
-                // write new timestamp byte and status byte if necessary
+                // write new timestamp byte if necessary
                 if (needsTimestamp) {
                     // timestamp byte with bits 0 - 6 of timestamp
                     mAccumulationBuffer[mAccumulatedBytes++] =
@@ -87,20 +100,55 @@
                     mPacketTimestamp = milliTimestamp;
                 }
 
-                if (status != mRunningStatus) {
-                    mAccumulationBuffer[mAccumulatedBytes++] = (byte)status;
-                    if (MidiConstants.allowRunningStatus(status)) {
-                        mRunningStatus = status;
-                    } else if (MidiConstants.allowRunningStatus(status)) {
-                        mRunningStatus = 0;
-                    }
-                }
+                if (isSysExStart || isSysExContinuation) {
+                    // MidiFramer will end the packet with SysEx End if there is one in the buffer
+                    boolean hasSysExEnd =
+                            (msg[offset + count - 1] == MidiConstants.STATUS_END_SYSEX);
+                    int remaining = (hasSysExEnd ? count - 1 : count);
 
-                // now copy data bytes
-                int dataLength = count - 1;
-                System.arraycopy(msg, 1, mAccumulationBuffer, mAccumulatedBytes, dataLength);
-                // FIXME - handle long SysEx properly
-                mAccumulatedBytes += dataLength;
+                    while (remaining > 0) {
+                        if (mAccumulatedBytes == mAccumulationBuffer.length) {
+                            // write out our data if there is no more room
+                            // if necessary, block until previous packet is sent
+                            flushLocked(true);
+                            appendHeader(milliTimestamp);
+                        }
+
+                        int copy = mAccumulationBuffer.length - mAccumulatedBytes;
+                        if (copy > remaining) copy = remaining;
+                        System.arraycopy(msg, offset, mAccumulationBuffer, mAccumulatedBytes, copy);
+                        mAccumulatedBytes += copy;
+                        offset += copy;
+                        remaining -= copy;
+                    }
+
+                    if (hasSysExEnd) {
+                        // SysEx End command must be preceeded by a timestamp byte
+                        if (mAccumulatedBytes + 2 > mAccumulationBuffer.length) {
+                            // write out our data if there is no more room
+                            // if necessary, block until previous packet is sent
+                            flushLocked(true);
+                            appendHeader(milliTimestamp);
+                        }
+                        mAccumulationBuffer[mAccumulatedBytes++] = (byte)(0x80 | (milliTimestamp & 0x7F));
+                        mAccumulationBuffer[mAccumulatedBytes++] = MidiConstants.STATUS_END_SYSEX;
+                    }
+                } else {
+                    // Non-SysEx message
+                    if (status != mRunningStatus) {
+                        mAccumulationBuffer[mAccumulatedBytes++] = status;
+                        if (MidiConstants.allowRunningStatus(status)) {
+                            mRunningStatus = status;
+                        } else if (MidiConstants.cancelsRunningStatus(status)) {
+                            mRunningStatus = 0;
+                        }
+                    }
+
+                    // now copy data bytes
+                    int dataLength = count - 1;
+                    System.arraycopy(msg, offset + 1, mAccumulationBuffer, mAccumulatedBytes, dataLength);
+                    mAccumulatedBytes += dataLength;
+                }
 
                 // write the packet if possible, but do not block
                 flushLocked(false);
@@ -108,6 +156,18 @@
         }
     };
 
+    private boolean appendHeader(int milliTimestamp) {
+        // write header if we are starting a new packet
+        if (mAccumulatedBytes == 0) {
+            // header byte with timestamp bits 7 - 12
+            mAccumulationBuffer[mAccumulatedBytes++] = (byte)(0x80 | ((milliTimestamp >> 7) & 0x3F));
+            mPacketTimestamp = milliTimestamp;
+            return true;
+        } else {
+            return false;
+        }
+    }
+
     // MidiFramer for normalizing incoming data
     private final MidiFramer mMidiFramer = new MidiFramer(mFramedDataReceiver);
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
index 86c23c7..16b4c43 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
@@ -60,6 +60,7 @@
     public static final String VIDEO_H264_AAC = "/sdcard/media_api/video/H264_320_AAC_64.3gp";
     public static final String VIDEO_H264_AMR = "/sdcard/media_api/video/H264_320_AMRNB_6.3gp";
     public static final String VIDEO_HEVC_AAC = "/sdcard/media_api/video/HEVC_320_AAC_128.mp4";
+    public static final String VIDEO_MPEG2_AAC = "/sdcard/media_api/video/MPEG2_1500_AAC_128.mp4";
     public static final String VIDEO_HIGHRES_H263 = "/sdcard/media_api/video/H263_500_AMRNB_12.3gp";
     public static final String VIDEO_HIGHRES_MP4 = "/sdcard/media_api/video/H264_500_AAC_128.3gp";
     public static final String VIDEO_WEBM = "/sdcard/media_api/video/big-buck-bunny_trailer.webm";
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
index e730329..563b0f3 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
@@ -27,6 +27,7 @@
 import android.graphics.Paint;
 import android.graphics.Typeface;
 import android.hardware.Camera;
+import android.media.MediaCodec;
 import android.media.MediaMetadataRetriever;
 import android.media.MediaPlayer;
 import android.media.MediaRecorder;
@@ -225,10 +226,12 @@
 
     private boolean recordVideoFromSurface(
             int frameRate, int captureRate, int width, int height,
-            int videoFormat, int outFormat, String outFile, boolean videoOnly) {
+            int videoFormat, int outFormat, String outFile, boolean videoOnly,
+            Surface persistentSurface) {
         Log.v(TAG,"recordVideoFromSurface");
         MediaRecorder recorder = new MediaRecorder();
         int sleepTime = 33; // normal capture at 33ms / frame
+        Surface surface = null;
         try {
             if (!videoOnly) {
                 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
@@ -246,8 +249,15 @@
             if (!videoOnly) {
                 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
             }
+            if (persistentSurface != null) {
+                Log.v(TAG, "using persistent surface");
+                surface = persistentSurface;
+                recorder.usePersistentSurface(surface);
+            }
             recorder.prepare();
-            Surface surface = recorder.getSurface();
+            if (persistentSurface == null) {
+                surface = recorder.getSurface();
+            }
 
             Paint paint = new Paint();
             paint.setTextSize(16);
@@ -283,11 +293,15 @@
 
             Log.v(TAG, "stop");
             recorder.stop();
-            recorder.release();
         } catch (Exception e) {
-            Log.v("record video failed ", e.toString());
-            recorder.release();
+            Log.v(TAG, "record video failed: " + e.toString());
             return false;
+        } finally {
+            recorder.release();
+            // release surface if not using persistent surface
+            if (persistentSurface == null && surface != null) {
+                surface.release();
+            }
         }
         return true;
     }
@@ -550,7 +564,7 @@
 
                 success = recordVideoFromSurface(frameRate, 0, 352, 288, codec,
                         MediaRecorder.OutputFormat.THREE_GPP, filename,
-                        k == 0 ? true : false /* videoOnly */);
+                        k == 0 ? true : false /* videoOnly */, null);
                 if (success) {
                     success = validateVideo(filename, 352, 288);
                 }
@@ -564,6 +578,40 @@
         assertTrue("testSurfaceRecording", noOfFailure == 0);
     }
 
+    public void testPersistentSurfaceRecording() {
+        boolean success = false;
+        int noOfFailure = 0;
+        Surface surface = null;
+        try {
+            int codec = MediaRecorder.VideoEncoder.H264;
+            int frameRate = MediaProfileReader.getMaxFrameRateForCodec(codec);
+            surface = MediaCodec.createPersistentInputSurface();
+            for (int k = 0; k < 2; k++) {
+                String filename = "/sdcard/surface_persistent" + k + ".3gp";
+
+                Log.v(TAG, "test persistent surface - round " + k);
+                success = recordVideoFromSurface(frameRate, 0, 352, 288, codec,
+                        MediaRecorder.OutputFormat.THREE_GPP, filename,
+                        true /* videoOnly */, surface);
+                if (success) {
+                    success = validateVideo(filename, 352, 288);
+                }
+                if (!success) {
+                    noOfFailure++;
+                }
+            }
+        } catch (Exception e) {
+            Log.v(TAG, e.toString());
+        } finally {
+            if (surface != null) {
+                Log.v(TAG, "releasing persistent surface");
+                surface.release();
+                surface = null;
+            }
+        }
+        assertTrue("testPersistentSurfaceRecording", noOfFailure == 0);
+    }
+
     // Test recording from surface source with/without audio
     public void testSurfaceRecordingTimeLapse() {
         boolean success = false;
@@ -583,7 +631,7 @@
                 success = recordVideoFromSurface(
                         frameRate, captureRate, 352, 288, codec,
                         MediaRecorder.OutputFormat.THREE_GPP,
-                        filename, false /* videoOnly */);
+                        filename, false /* videoOnly */, null);
                 if (success) {
                     success = validateVideo(filename, 352, 288);
                     if (success) {
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
index 244b07f..c5281657 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
@@ -432,7 +432,22 @@
         assertTrue("HEVC playback memory test", memoryResult);
     }
 
-    // Test case 4: Capture the memory usage after every 20 video only recorded
+    // Test case 4: Capture the memory usage after every 20 mpeg2 playback
+    @LargeTest
+    public void testMPEG2VideoPlaybackMemoryUsage() throws Exception {
+        boolean memoryResult = false;
+
+        mStartPid = getMediaserverPid();
+        for (int i = 0; i < NUM_STRESS_LOOP; i++) {
+            mediaStressPlayback(MediaNames.VIDEO_MPEG2_AAC);
+            getMemoryWriteToLog(i);
+            writeProcmemInfo();
+        }
+        memoryResult = validateMemoryResult(mStartPid, mStartMemory, DECODER_LIMIT);
+        assertTrue("MPEG2 playback memory test", memoryResult);
+    }
+
+    // Test case 5: Capture the memory usage after every 20 video only recorded
     @LargeTest
     public void testH263RecordVideoOnlyMemoryUsage() throws Exception {
         if (mCamcorderProfile != null) {
@@ -453,7 +468,7 @@
         }
     }
 
-    // Test case 5: Capture the memory usage after every 20 video only recorded
+    // Test case 6: Capture the memory usage after every 20 video only recorded
     @LargeTest
     public void testMpeg4RecordVideoOnlyMemoryUsage() throws Exception {
         if (mCamcorderProfile != null) {
@@ -474,7 +489,7 @@
         }
     }
 
-    // Test case 6: Capture the memory usage after every 20 video and audio
+    // Test case 7: Capture the memory usage after every 20 video and audio
     // recorded
     @LargeTest
     public void testRecordVideoAudioMemoryUsage() throws Exception {
@@ -496,7 +511,7 @@
         }
     }
 
-    // Test case 7: Capture the memory usage after every 20 audio only recorded
+    // Test case 8: Capture the memory usage after every 20 audio only recorded
     @LargeTest
     public void testRecordAudioOnlyMemoryUsage() throws Exception {
         boolean memoryResult = false;
@@ -511,7 +526,7 @@
         assertTrue("audio record only memory test", memoryResult);
     }
 
-    // Test case 8: Capture the memory usage after every 20 camera preview
+    // Test case 9: Capture the memory usage after every 20 camera preview
     @LargeTest
     public void testCameraPreviewMemoryUsage() throws Exception {
         boolean memoryResult = false;
diff --git a/media/tests/contents/media_api/video/MPEG2_1500_AAC_128.mp4 b/media/tests/contents/media_api/video/MPEG2_1500_AAC_128.mp4
new file mode 100644
index 0000000..33f66a0
--- /dev/null
+++ b/media/tests/contents/media_api/video/MPEG2_1500_AAC_128.mp4
Binary files differ
diff --git a/native/android/sensor.cpp b/native/android/sensor.cpp
index 73b52aa..26b41e8 100644
--- a/native/android/sensor.cpp
+++ b/native/android/sensor.cpp
@@ -35,12 +35,25 @@
 using android::SensorManager;
 using android::SensorEventQueue;
 using android::String8;
+using android::String16;
 
 /*****************************************************************************/
 
+android::Mutex android::SensorManager::sLock;
+std::map<String16, SensorManager*> android::SensorManager::sPackageInstances;
+
 ASensorManager* ASensorManager_getInstance()
 {
-    return &SensorManager::getInstance();
+    return ASensorManager_getInstanceForPackage(NULL);
+}
+
+ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName)
+{
+    if (packageName) {
+        return &SensorManager::getInstanceForPackage(String16(packageName));
+    } else {
+        return &SensorManager::getInstanceForPackage(String16());
+    }
 }
 
 int ASensorManager_getSensorList(ASensorManager* manager,
diff --git a/native/graphics/jni/Android.mk b/native/graphics/jni/Android.mk
index f89a5af..1b684bb 100644
--- a/native/graphics/jni/Android.mk
+++ b/native/graphics/jni/Android.mk
@@ -32,7 +32,7 @@
 LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
 
 # TODO: This is to work around b/19059885. Remove after root cause is fixed
-LOCAL_LDFLAGS_arm := -Wl,--hash-style=sysv
+LOCAL_LDFLAGS_arm := -Wl,--hash-style=both
 
 include $(BUILD_SHARED_LIBRARY)
 
diff --git a/native/graphics/jni/bitmap.cpp b/native/graphics/jni/bitmap.cpp
index ddb01a0..6d2de98 100644
--- a/native/graphics/jni/bitmap.cpp
+++ b/native/graphics/jni/bitmap.cpp
@@ -27,18 +27,16 @@
         return ANDROID_BITMAP_RESULT_BAD_PARAMETER;
     }
 
-    SkBitmap* bm = GraphicsJNI::getSkBitmap(env, jbitmap);
-    if (NULL == bm) {
-        return ANDROID_BITMAP_RESULT_JNI_EXCEPTION;
-    }
+    SkBitmap bm;
+    GraphicsJNI::getSkBitmap(env, jbitmap, &bm);
 
     if (info) {
-        info->width     = bm->width();
-        info->height    = bm->height();
-        info->stride    = bm->rowBytes();
+        info->width     = bm.width();
+        info->height    = bm.height();
+        info->stride    = bm.rowBytes();
         info->flags     = 0;
 
-        switch (bm->colorType()) {
+        switch (bm.colorType()) {
             case kN32_SkColorType:
                 info->format = ANDROID_BITMAP_FORMAT_RGBA_8888;
                 break;
@@ -64,15 +62,16 @@
         return ANDROID_BITMAP_RESULT_BAD_PARAMETER;
     }
 
-    SkBitmap* bm = GraphicsJNI::getSkBitmap(env, jbitmap);
-    if (NULL == bm) {
+    SkPixelRef* pixelRef = GraphicsJNI::refSkPixelRef(env, jbitmap);
+    if (!pixelRef) {
         return ANDROID_BITMAP_RESULT_JNI_EXCEPTION;
     }
 
-    bm->lockPixels();
-    void* addr = bm->getPixels();
+    pixelRef->lockPixels();
+    void* addr = pixelRef->pixels();
     if (NULL == addr) {
-        bm->unlockPixels();
+        pixelRef->unlockPixels();
+        pixelRef->unref();
         return ANDROID_BITMAP_RESULT_ALLOCATION_FAILED;
     }
 
@@ -87,8 +86,8 @@
         return ANDROID_BITMAP_RESULT_BAD_PARAMETER;
     }
 
-    SkBitmap* bm = GraphicsJNI::getSkBitmap(env, jbitmap);
-    if (NULL == bm) {
+    SkPixelRef* pixelRef = GraphicsJNI::refSkPixelRef(env, jbitmap);
+    if (!pixelRef) {
         return ANDROID_BITMAP_RESULT_JNI_EXCEPTION;
     }
 
@@ -96,9 +95,17 @@
     // bitmaps.  Note that this will slow down read-only accesses to the
     // bitmaps, but the NDK methods are primarily intended to be used for
     // writes.
-    bm->notifyPixelsChanged();
+    pixelRef->notifyPixelsChanged();
 
-    bm->unlockPixels();
+    pixelRef->unlockPixels();
+    // Awkward in that we need to double-unref as the call to get the SkPixelRef
+    // did a ref(), so we need to unref() for the local ref and for the previous
+    // AndroidBitmap_lockPixels(). However this keeps GraphicsJNI a bit safer
+    // if others start using it without knowing about android::Bitmap's "fun"
+    // ref counting mechanism(s).
+    pixelRef->unref();
+    pixelRef->unref();
+
     return ANDROID_BITMAP_RESULT_SUCCESS;
 }
 
diff --git a/packages/CaptivePortalLogin/res/layout/activity_captive_portal_login.xml b/packages/CaptivePortalLogin/res/layout/activity_captive_portal_login.xml
index a11bed0..2f0a411 100644
--- a/packages/CaptivePortalLogin/res/layout/activity_captive_portal_login.xml
+++ b/packages/CaptivePortalLogin/res/layout/activity_captive_portal_login.xml
@@ -10,6 +10,13 @@
     android:layout_height="match_parent"
     android:orientation="vertical" >
 
+    <TextView
+        android:id="@+id/url_bar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textSize="20sp"
+        android:singleLine="true" />
+
     <ProgressBar
         android:id="@+id/progress_bar"
         android:layout_width="match_parent"
diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
index b86fc4b..1019e6c 100644
--- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
+++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
@@ -35,13 +35,13 @@
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
-import android.view.View;
 import android.webkit.SslErrorHandler;
 import android.webkit.WebChromeClient;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.widget.ProgressBar;
+import android.widget.TextView;
 
 import java.io.IOException;
 import java.net.HttpURLConnection;
@@ -221,6 +221,7 @@
     }
 
     private class MyWebViewClient extends WebViewClient {
+        private static final String INTERNAL_ASSETS = "file:///android_asset/";
         private boolean firstPageLoad = true;
 
         @Override
@@ -240,6 +241,12 @@
                 view.loadUrl(mURL.toString());
                 return;
             }
+            // For internally generated pages, leave URL bar listing prior URL as this is the URL
+            // the page refers to.
+            if (!url.startsWith(INTERNAL_ASSETS)) {
+                final TextView myUrlBar = (TextView) findViewById(R.id.url_bar);
+                myUrlBar.setText(url);
+            }
             testForCaptivePortal();
         }
 
@@ -252,17 +259,15 @@
         @Override
         public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
             Log.w(TAG, "SSL error; displaying broken lock icon.");
-            view.loadDataWithBaseURL("file:///android_asset/", SSL_ERROR_HTML, "text/HTML",
-                    "UTF-8", null);
+            view.loadDataWithBaseURL(INTERNAL_ASSETS, SSL_ERROR_HTML, "text/HTML", "UTF-8", null);
         }
     }
 
     private class MyWebChromeClient extends WebChromeClient {
         @Override
         public void onProgressChanged(WebView view, int newProgress) {
-            ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
+            final ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
             myProgressBar.setProgress(newProgress);
-            myProgressBar.setVisibility(newProgress == 100 ? View.GONE : View.VISIBLE);
         }
     }
 }
diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml
index bf50017..382b2d0 100644
--- a/packages/DocumentsUI/AndroidManifest.xml
+++ b/packages/DocumentsUI/AndroidManifest.xml
@@ -47,17 +47,6 @@
             </intent-filter>
         </activity>
 
-        <activity
-            android:name=".StandaloneActivity"
-            android:theme="@style/StandaloneTheme"
-            android:icon="@drawable/ic_doc_text"
-            android:enabled="false">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
         <provider
             android:name=".RecentsProvider"
             android:authorities="com.android.documentsui.recents"
diff --git a/packages/DocumentsUI/res/values-gu-rIN/strings.xml b/packages/DocumentsUI/res/values-gu-rIN/strings.xml
index 41bd168..cac6021 100644
--- a/packages/DocumentsUI/res/values-gu-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-gu-rIN/strings.xml
@@ -65,9 +65,11 @@
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી રહ્યાં છે.</item>
     </plurals>
     <string name="copy_preparing" msgid="3896202461003039386">"કૉપિ માટે તૈયારી કરી રહ્યું છે…"</string>
-    <!-- no translation found for copy_error_notification_title (5267616889076217261) -->
+    <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી શકાઈ નથી</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી શકાઈ નથી</item>
+    </plurals>
     <string name="notification_touch_for_details" msgid="4483108577842961665">"વિગતો જોવા માટે ટચ કરો"</string>
     <string name="retry" msgid="7564024179122207376">"ફરી પ્રયાસ કરો"</string>
-    <!-- no translation found for copy_failure_alert_content (3715575000297709082) -->
-    <skip />
+    <string name="copy_failure_alert_content" msgid="3715575000297709082">"આ ફાઇલો કૉપિ કરી નહોતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/packages/DocumentsUI/res/values-pa-rIN/strings.xml b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
index 978ea5a..56e4aa8 100644
--- a/packages/DocumentsUI/res/values-pa-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
@@ -65,9 +65,11 @@
       <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫਾਈਲਾਂ ਕਾਪੀ ਕਰ ਰਿਹਾ ਹੈ।</item>
     </plurals>
     <string name="copy_preparing" msgid="3896202461003039386">"ਕਾਪੀ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ…"</string>
-    <!-- no translation found for copy_error_notification_title (5267616889076217261) -->
+    <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+      <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾ ਸਕਿਆ</item>
+      <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾ ਸਕਿਆ</item>
+    </plurals>
     <string name="notification_touch_for_details" msgid="4483108577842961665">"ਵੇਰਵੇ ਵੇਖਣ ਲਈ ਸਪਰਸ਼ ਕਰੋ"</string>
     <string name="retry" msgid="7564024179122207376">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
-    <!-- no translation found for copy_failure_alert_content (3715575000297709082) -->
-    <skip />
+    <string name="copy_failure_alert_content" msgid="3715575000297709082">"ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾਈ ਗਈ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/packages/DocumentsUI/res/values-sq-rAL/strings.xml b/packages/DocumentsUI/res/values-sq-rAL/strings.xml
index 0e10e5d..37c063f 100644
--- a/packages/DocumentsUI/res/values-sq-rAL/strings.xml
+++ b/packages/DocumentsUI/res/values-sq-rAL/strings.xml
@@ -65,9 +65,11 @@
       <item quantity="one">Po kopjon <xliff:g id="COUNT_0">%1$d</xliff:g> skedar.</item>
     </plurals>
     <string name="copy_preparing" msgid="3896202461003039386">"Po përgatitet për kopjimin…"</string>
-    <!-- no translation found for copy_error_notification_title (5267616889076217261) -->
+    <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të kopjoheshin</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të kopjohej</item>
+    </plurals>
     <string name="notification_touch_for_details" msgid="4483108577842961665">"Prek për të parë detajet"</string>
     <string name="retry" msgid="7564024179122207376">"Provo përsëri"</string>
-    <!-- no translation found for copy_failure_alert_content (3715575000297709082) -->
-    <skip />
+    <string name="copy_failure_alert_content" msgid="3715575000297709082">"Këta skedarë nuk u kopjuan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/packages/DocumentsUI/res/values-ur-rPK/strings.xml b/packages/DocumentsUI/res/values-ur-rPK/strings.xml
index 31c1909..472b489 100644
--- a/packages/DocumentsUI/res/values-ur-rPK/strings.xml
+++ b/packages/DocumentsUI/res/values-ur-rPK/strings.xml
@@ -31,7 +31,7 @@
     <string name="menu_delete" msgid="8138799623850614177">"حذف کریں"</string>
     <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" منتخب کریں"</string>
     <string name="menu_select_all" msgid="4320518282375109902">"سبھی منتخب کریں"</string>
-    <string name="menu_copy" msgid="3612326052677229148">"اس پر کاپی ہو رہی ہے…"</string>
+    <string name="menu_copy" msgid="3612326052677229148">"اس میں کاپی کریں…"</string>
     <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"داخلی اسٹوریج دکھائیں"</string>
     <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"‏SD کارڈ دکھائیں"</string>
     <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"داخلی اسٹوریج چھپائیں"</string>
diff --git a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml b/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
index 1b15b9f9..5ebc8b3 100644
--- a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
+++ b/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
@@ -20,9 +20,9 @@
     <string name="title_open" msgid="4353228937663917801">"Ochish"</string>
     <string name="title_save" msgid="2433679664882857999">"Saqlash"</string>
     <string name="menu_create_dir" msgid="5947289605844398389">"Jild yaratish"</string>
-    <string name="menu_grid" msgid="6878021334497835259">"Katakchalar ko‘rinishida"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Katak ko‘rinishida"</string>
     <string name="menu_list" msgid="7279285939892417279">"Ro‘yxat ko‘rinishida"</string>
-    <string name="menu_sort" msgid="7677740407158414452">"Saralash:"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Saralash"</string>
     <string name="menu_search" msgid="3816712084502856974">"Izlash"</string>
     <string name="menu_settings" msgid="6008033148948428823">"Sozlamalar"</string>
     <string name="menu_open" msgid="432922957274920903">"Ochish"</string>
@@ -31,7 +31,7 @@
     <string name="menu_delete" msgid="8138799623850614177">"O‘chirish"</string>
     <string name="menu_select" msgid="8711270657353563424">"“<xliff:g id="DIRECTORY">^1</xliff:g>” jildini tanlash"</string>
     <string name="menu_select_all" msgid="4320518282375109902">"Barchasini tanlash"</string>
-    <string name="menu_copy" msgid="3612326052677229148">"...ga nusxalash"</string>
+    <string name="menu_copy" msgid="3612326052677229148">"Nusxalash…"</string>
     <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Ichki xotirani ko‘rsatish"</string>
     <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD kartani ko‘rsatish"</string>
     <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ichki xotirani berkitish"</string>
@@ -39,7 +39,7 @@
     <string name="menu_file_size_show" msgid="3240323619260823076">"Fayl hajmini ko‘rsatish"</string>
     <string name="menu_file_size_hide" msgid="8881975928502581042">"Fayl hajmini berkitish"</string>
     <string name="button_copy" msgid="8706475544635021302">"Nusxalash"</string>
-    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> belgilandi"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ta tanlandi"</string>
     <string name="sort_name" msgid="9183560467917256779">"Nomi bo‘yicha"</string>
     <string name="sort_date" msgid="586080032956151448">"Tahrir sanasi bo‘yicha"</string>
     <string name="sort_size" msgid="3350681319735474741">"Hajmi bo‘yicha"</string>
@@ -54,7 +54,7 @@
     <string name="root_type_shortcut" msgid="3318760609471618093">"Yorliqlar"</string>
     <string name="root_type_device" msgid="7121342474653483538">"Qurilmalar"</string>
     <string name="root_type_apps" msgid="8838065367985945189">"Ko‘proq dasturlar"</string>
-    <string name="empty" msgid="7858882803708117596">"Hech nima yo‘q"</string>
+    <string name="empty" msgid="7858882803708117596">"Hech narsa yo‘q"</string>
     <string name="toast_no_application" msgid="1339885974067891667">"Fayl ochilmadi"</string>
     <string name="toast_failed_delete" msgid="2180678019407244069">"Ba’zi hujjatlar o‘chirilmadi"</string>
     <string name="share_via" msgid="8966594246261344259">"Quyidagi orqali ulashish"</string>
diff --git a/packages/DocumentsUI/res/values/styles.xml b/packages/DocumentsUI/res/values/styles.xml
index 97509f7..6d741aa 100644
--- a/packages/DocumentsUI/res/values/styles.xml
+++ b/packages/DocumentsUI/res/values/styles.xml
@@ -36,20 +36,4 @@
         <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
     </style>
 
-    <style name="StandaloneTheme" parent="@android:style/Theme.Material.DayNight.DarkActionBar">
-        <item name="android:actionBarWidgetTheme">@null</item>
-
-        <item name="android:colorPrimaryDark">@*android:color/material_blue_grey_900</item>
-        <item name="android:colorPrimary">@*android:color/material_blue_grey_800</item>
-        <item name="android:colorAccent">@*android:color/material_deep_teal_500</item>
-
-        <item name="android:listDivider">@*android:drawable/list_divider_material</item>
-
-        <item name="android:windowActionBar">false</item>
-        <item name="android:windowActionModeOverlay">true</item>
-        <item name="android:windowNoTitle">true</item>
-
-        <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
-    </style>
-
 </resources>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index e0f10fa..cb21131 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -101,6 +101,41 @@
         return showMenu;
     }
 
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        boolean shown = super.onPrepareOptionsMenu(menu);
+
+        final RootInfo root = getCurrentRoot();
+        final DocumentInfo cwd = getCurrentDirectory();
+
+        final MenuItem sort = menu.findItem(R.id.menu_sort);
+        final MenuItem sortSize = menu.findItem(R.id.menu_sort_size);
+        final MenuItem grid = menu.findItem(R.id.menu_grid);
+        final MenuItem list = menu.findItem(R.id.menu_list);
+
+        final MenuItem advanced = menu.findItem(R.id.menu_advanced);
+        final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
+
+        mSearchManager.update(root);
+
+        // Search uses backend ranking; no sorting
+        sort.setVisible(cwd != null && !mSearchManager.isSearching());
+
+        State state = getDisplayState();
+        grid.setVisible(state.derivedMode != State.MODE_GRID);
+        list.setVisible(state.derivedMode != State.MODE_LIST);
+
+        // Only sort by size when visible
+        sortSize.setVisible(state.showSize);
+
+        advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this)
+                ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
+        fileSize.setTitle(LocalPreferences.getDisplayFileSize(this)
+                ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
+
+        return shown;
+    }
+
     void onStackRestored(boolean restored, boolean external) {}
 
     void onRootPicked(RootInfo root) {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CopyService.java b/packages/DocumentsUI/src/com/android/documentsui/CopyService.java
index 2e0bece..6e050c6 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/CopyService.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/CopyService.java
@@ -156,7 +156,7 @@
 
             if (mFailedFiles.size() > 0) {
                 final Context context = getApplicationContext();
-                final Intent navigateIntent = new Intent(context, StandaloneActivity.class);
+                final Intent navigateIntent = new Intent(context, DocumentsActivity.class);
                 navigateIntent.putExtra(EXTRA_STACK, (Parcelable) stack);
                 navigateIntent.putExtra(EXTRA_FAILURE, FAILURE_COPY);
                 navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, mFailedFiles);
@@ -200,7 +200,7 @@
         mIsCancelled = false;
 
         final Context context = getApplicationContext();
-        final Intent navigateIntent = new Intent(context, StandaloneActivity.class);
+        final Intent navigateIntent = new Intent(context, DocumentsActivity.class);
         navigateIntent.putExtra(EXTRA_STACK, (Parcelable) stack);
 
         mProgressBuilder = new Notification.Builder(this)
@@ -449,7 +449,7 @@
         InputStream src = null;
         OutputStream dst = null;
 
-        boolean errorOccurred = false;
+        IOException copyError = null;
         try {
             srcFile = mSrcClient.openFile(srcUri, "r", canceller);
             dstFile = mDstClient.openFile(dstUri, "w", canceller);
@@ -462,16 +462,14 @@
                 dst.write(buffer, 0, len);
                 makeProgress(len);
             }
+
             srcFile.checkError();
-            dstFile.checkError();
         } catch (IOException e) {
-            errorOccurred = true;
-            Log.e(TAG, "Error while copying " + srcUri.toString(), e);
+            copyError = e;
             try {
-                mFailedFiles.add(DocumentInfo.fromUri(getContentResolver(), srcUri));
-            } catch (FileNotFoundException ignore) {
-                Log.w(TAG, "Source file gone: " + srcUri, e);
-              // The source file is gone.
+                dstFile.closeWithError(copyError.getMessage());
+            } catch (IOException closeError) {
+                Log.e(TAG, "Error closing destination", closeError);
             }
         } finally {
             // This also ensures the file descriptors are closed.
@@ -479,7 +477,18 @@
             IoUtils.closeQuietly(dst);
         }
 
-        if (errorOccurred || mIsCancelled) {
+        if (copyError != null) {
+            // Log errors.
+            Log.e(TAG, "Error while copying " + srcUri.toString(), copyError);
+            try {
+                mFailedFiles.add(DocumentInfo.fromUri(getContentResolver(), srcUri));
+            } catch (FileNotFoundException ignore) {
+                Log.w(TAG, "Source file gone: " + srcUri, copyError);
+              // The source file is gone.
+            }
+        }
+
+        if (copyError != null || mIsCancelled) {
             // Clean up half-copied files.
             canceller.cancel();
             try {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 92c9cd1..cded717 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -27,6 +27,7 @@
 import static com.android.documentsui.DirectoryFragment.ANIM_NONE;
 import static com.android.documentsui.DirectoryFragment.ANIM_UP;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -66,6 +67,7 @@
 import com.android.documentsui.RecentsProvider.RecentColumns;
 import com.android.documentsui.RecentsProvider.ResumeColumns;
 import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.model.DocumentStack;
 import com.android.documentsui.model.DurableUtils;
 import com.android.documentsui.model.RootInfo;
 
@@ -189,6 +191,16 @@
             } else {
                 new RestoreStackTask().execute();
             }
+
+            // Show a failure dialog if there was a failed operation.
+            final Intent intent = getIntent();
+            final DocumentStack dstStack = intent.getParcelableExtra(CopyService.EXTRA_STACK);
+            final int failure = intent.getIntExtra(CopyService.EXTRA_FAILURE, 0);
+            if (failure != 0) {
+                final ArrayList<DocumentInfo> failedSrcList =
+                        intent.getParcelableArrayListExtra(CopyService.EXTRA_SRC_LIST);
+                FailureDialogFragment.show(getFragmentManager(), failure, failedSrcList, dstStack);
+            }
         } else {
             onCurrentDirectoryChanged(ANIM_NONE);
         }
@@ -442,32 +454,16 @@
     public boolean onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
 
-        final FragmentManager fm = getFragmentManager();
-
         final RootInfo root = getCurrentRoot();
         final DocumentInfo cwd = getCurrentDirectory();
 
         final MenuItem createDir = menu.findItem(R.id.menu_create_dir);
-        final MenuItem sort = menu.findItem(R.id.menu_sort);
-        final MenuItem sortSize = menu.findItem(R.id.menu_sort_size);
         final MenuItem grid = menu.findItem(R.id.menu_grid);
         final MenuItem list = menu.findItem(R.id.menu_list);
         final MenuItem advanced = menu.findItem(R.id.menu_advanced);
         final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
         final MenuItem settings = menu.findItem(R.id.menu_settings);
 
-        sort.setVisible(cwd != null);
-        grid.setVisible(mState.derivedMode != State.MODE_GRID);
-        list.setVisible(mState.derivedMode != State.MODE_LIST);
-
-        mSearchManager.update(root);
-
-        // Search uses backend ranking; no sorting
-        sort.setVisible(mSearchManager.isSearching());
-
-        // Only sort by size when visible
-        sortSize.setVisible(mState.showSize);
-
         boolean fileSizeVisible = !(mState.action == ACTION_MANAGE
                 || mState.action == ACTION_BROWSE);
         if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
@@ -482,17 +478,13 @@
             }
 
             if (mState.action == ACTION_CREATE) {
+                final FragmentManager fm = getFragmentManager();
                 SaveFragment.get(fm).setSaveEnabled(cwd != null && cwd.isCreateSupported());
             }
         } else {
             createDir.setVisible(false);
         }
 
-        advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this)
-                ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
-        fileSize.setTitle(LocalPreferences.getDisplayFileSize(this)
-                ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
-
         advanced.setVisible(!(mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE));
         fileSize.setVisible(fileSizeVisible);
 
diff --git a/packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java b/packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java
deleted file mode 100644
index cad277d..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.DirectoryFragment.ANIM_DOWN;
-import static com.android.documentsui.DirectoryFragment.ANIM_NONE;
-import static com.android.documentsui.DirectoryFragment.ANIM_UP;
-import android.app.Activity;
-import android.app.FragmentManager;
-import android.content.ActivityNotFoundException;
-import android.content.ClipData;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Point;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Root;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.BaseAdapter;
-import android.widget.Spinner;
-import android.widget.Toast;
-import android.widget.Toolbar;
-
-import com.android.documentsui.FailureDialogFragment;
-import com.android.documentsui.RecentsProvider.ResumeColumns;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.DurableUtils;
-import com.android.documentsui.model.RootInfo;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Activity providing a directly launchable file management activity.
- */
-public class StandaloneActivity extends BaseActivity {
-    public static final String TAG = "StandaloneFileManagement";
-
-    private Toolbar mToolbar;
-    private Spinner mToolbarStack;
-    private Toolbar mRootsToolbar;
-    private DirectoryContainerView mDirectoryContainer;
-    private State mState;
-    private ItemSelectedListener mStackListener;
-    private BaseAdapter mStackAdapter;
-
-    public StandaloneActivity() {
-        super(TAG);
-    }
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        setResult(Activity.RESULT_CANCELED);
-        setContentView(R.layout.activity);
-
-        final Context context = this;
-
-        mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory);
-
-        mState = (icicle != null)
-            ? icicle.<State>getParcelable(EXTRA_STATE)
-            : buildDefaultState();
-
-        mToolbar = (Toolbar) findViewById(R.id.toolbar);
-        mToolbar.setTitleTextAppearance(context,
-                android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title);
-
-        mStackAdapter = new StackAdapter();
-        mStackListener = new ItemSelectedListener();
-        mToolbarStack = (Spinner) findViewById(R.id.stack);
-        mToolbarStack.setOnItemSelectedListener(mStackListener);
-
-        mRootsToolbar = (Toolbar) findViewById(R.id.roots_toolbar);
-        if (mRootsToolbar != null) {
-            mRootsToolbar.setTitleTextAppearance(context,
-                    android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title);
-        }
-
-        setActionBar(mToolbar);
-
-        RootsFragment.show(getFragmentManager(), null);
-        if (!mState.restored) {
-            new RestoreStackTask().execute();
-
-            // Show a failure dialog if there was a failed operation.
-            final Intent intent = getIntent();
-            final DocumentStack dstStack = intent.getParcelableExtra(CopyService.EXTRA_STACK);
-            final int failure = intent.getIntExtra(CopyService.EXTRA_FAILURE, 0);
-            if (failure != 0) {
-                final ArrayList<DocumentInfo> failedSrcList =
-                        intent.getParcelableArrayListExtra(CopyService.EXTRA_SRC_LIST);
-                FailureDialogFragment.show(getFragmentManager(), failure, failedSrcList, dstStack);
-            }
-        } else {
-            onCurrentDirectoryChanged(ANIM_NONE);
-        }
-    }
-
-    private State buildDefaultState() {
-        State state = new State();
-
-        final Intent intent = getIntent();
-        state.action = State.ACTION_BROWSE_ALL;
-        state.acceptMimes = new String[] { "*/*" };
-        state.allowMultiple = true;
-        state.acceptMimes = new String[] { intent.getType() };
-        state.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false);
-        state.forceAdvanced = intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false);
-        state.showAdvanced = state.forceAdvanced
-                | LocalPreferences.getDisplayAdvancedDevices(this);
-        state.showSize = true;
-        final DocumentStack stack = intent.getParcelableExtra(CopyService.EXTRA_STACK);
-        if (stack != null)
-            state.stack = stack;
-
-        return state;
-    }
-
-    @Override
-    protected void onPostCreate(Bundle savedInstanceState) {
-        super.onPostCreate(savedInstanceState);
-        updateActionBar();
-    }
-
-    @Override
-    public void updateActionBar() {
-        final RootInfo root = getCurrentRoot();
-        mToolbar.setNavigationIcon(
-                root != null ? root.loadToolbarIcon(mToolbar.getContext()) : null);
-        mToolbar.setNavigationContentDescription(R.string.drawer_open);
-        mToolbar.setNavigationOnClickListener(null);
-
-        if (mSearchManager.isExpanded()) {
-            mToolbar.setTitle(null);
-            mToolbarStack.setVisibility(View.GONE);
-            mToolbarStack.setAdapter(null);
-        } else {
-            if (mState.stack.size() <= 1) {
-                mToolbar.setTitle(root.title);
-                mToolbarStack.setVisibility(View.GONE);
-                mToolbarStack.setAdapter(null);
-            } else {
-                mToolbar.setTitle(null);
-                mToolbarStack.setVisibility(View.VISIBLE);
-                mToolbarStack.setAdapter(mStackAdapter);
-
-                mStackListener.mIgnoreNextNavigation = true;
-                mToolbarStack.setSelection(mStackAdapter.getCount() - 1);
-            }
-        }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        boolean showMenu = super.onCreateOptionsMenu(menu);
-
-        expandMenus(menu);
-        return showMenu;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-
-        final RootInfo root = getCurrentRoot();
-        final DocumentInfo cwd = getCurrentDirectory();
-
-        final MenuItem createDir = menu.findItem(R.id.menu_create_dir);
-        final MenuItem sort = menu.findItem(R.id.menu_sort);
-        final MenuItem sortSize = menu.findItem(R.id.menu_sort_size);
-        final MenuItem grid = menu.findItem(R.id.menu_grid);
-        final MenuItem list = menu.findItem(R.id.menu_list);
-        final MenuItem advanced = menu.findItem(R.id.menu_advanced);
-        final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
-        final MenuItem settings = menu.findItem(R.id.menu_settings);
-
-        grid.setVisible(mState.derivedMode != State.MODE_GRID);
-        list.setVisible(mState.derivedMode != State.MODE_LIST);
-
-        mSearchManager.update(root);
-
-        sort.setVisible(cwd != null && !mSearchManager.isSearching());
-
-        // Only sort by size when visible
-        sortSize.setVisible(mState.showSize);
-
-        createDir.setVisible(cwd != null
-                && cwd.isCreateSupported()
-                && !mSearchManager.isSearching()
-                && !root.isDownloads());
-
-        fileSize.setVisible(cwd != null);
-        advanced.setVisible(cwd != null);
-
-        advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this)
-                ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
-        fileSize.setTitle(LocalPreferences.getDisplayFileSize(this)
-                ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
-
-        settings.setVisible((root.flags & Root.FLAG_HAS_SETTINGS) != 0);
-
-        return true;
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (!mState.stackTouched) {
-            super.onBackPressed();
-            return;
-        }
-
-        final int size = mState.stack.size();
-        if (size > 1) {
-            mState.stack.pop();
-            onCurrentDirectoryChanged(ANIM_UP);
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    @Override
-    public State getDisplayState() {
-        return mState;
-    }
-
-    @Override
-    void onDirectoryChanged(int anim) {
-        final FragmentManager fm = getFragmentManager();
-        final RootInfo root = getCurrentRoot();
-        final DocumentInfo cwd = getCurrentDirectory();
-
-        mDirectoryContainer.setDrawDisappearingFirst(anim == ANIM_DOWN);
-
-        if (cwd == null) {
-            DirectoryFragment.showRecentsOpen(fm, anim);
-
-            // Start recents in grid when requesting visual things
-            final boolean visualMimes = MimePredicate.mimeMatches(
-                    MimePredicate.VISUAL_MIMES, mState.acceptMimes);
-            mState.userMode = visualMimes ? State.MODE_GRID : State.MODE_LIST;
-            mState.derivedMode = mState.userMode;
-        } else {
-            if (mState.currentSearch != null) {
-                // Ongoing search
-                DirectoryFragment.showSearch(fm, root, mState.currentSearch, anim);
-            } else {
-                // Normal boring directory
-                DirectoryFragment.showNormal(fm, root, cwd, anim);
-            }
-        }
-    }
-
-    @Override
-    public void onDocumentPicked(DocumentInfo doc) {
-        if (doc.isDirectory()) {
-            mState.stack.push(doc);
-            mState.stackTouched = true;
-            onCurrentDirectoryChanged(ANIM_DOWN);
-        } else {
-            // Fall back to viewing
-            final Intent view = new Intent(Intent.ACTION_VIEW);
-            view.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-            view.setData(doc.derivedUri);
-
-            try {
-                startActivity(view);
-            } catch (ActivityNotFoundException ex2) {
-                Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
-            }
-        }
-    }
-
-    public void onDocumentsPicked(List<DocumentInfo> docs) {
-        // TODO
-    }
-
-    @Override
-    void saveStackBlocking() {
-        final ContentResolver resolver = getContentResolver();
-        final ContentValues values = new ContentValues();
-
-        final byte[] rawStack = DurableUtils.writeToArrayOrNull(
-                getDisplayState().stack);
-
-        // Remember location for next app launch
-        final String packageName = getCallingPackageMaybeExtra();
-        values.clear();
-        values.put(ResumeColumns.STACK, rawStack);
-        values.put(ResumeColumns.EXTERNAL, 0);
-        resolver.insert(RecentsProvider.buildResume(packageName), values);
-    }
-
-    @Override
-    void onTaskFinished(Uri... uris) {
-        Log.d(TAG, "onFinished() " + Arrays.toString(uris));
-
-        final Intent intent = new Intent();
-        if (uris.length == 1) {
-            intent.setData(uris[0]);
-        } else if (uris.length > 1) {
-            final ClipData clipData = new ClipData(
-                    null, mState.acceptMimes, new ClipData.Item(uris[0]));
-            for (int i = 1; i < uris.length; i++) {
-                clipData.addItem(new ClipData.Item(uris[i]));
-            }
-            intent.setClipData(clipData);
-        }
-
-        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
-                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
-                | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
-
-        setResult(Activity.RESULT_OK, intent);
-        finish();
-    }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/CopyTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/CopyTest.java
index 13f7daa..b1c84dd 100644
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/CopyTest.java
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/CopyTest.java
@@ -16,23 +16,21 @@
 
 package com.android.documentsui;
 
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.app.NotificationManager;
 import android.content.ContentProviderClient;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.ContextWrapper;
 import android.content.Intent;
+import android.content.pm.ProviderInfo;
+import android.database.ContentObserver;
 import android.database.Cursor;
 import android.net.Uri;
-import android.os.ParcelFileDescriptor;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
 import android.test.MoreAsserts;
 import android.test.ServiceTestCase;
+import android.test.mock.MockContentResolver;
 import android.util.Log;
 
 import com.android.documentsui.model.DocumentInfo;
@@ -43,40 +41,93 @@
 import libcore.io.IoUtils;
 import libcore.io.Streams;
 
-import org.mockito.Mockito;
-
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 public class CopyTest extends ServiceTestCase<CopyService> {
 
+    /**
+     * A test resolver that enables this test suite to listen for notifications that mark when copy
+     * operations are done.
+     */
+    class TestContentResolver extends MockContentResolver {
+        private CountDownLatch mReadySignal;
+        private CountDownLatch mNotificationSignal;
+
+        public TestContentResolver() {
+            mReadySignal = new CountDownLatch(1);
+        }
+
+        /**
+         * Wait for the given number of files to be copied to destination. Times out after 1 sec.
+         */
+        public void waitForChanges(int count) throws Exception {
+            // Wait for no more than 1 second by default.
+            waitForChanges(count, 1000);
+        }
+
+        /**
+         * Wait for files to be copied to destination.
+         *
+         * @param count Number of files to wait for.
+         * @param timeOut Timeout in ms. TimeoutException will be thrown if this function times out.
+         */
+        public void waitForChanges(int count, int timeOut) throws Exception {
+            mNotificationSignal = new CountDownLatch(count);
+            // Signal that the test is now waiting for files.
+            mReadySignal.countDown();
+            if (!mNotificationSignal.await(timeOut, TimeUnit.MILLISECONDS)) {
+                throw new TimeoutException("Timed out waiting for files to be copied.");
+            }
+        }
+
+        @Override
+        public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) {
+            // Wait until the test is ready to receive file notifications.
+            try {
+                mReadySignal.await();
+            } catch (InterruptedException e) {
+                Log.d(TAG, "Interrupted while waiting for file copy readiness");
+                Thread.currentThread().interrupt();
+            }
+            if (DocumentsContract.isDocumentUri(mContext, uri)) {
+                Log.d(TAG, "Notification: " + uri);
+                // Watch for document URI change notifications - this signifies the end of a copy.
+                mNotificationSignal.countDown();
+            }
+        }
+    };
+
     public CopyTest() {
         super(CopyService.class);
     }
 
-    private static String TAG = "CopyTest";
-    // This must match the authority for the StubProvider.
     private static String AUTHORITY = "com.android.documentsui.stubprovider";
+    private static String DST = "sd1";
+    private static String SRC = "sd0";
+    private static String TAG = "CopyTest";
     private List<RootInfo> mRoots;
     private Context mContext;
-    private ContentResolver mResolver;
+    private TestContentResolver mResolver;
     private ContentProviderClient mClient;
-    private NotificationManager mNotificationManager;
+    private StubProvider mStorage;
+    private Context mSystemContext;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        setupTestContext();
 
-        mResolver = mContext.getContentResolver();
+        setupTestContext();
         mClient = mResolver.acquireContentProviderClient(AUTHORITY);
 
         // Reset the stub provider's storage.
-        mClient.call("clear", "", null);
+        mStorage.clearCacheAndBuildRoots();
 
         mRoots = Lists.newArrayList();
         Uri queryUri = DocumentsContract.buildRootsUri(AUTHORITY);
@@ -84,9 +135,7 @@
         try {
             cursor = mClient.query(queryUri, null, null, null, null);
             while (cursor.moveToNext()) {
-                final RootInfo root = RootInfo.fromRootsCursor(AUTHORITY, cursor);
-                final String id = root.rootId;
-                mRoots.add(root);
+                mRoots.add(RootInfo.fromRootsCursor(AUTHORITY, cursor));
             }
         } finally {
             IoUtils.closeQuietly(cursor);
@@ -100,68 +149,94 @@
         super.tearDown();
     }
 
-    public List<Uri> setupTestFiles() throws Exception {
-        Uri rootUri = DocumentsContract.buildDocumentUri(AUTHORITY, mRoots.get(0).documentId);
-        List<Uri> testFiles = Lists.newArrayList(
-                DocumentsContract.createDocument(mClient, rootUri, "text/plain", "test0.txt"),
-                DocumentsContract.createDocument(mClient, rootUri, "text/plain", "test1.txt"),
-                DocumentsContract.createDocument(mClient, rootUri, "text/plain", "test2.txt")
-        );
-        String testContent[] = {
-                "The five boxing wizards jump quickly",
-                "The quick brown fox jumps over the lazy dog",
-                "Jackdaws love my big sphinx of quartz"
-        };
-        for (int i = 0; i < testFiles.size(); ++i) {
-            ParcelFileDescriptor pfd = null;
-            OutputStream out = null;
-            try {
-                pfd = mClient.openFile(testFiles.get(i), "w");
-                out = new ParcelFileDescriptor.AutoCloseOutputStream(pfd);
-                out.write(testContent[i].getBytes());
-            } finally {
-                IoUtils.closeQuietly(out);
-            }
-        }
-        return testFiles;
-    }
-
     /**
      * Test copying a single file.
      */
     public void testCopyFile() throws Exception {
-        Uri testFile = setupTestFiles().get(0);
+        String srcPath = "/test0.txt";
+        Uri testFile = mStorage.createFile(SRC, srcPath, "text/plain",
+                "The five boxing wizards jump quickly".getBytes());
 
-        // Just copy one file.
+        assertDstFileCountEquals(0);
+
         copyToDestination(Lists.newArrayList(testFile));
 
-        // A call to NotificationManager.cancel marks the end of the copy operation.
-        Mockito.verify(mNotificationManager, Mockito.timeout(1000)).cancel(Mockito.anyString(),
-                Mockito.anyInt());
+        // 2 operations: file creation, then writing data.
+        mResolver.waitForChanges(2);
 
         // Verify that one file was copied; check file contents.
         assertDstFileCountEquals(1);
-        assertCopied(testFile);
+        assertCopied(srcPath);
     }
 
     /**
      * Test copying multiple files.
      */
     public void testCopyMultipleFiles() throws Exception {
-        List<Uri> testFiles = setupTestFiles();
+        String testContent[] = {
+                "The five boxing wizards jump quickly",
+                "The quick brown fox jumps over the lazy dog",
+                "Jackdaws love my big sphinx of quartz"
+        };
+        String srcPaths[] = {
+                "/test0.txt",
+                "/test1.txt",
+                "/test2.txt"
+        };
+        List<Uri> testFiles = Lists.newArrayList(
+                mStorage.createFile(SRC, srcPaths[0], "text/plain", testContent[0].getBytes()),
+                mStorage.createFile(SRC, srcPaths[1], "text/plain", testContent[1].getBytes()),
+                mStorage.createFile(SRC, srcPaths[2], "text/plain", testContent[2].getBytes()));
+
+        assertDstFileCountEquals(0);
+
         // Copy all the test files.
         copyToDestination(testFiles);
 
-        // A call to NotificationManager.cancel marks the end of the copy operation.
-        Mockito.verify(mNotificationManager, Mockito.timeout(1000)).cancel(Mockito.anyString(),
-                Mockito.anyInt());
+        // 3 file creations, 3 file writes.
+        mResolver.waitForChanges(6);
 
         assertDstFileCountEquals(3);
-        for (Uri testFile : testFiles) {
-            assertCopied(testFile);
+        for (String path : srcPaths) {
+            assertCopied(path);
         }
     }
 
+    public void testCopyEmptyDir() throws Exception {
+        String srcPath = "/emptyDir";
+        Uri testDir = mStorage.createFile(SRC, srcPath, DocumentsContract.Document.MIME_TYPE_DIR,
+                null);
+
+        assertDstFileCountEquals(0);
+
+        copyToDestination(Lists.newArrayList(testDir));
+
+        // Just 1 operation: Directory creation.
+        mResolver.waitForChanges(1);
+
+        assertDstFileCountEquals(1);
+
+        File dst = mStorage.getFile(DST, srcPath);
+        assertTrue(dst.isDirectory());
+    }
+
+    public void testReadErrors() throws Exception {
+        String srcPath = "/test0.txt";
+        Uri testFile = mStorage.createFile(SRC, srcPath, "text/plain",
+                "The five boxing wizards jump quickly".getBytes());
+
+        assertDstFileCountEquals(0);
+
+        mStorage.simulateReadErrors(true);
+
+        copyToDestination(Lists.newArrayList(testFile));
+
+        // 3 operations: file creation, writing, then deletion (due to failed copy).
+        mResolver.waitForChanges(3);
+
+        assertDstFileCountEquals(0);
+    }
+
     /**
      * Copies the given files to a pre-determined destination.
      *
@@ -200,82 +275,55 @@
         assertEquals("Incorrect file count after copy", expected, count);
     }
 
-    /**
-     * Verifies that the file pointed to by the given URI was correctly copied to the destination.
-     */
-    private void assertCopied(Uri src) throws Exception {
-        Cursor cursor = null;
-        String srcName = null;
+    private void assertCopied(String path) throws Exception {
+        File srcFile = mStorage.getFile(SRC, path);
+        File dstFile = mStorage.getFile(DST, path);
+        assertNotNull(dstFile);
+
+        FileInputStream src = null;
+        FileInputStream dst = null;
         try {
-            cursor = mClient.query(src, null, null, null, null);
-            if (cursor.moveToFirst()) {
-                srcName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
-            }
+            src = new FileInputStream(srcFile);
+            dst = new FileInputStream(dstFile);
+            byte[] srcbuf = Streams.readFully(src);
+            byte[] dstbuf = Streams.readFully(dst);
+
+            MoreAsserts.assertEquals(srcbuf, dstbuf);
         } finally {
-            IoUtils.closeQuietly(cursor);
+            IoUtils.closeQuietly(src);
+            IoUtils.closeQuietly(dst);
         }
-        Uri dst = getDstFileUri(srcName);
-
-        InputStream in0 = null;
-        InputStream in1 = null;
-        try {
-            in0 = new ParcelFileDescriptor.AutoCloseInputStream(mClient.openFile(src, "r"));
-            in1 = new ParcelFileDescriptor.AutoCloseInputStream(mClient.openFile(dst, "r"));
-
-            byte[] buffer0 = Streams.readFully(in0);
-            byte[] buffer1 = Streams.readFully(in1);
-
-            MoreAsserts.assertEquals(buffer0, buffer1);
-        } finally {
-            IoUtils.closeQuietly(in0);
-            IoUtils.closeQuietly(in1);
-        }
-    }
-
-    /**
-     * Generates a file URI from a given filename. This assumes the file already exists in the
-     * destination root.
-     */
-    private Uri getDstFileUri(String filename) throws RemoteException {
-        final Uri dstFileQuery = DocumentsContract.buildChildDocumentsUri(AUTHORITY,
-                mRoots.get(1).documentId);
-        Cursor cursor = null;
-        try {
-            // StubProvider doesn't seem to support query strings; filter the results manually.
-            cursor = mClient.query(dstFileQuery, null, null, null, null);
-            while (cursor.moveToNext()) {
-                if (filename.equals(getCursorString(cursor, Document.COLUMN_DISPLAY_NAME))) {
-                    return DocumentsContract.buildDocumentUri(AUTHORITY,
-                            getCursorString(cursor, Document.COLUMN_DOCUMENT_ID));
-                }
-            }
-        } finally {
-            IoUtils.closeQuietly(cursor);
-        }
-        return null;
     }
 
     /**
      * Sets up a ContextWrapper that substitutes a stub NotificationManager. This allows the test to
      * listen for notification events, to gauge copy progress.
+     *
+     * @throws FileNotFoundException
      */
-    private void setupTestContext() {
-        mContext = getSystemContext();
-        System.setProperty("dexmaker.dexcache", mContext.getCacheDir().getPath());
+    private void setupTestContext() throws FileNotFoundException {
+        mSystemContext = getSystemContext();
 
-        mNotificationManager = Mockito.spy((NotificationManager) mContext
-                .getSystemService(Context.NOTIFICATION_SERVICE));
-
-        // Insert a stub NotificationManager that enables us to listen for when copying is complete.
-        setContext(new ContextWrapper(mContext) {
+        // Set up the context with the test content resolver.
+        mResolver = new TestContentResolver();
+        mContext = new ContextWrapper(mSystemContext) {
             @Override
-            public Object getSystemService(String name) {
-                if (Context.NOTIFICATION_SERVICE.equals(name)) {
-                    return mNotificationManager;
-                } else {
-                    return super.getSystemService(name);
-                }
+            public ContentResolver getContentResolver() {
+                return mResolver;
             }
-        });
+        };
+        setContext(mContext);
+
+        // Create a local stub provider and add it to the content resolver.
+        ProviderInfo info = new ProviderInfo();
+        info.authority = AUTHORITY;
+        info.exported = true;
+        info.grantUriPermissions = true;
+        info.readPermission = android.Manifest.permission.MANAGE_DOCUMENTS;
+        info.writePermission = android.Manifest.permission.MANAGE_DOCUMENTS;
+
+        mStorage = new StubProvider();
+        mStorage.attachInfo(mContext, info);
+        mResolver.addProvider(AUTHORITY, mStorage);
     }
 }
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
index 438f6cd..8cef433 100644
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
@@ -21,9 +21,10 @@
 import android.content.pm.ProviderInfo;
 import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
-import android.database.MatrixCursor.RowBuilder;
 import android.database.MatrixCursor;
+import android.database.MatrixCursor.RowBuilder;
 import android.graphics.Point;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.CancellationSignal;
 import android.os.FileUtils;
@@ -32,15 +33,16 @@
 import android.provider.DocumentsContract.Document;
 import android.provider.DocumentsContract.Root;
 import android.provider.DocumentsProvider;
+import android.support.annotation.VisibleForTesting;
 import android.util.Log;
 
 import com.google.android.collect.Maps;
 
 import libcore.io.IoUtils;
 
-import java.io.FileOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -70,6 +72,7 @@
     private String mAuthority;
     private SharedPreferences mPrefs;
     private Map<String, RootInfo> mRoots;
+    private boolean mSimulateReadErrors;
 
     @Override
     public void attachInfo(Context context, ProviderInfo info) {
@@ -83,7 +86,8 @@
         return true;
     }
 
-    private void clearCacheAndBuildRoots() {
+    @VisibleForTesting
+    public void clearCacheAndBuildRoots() {
         final File cacheDir = getContext().getCacheDir();
         removeRecursively(cacheDir);
         mStorage.clear();
@@ -164,7 +168,7 @@
         } else {
             try {
                 if (!file.createNewFile()) {
-                    throw new FileNotFoundException();
+                    throw new IllegalStateException("The file " + file.getPath() + " already exists");
                 }
             } catch (IOException e) {
                 throw new FileNotFoundException();
@@ -173,6 +177,10 @@
 
         final StubDocument document = new StubDocument(file, mimeType, parentDocument);
         notifyParentChanged(document.parentId);
+        getContext().getContentResolver().notifyChange(
+                DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
+                null, false);
+
         return document.documentId;
     }
 
@@ -187,6 +195,9 @@
             document.rootInfo.size -= fileSize;
         }
         notifyParentChanged(document.parentId);
+        getContext().getContentResolver().notifyChange(
+                DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
+                null, false);
     }
 
     @Override
@@ -226,7 +237,17 @@
             throw new FileNotFoundException();
 
         if ("r".equals(mode)) {
-            return ParcelFileDescriptor.open(document.file, ParcelFileDescriptor.MODE_READ_ONLY);
+            ParcelFileDescriptor pfd = ParcelFileDescriptor.open(document.file,
+                    ParcelFileDescriptor.MODE_READ_ONLY);
+            if (mSimulateReadErrors) {
+                pfd = new ParcelFileDescriptor(pfd) {
+                    @Override
+                    public void checkError() throws IOException {
+                        throw new IOException("Test error");
+                    }
+                };
+            }
+            return pfd;
         }
         if ("w".equals(mode)) {
             return startWrite(document);
@@ -235,6 +256,11 @@
         throw new FileNotFoundException();
     }
 
+    @VisibleForTesting
+    public void simulateReadErrors(boolean b) {
+        mSimulateReadErrors = b;
+    }
+
     @Override
     public AssetFileDescriptor openDocumentThumbnail(
             String docId, Point sizeHint, CancellationSignal signal) throws FileNotFoundException {
@@ -281,11 +307,15 @@
                         }
                     }
                 } catch (IOException e) {
+                    Log.e(TAG, "Error on close", e);
                     closePipeWithErrorSilently(readPipe, e.getMessage());
                 } finally {
                     IoUtils.closeQuietly(inputStream);
                     IoUtils.closeQuietly(outputStream);
                     notifyParentChanged(document.parentId);
+                    getContext().getContentResolver().notifyChange(
+                            DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
+                            null, false);
                 }
             }
         }.start();
@@ -302,7 +332,6 @@
 
     @Override
     public Bundle call(String method, String arg, Bundle extras) {
-        Log.d(TAG, "call: " + method + arg);
         switch (method) {
             case "clear":
                 clearCacheAndBuildRoots();
@@ -376,30 +405,51 @@
         }
     }
 
-    public File createFile(String rootId, File parent, String mimeType, String name)
-            throws IOException {
-        StubDocument parentDoc = null;
+    @VisibleForTesting
+    public Uri createFile(String rootId, String path, String mimeType, byte[] content)
+            throws FileNotFoundException, IOException {
+        StubDocument root = mRoots.get(rootId).rootDocument;
+        if (root == null) {
+            throw new FileNotFoundException("No roots with the ID " + rootId + " were found");
+        }
+        File file = new File(root.file, path.substring(1));
+        StubDocument parent = mStorage.get(getDocumentIdForFile(file.getParentFile()));
         if (parent == null) {
-            // Use the root dir as the parent, if one wasn't specified.
-            parentDoc = mRoots.get(rootId).rootDocument;
-        } else {
-            // Verify that the parent exists and is a directory.
-            parentDoc = mStorage.get(getDocumentIdForFile(parent));
-            if (parentDoc == null) {
-                throw new IllegalArgumentException("Parent file not found.");
-            }
-            if (!Document.MIME_TYPE_DIR.equals(parentDoc.mimeType)) {
-                throw new IllegalArgumentException("Parent file must be a directory.");
-            }
+            parent = mStorage.get(createFile(rootId, file.getParentFile().getPath(),
+                    DocumentsContract.Document.MIME_TYPE_DIR, null));
         }
-        File file = new File(parentDoc.file, name);
-        if (Document.MIME_TYPE_DIR.equals(mimeType)) {
-            file.mkdir();
+
+        if (DocumentsContract.Document.MIME_TYPE_DIR.equals(mimeType)) {
+            if (!file.mkdirs()) {
+                throw new FileNotFoundException("Couldn't create directory " + file.getPath());
+            }
         } else {
-            file.createNewFile();
+            if (!file.createNewFile()) {
+                throw new FileNotFoundException("Couldn't create file " + file.getPath());
+            }
+            // Add content to the file.
+            FileOutputStream fout = new FileOutputStream(file);
+            fout.write(content);
+            fout.close();
         }
-        new StubDocument(file, mimeType, parentDoc);
-        return file;
+        final StubDocument document = new StubDocument(file, mimeType, parent);
+        return DocumentsContract.buildDocumentUri(mAuthority,  document.documentId);
+    }
+
+    @VisibleForTesting
+    public File getFile(String rootId, String path) throws FileNotFoundException {
+        StubDocument root = mRoots.get(rootId).rootDocument;
+        if (root == null) {
+            throw new FileNotFoundException("No roots with the ID " + rootId + " were found");
+        }
+        // Convert the path string into a path that's relative to the root.
+        File needle = new File(root.file, path.substring(1));
+
+        StubDocument found = mStorage.get(getDocumentIdForFile(needle));
+        if (found == null) {
+            return null;
+        }
+        return found.file;
     }
 
     final class RootInfo {
diff --git a/packages/IntentFilterVerifier/Android.mk b/packages/IntentFilterVerifier/Android.mk
deleted file mode 100644
index 99feda5..0000000
--- a/packages/IntentFilterVerifier/Android.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-# Build the IntentFilterVerifier.
-include $(CLEAR_VARS)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-        volley \
-
-LOCAL_JAVA_LIBRARIES += org.apache.http.legacy
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := IntentFilterVerifier
-
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_PROGUARD_FLAGS := $(proguard.flags)
-
-include $(BUILD_PACKAGE)
-
-# Build the test package.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/IntentFilterVerifier/AndroidManifest.xml b/packages/IntentFilterVerifier/AndroidManifest.xml
deleted file mode 100644
index 3829cc5..0000000
--- a/packages/IntentFilterVerifier/AndroidManifest.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.verifier.intentfilter"
-        coreApp="true">
-    <uses-permission android:name="android.permission.INTENT_FILTER_VERIFICATION_AGENT"/>
-    <uses-permission android:name="android.permission.INTERNET"/>
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-
-    <application
-            android:label="@string/service_name"
-            android:allowBackup="false">
-
-        <receiver
-                android:name="com.android.verifier.intentfilter.IntentVerificationReceiver"
-                android:permission="android.permission.BIND_INTENT_FILTER_VERIFIER" >
-            <intent-filter
-                    android:priority="-1" >
-                <action android:name="android.intent.action.INTENT_FILTER_NEEDS_VERIFICATION" />
-                <data android:mimeType="application/vnd.android.package-archive" />
-            </intent-filter>
-        </receiver>
-
-        <service android:name=".IntentVerificationService"
-                 android:label="@string/service_name"
-                 android:exported="false"/>
-
-    </application>
-
-</manifest>
diff --git a/packages/IntentFilterVerifier/CleanSpec.mk b/packages/IntentFilterVerifier/CleanSpec.mk
deleted file mode 100644
index e4575ae..0000000
--- a/packages/IntentFilterVerifier/CleanSpec.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# If you don't need to do a full clean build but would like to touch
-# a file or delete some intermediate files, add a clean step to the end
-# of the list.  These steps will only be run once, if they haven't been
-# run before.
-#
-# E.g.:
-#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
-#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
-#
-# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
-# files that are missing or have been moved.
-#
-# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
-# Use $(OUT_DIR) to refer to the "out" directory.
-#
-# If you need to re-do something that's already mentioned, just copy
-# the command and add it to the bottom of the list.  E.g., if a change
-# that you made last week required touching a file and a change you
-# made today requires touching the same file, just copy the old
-# touch step and add it to the end of the list.
-#
-# *****************************************************************
-# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THE BANNER
-# *****************************************************************
-
-# For example:
-#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
-#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
-#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
-#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
-
-# ******************************************************************
-# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER
-# ******************************************************************
diff --git a/packages/IntentFilterVerifier/proguard.flags b/packages/IntentFilterVerifier/proguard.flags
deleted file mode 100644
index 6e4bec3..0000000
--- a/packages/IntentFilterVerifier/proguard.flags
+++ /dev/null
@@ -1 +0,0 @@
--verbose
\ No newline at end of file
diff --git a/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationReceiver.java b/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationReceiver.java
deleted file mode 100644
index de25f8c..0000000
--- a/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationReceiver.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.verifier.intentfilter;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.Bundle;
-import android.util.Log;
-import android.util.Slog;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class IntentVerificationReceiver extends BroadcastReceiver {
-    static final String TAG = IntentVerificationReceiver.class.getName();
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        final String action = intent.getAction();
-        if (Intent.ACTION_INTENT_FILTER_NEEDS_VERIFICATION.equals(action)) {
-            Bundle extras = intent.getExtras();
-            if (extras != null) {
-                int verificationId = extras.getInt(
-                        PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_ID);
-                String hosts = extras.getString(
-                        PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_HOSTS);
-
-                Log.d(TAG, "Received IntentFilter verification broadcast with verificationId: "
-                        + verificationId);
-
-                if (canDoVerification(context)) {
-                    Intent serviceIntent = new Intent(context, IntentVerificationService.class);
-                    serviceIntent.fillIn(intent, 0);
-                    serviceIntent.putExtras(intent.getExtras());
-
-                    Slog.d(TAG, "Starting Intent Verification Service.");
-
-                    context.startService(serviceIntent);
-                } else {
-                    sendVerificationFailure(context, verificationId, hosts);
-                }
-            }
-
-        } else {
-            Log.w(TAG, "Unexpected action: " + action);
-        }
-    }
-
-    private void sendVerificationFailure(Context context, int verificationId, String hosts) {
-        List<String> list = Arrays.asList(hosts.split(" "));
-        context.getPackageManager().verifyIntentFilter(
-                verificationId, PackageManager.INTENT_FILTER_VERIFICATION_FAILURE, list);
-
-        Log.d(TAG, "No network! Failing IntentFilter verification with verificationId: " +
-                verificationId + " and hosts: " + hosts);
-    }
-
-    private boolean canDoVerification(Context context) {
-        return hasNetwork(context);
-    }
-
-    public boolean hasNetwork(Context context) {
-        ConnectivityManager cm =
-                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-        if (cm != null) {
-            NetworkInfo info = cm.getActiveNetworkInfo();
-            return (info != null) && info.isConnected();
-        } else {
-            return false;
-        }
-    }
-}
diff --git a/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationRequest.java b/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationRequest.java
deleted file mode 100644
index 8f9c86f..0000000
--- a/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationRequest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.verifier.intentfilter;
-
-import com.android.volley.Response;
-import com.android.volley.toolbox.JsonArrayRequest;
-import org.json.JSONArray;
-
-public class IntentVerificationRequest extends JsonArrayRequest {
-
-    public IntentVerificationRequest(String url, Response.Listener<JSONArray> listener,
-            Response.ErrorListener errorListener) {
-        super(url, listener, errorListener);
-    }
-}
diff --git a/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationService.java b/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationService.java
deleted file mode 100644
index 3e4db6c..0000000
--- a/packages/IntentFilterVerifier/src/com/android/verifier/intentfilter/IntentVerificationService.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.verifier.intentfilter;
-
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.Signature;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.Slog;
-import com.android.volley.RequestQueue;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.Volley;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
-
-public class IntentVerificationService extends Service {
-    private static final String TAG = "IntentVerificationService";
-
-    private static final String WELL_KNOWN_ASSOCIATIONS_JSON = "/.well-known/associations.json";
-    private static final String DEFAULT_SCHEME = "https";
-
-    private static final String JSON_KEY_TARGET = "target";
-    private static final String JSON_KEY_NAMESPACE = "namespace";
-    private static final String JSON_KEY_PACKAGE_NAME = "package_name";
-    private static final String JSON_KEY_CERT_FINGERPRINTS = "sha256_cert_fingerprints";
-
-    private static final String JSON_VAL_ANDROID_APP = "android_app";
-
-    private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            'A', 'B', 'C', 'D', 'E', 'F' };
-
-    private ConnectivityManager mConnectivityManager;
-    private Looper mHandlerLooper;
-    private VerificationHandler mHandler;
-    private RequestQueue mRequestQueue;
-
-    private static class VerificationState {
-        public final int verificationId;
-        public final String hosts;
-        public final String packageName;
-        public final Set<String> fingerprints;
-        public int responseCode = PackageManager.INTENT_FILTER_VERIFICATION_SUCCESS;
-        public int counter;
-        public int numberOfHosts;
-        public ArrayList<String> failedHosts = new ArrayList<>();
-
-        private final Object lock = new Object();
-
-        public VerificationState(int id, String h, String p, Set<String> fps) {
-            verificationId = id;
-            hosts = h;
-            packageName = p;
-            fingerprints = fps;
-            numberOfHosts = hosts.split(" ").length;
-        }
-        public boolean setResponseCodeAndCheckMax(int code) {
-            synchronized (lock) {
-                if (code == PackageManager.INTENT_FILTER_VERIFICATION_FAILURE) {
-                    responseCode = code;
-                    counter++;
-                } else if (code == PackageManager.INTENT_FILTER_VERIFICATION_SUCCESS) {
-                    counter++;
-                }
-                return (counter == numberOfHosts);
-            }
-        }
-
-        public void addFailedHost(String host) {
-            synchronized (failedHosts) {
-                failedHosts.add(host);
-            }
-        }
-
-        public ArrayList<String> getFailedHosts() {
-            return failedHosts;
-        }
-    }
-
-    private HashMap<Integer, VerificationState> mVerificationMap =
-            new HashMap<Integer, VerificationState>();
-
-    private class VerificationHandler extends Handler {
-        private static final int MSG_STOP_SERVICE = 0;
-        private static final int MSG_VERIFY_INTENT_START = 1;
-        private static final int MSG_VERIFY_INTENT_DONE = 2;
-
-        private static final long SHUTDOWN_DELAY_MILLIS = 8 * 1000;
-
-        private final Context mContext;
-
-        public VerificationHandler(Context context, Looper looper) {
-            super(looper);
-
-            mContext = context;
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_VERIFY_INTENT_START:
-                    final Intent intent = (Intent) msg.obj;
-                    Bundle extras = intent.getExtras();
-                    boolean immediate = false;
-
-                    if (extras != null) {
-                        immediate = doVerification(extras);
-                    }
-
-                    // There was no network, so we can stop soon
-                    if (immediate) {
-                        stopDelayed();
-                    }
-                    break;
-
-                case MSG_VERIFY_INTENT_DONE:
-                    VerificationState vs = (VerificationState) msg.obj;
-                    processVerificationDone(mContext, vs);
-                    clearVerificationState(vs);
-                    break;
-
-                case MSG_STOP_SERVICE:
-                    stopSelf();
-                    break;
-
-                default:
-                    Slog.i(TAG, "Unknown message posted " + msg.toString());
-                    break;
-
-            }
-        }
-
-        private void stopDelayed() {
-            removeMessages(MSG_STOP_SERVICE);
-            sendEmptyMessageDelayed(MSG_STOP_SERVICE, SHUTDOWN_DELAY_MILLIS);
-        }
-    }
-
-    private VerificationState getVerificationState(int id, String hosts, String packageName,
-            Set<String> fingerprints) {
-        synchronized (mVerificationMap) {
-            VerificationState vs = mVerificationMap.get(id);
-            if (vs == null) {
-                vs = new VerificationState(id, hosts, packageName, fingerprints);
-            }
-            return vs;
-        }
-    }
-
-    private void clearVerificationState(VerificationState vs) {
-        mVerificationMap.remove(vs);
-    }
-
-    private boolean doVerification(Bundle extras) {
-        String scheme = extras.getString(PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_URI_SCHEME);
-        if (TextUtils.isEmpty(scheme)) {
-            scheme = DEFAULT_SCHEME;
-        }
-
-        int verificationId = extras.getInt(PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_ID);
-        String hosts = extras.getString(PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_HOSTS);
-        String packageName = extras.getString(
-                PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_PACKAGE_NAME);
-
-        Set<String> fingerprints = getFingerprints(packageName);
-
-        Log.d(TAG, "Received IntentFilter verification broadcast with verificationId:" +
-                verificationId + " hosts:'" + hosts + "' scheme:" + scheme);
-
-        VerificationState vs = getVerificationState(verificationId, hosts, packageName,
-                fingerprints);
-
-        if (hasNetwork()) {
-            sendNetworkVerifications(scheme, vs);
-            return false;
-        }
-
-        // No network, so fail immediately
-        sendFailureResponseIfNeeded(vs);
-
-        return true;
-    }
-
-    private Set<String> getFingerprints(String packageName) {
-        Context context = getApplicationContext();
-        try {
-            Signature[] signatures = context.getPackageManager().getPackageInfo(packageName,
-                    PackageManager.GET_SIGNATURES).signatures;
-            if (signatures.length > 0) {
-                HashSet<String> result = new HashSet<String>();
-                for (Signature sig : signatures) {
-                    String fingerprint = computeNormalizedSha256Fingerprint(sig.toByteArray());
-                    result.add(fingerprint);
-                }
-                return result;
-            }
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.e(TAG, "Cannot get signatures for package name: " + packageName);
-        }
-        return Collections.EMPTY_SET;
-    }
-
-    private static String computeNormalizedSha256Fingerprint(byte[] signature) {
-        MessageDigest digester;
-        try {
-            digester = MessageDigest.getInstance("SHA-256");
-        } catch (NoSuchAlgorithmException e) {
-            throw new AssertionError("No SHA-256 implementation found.");
-        }
-        digester.update(signature);
-        return byteArrayToHexString(digester.digest());
-    }
-
-    private static String byteArrayToHexString(byte[] array) {
-        if (array.length == 0) {
-            return "";
-        }
-        char[] buf = new char[array.length * 3 - 1];
-
-        int bufIndex = 0;
-        for (int i = 0; i < array.length; i++) {
-            byte b = array[i];
-            if (i > 0) {
-                buf[bufIndex++] = ':';
-            }
-            buf[bufIndex++] = HEX_DIGITS[(b >>> 4) & 0x0F];
-            buf[bufIndex++] = HEX_DIGITS[b & 0x0F];
-        }
-        return new String(buf);
-    }
-
-    private static String getAssociationPath() {
-        return WELL_KNOWN_ASSOCIATIONS_JSON;
-    }
-
-    private void sendNetworkVerifications(String scheme, final VerificationState vs) {
-        final int verificationId = vs.verificationId;
-        final String hosts = vs.hosts;
-
-        String[] array = hosts.split(" ");
-        for (final String host : array) {
-            try {
-                final URL url = new URL(scheme, host, getAssociationPath());
-                final String urlStr = url.toString();
-                Log.d(TAG, "Using verification URL: " + urlStr);
-                IntentVerificationRequest req = new IntentVerificationRequest(urlStr,
-                    new Response.Listener<JSONArray>() {
-                        @Override
-                        public void onResponse(JSONArray response) {
-                            Log.d(TAG, "From: " + urlStr + " received response: "
-                                    + response.toString());
-                            handleResponse(vs, host, response);
-                        }
-                    }, new Response.ErrorListener() {
-                        @Override
-                        public void onErrorResponse(VolleyError error) {
-                            Slog.d(TAG, "From: " + urlStr + " got error: " + error.getMessage()
-                                    + (error.networkResponse != null ? " with status code: "
-                                    + error.networkResponse.statusCode : ""));
-                            handleError(vs, host);
-                        }
-                    }
-                );
-                mRequestQueue.add(req);
-            } catch (MalformedURLException e) {
-                Log.w(TAG, "Cannot send verificationId: " + verificationId + " to host: " + host);
-            }
-        }
-    }
-
-    private void handleError(VerificationState vs, String host) {
-        vs.addFailedHost(host);
-        sendFailureResponseIfNeeded(vs);
-    }
-
-    private void handleResponse(VerificationState vs, String host, JSONArray response) {
-        try {
-            if (response.length() == 0) {
-                Log.d(TAG, "Domain response is empty!");
-                handleError(vs, host);
-                return;
-            }
-
-            JSONObject firstRelation = (JSONObject) response.get(0);
-            if (firstRelation == null) {
-                Log.d(TAG, "Domain response is should have a relation!");
-                handleError(vs, host);
-                return;
-            }
-
-            JSONObject target = (JSONObject) firstRelation.get(JSON_KEY_TARGET);
-            if (target == null) {
-                Log.d(TAG, "Domain response target is empty!");
-                handleError(vs, host);
-                return;
-            }
-
-            String nameSpace = target.getString(JSON_KEY_NAMESPACE);
-            if (TextUtils.isEmpty(nameSpace) || !nameSpace.equals(JSON_VAL_ANDROID_APP)) {
-                Log.d(TAG, "Domain response target name space is not valid: " + nameSpace);
-                handleError(vs, host);
-                return;
-            }
-
-            String packageName = target.getString(JSON_KEY_PACKAGE_NAME);
-            JSONArray certFingerprints = target.getJSONArray(JSON_KEY_CERT_FINGERPRINTS);
-
-            // Early exits is the JSON response is not correct for the package name or signature
-            if (TextUtils.isEmpty(packageName)) {
-                Log.d(TAG, "Domain response has empty package name!");
-                handleError(vs, host);
-                return;
-            }
-            if (certFingerprints.length() == 0) {
-                Log.d(TAG, "Domain response has empty cert signature!");
-                handleError(vs, host);
-                return;
-            }
-            // Now do the real test on package name and signature
-            if (!packageName.equalsIgnoreCase(vs.packageName)) {
-                Log.d(TAG, "Domain response has package name mismatch!" + packageName +
-                        " vs " + vs.packageName);
-                handleError(vs, host);
-                return;
-            }
-            final int count = certFingerprints.length();
-            for (int i = 0; i < count; i++) {
-                String fingerprint = certFingerprints.getString(i);
-                if (!vs.fingerprints.contains(fingerprint)) {
-                    Log.d(TAG, "Domain response has cert fingerprint mismatch! " +
-                            "The domain fingerprint '" + fingerprint + "' is not from the App");
-                    handleError(vs, host);
-                    return;
-                }
-            }
-            sendSuccessResponseIfNeeded(vs);
-        } catch (JSONException e) {
-            Log.d(TAG, "Domain response is not well formed", e);
-            handleError(vs, host);
-        }
-    }
-
-    private void sendSuccessResponseIfNeeded(VerificationState vs) {
-        if (vs.setResponseCodeAndCheckMax(PackageManager.INTENT_FILTER_VERIFICATION_SUCCESS)) {
-            sendMessage(vs);
-        }
-    }
-
-    private void sendFailureResponseIfNeeded(VerificationState vs) {
-        if (vs.setResponseCodeAndCheckMax(PackageManager.INTENT_FILTER_VERIFICATION_FAILURE)) {
-            sendMessage(vs);
-        }
-    }
-
-    private void sendMessage(VerificationState vs) {
-        Message msg = mHandler.obtainMessage(VerificationHandler.MSG_VERIFY_INTENT_DONE);
-        msg.obj = vs;
-        mHandler.sendMessage(msg);
-    }
-
-    private void processVerificationDone(Context context, VerificationState state) {
-        int verificationId = state.verificationId;
-        String hosts = state.hosts;
-        int responseCode = state.responseCode;
-
-        final PackageManager pm = context.getPackageManager();
-
-        // Callback the PackageManager
-        pm.verifyIntentFilter(verificationId, responseCode, state.getFailedHosts());
-        Log.d(TAG, "IntentFilter with verificationId: " + verificationId + " and hosts: " +
-                hosts + " got verification code: " + responseCode);
-    }
-
-    /**
-     * We only connect to this service from the same process.
-     */
-    public class LocalBinder extends Binder {
-        IntentVerificationService getService() { return IntentVerificationService.this; }
-    }
-
-    private final IBinder mBinder = new LocalBinder();
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return mBinder;
-    }
-
-    @Override
-    public int onStartCommand(Intent intent, int flags, int startId) {
-        Slog.i(TAG, "Received start id " + startId + ": " + intent);
-
-        final Message msg = mHandler.obtainMessage(VerificationHandler.MSG_VERIFY_INTENT_START);
-        msg.obj = intent;
-        mHandler.sendMessage(msg);
-
-        return START_STICKY;
-    }
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-
-        Slog.d(TAG, "Starting up...");
-
-        final HandlerThread handlerThread = new HandlerThread("IntentVerificationService");
-        handlerThread.start();
-        mHandlerLooper = handlerThread.getLooper();
-
-        mHandler = new VerificationHandler(getApplicationContext(), mHandlerLooper);
-
-        mRequestQueue = Volley.newRequestQueue(this);
-        mRequestQueue.start();
-
-        mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-
-        Slog.d(TAG, "Shutting down...");
-
-        mHandlerLooper.quit();
-        mRequestQueue.stop();
-    }
-
-    private boolean hasNetwork() {
-        NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
-        return (info != null) && info.isConnected();
-    }
-}
diff --git a/packages/Keyguard/res/values-af/strings.xml b/packages/Keyguard/res/values-af/strings.xml
index 0eb378f..1deb4ca 100644
--- a/packages/Keyguard/res/values-af/strings.xml
+++ b/packages/Keyguard/res/values-af/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart is PUK-geslote."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ontsluit tans SIM-kaart…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Patroon ontsluit."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Gesigslot."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN ontsluit."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Wagwoord ontsluit."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Patroonarea."</string>
diff --git a/packages/Keyguard/res/values-am/strings.xml b/packages/Keyguard/res/values-am/strings.xml
index c95b404..3fada19 100644
--- a/packages/Keyguard/res/values-am/strings.xml
+++ b/packages/Keyguard/res/values-am/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ሲም ካርድ በፒዩኬ ተዘግቷል።"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ሲም ካርዱን በመክፈት ላይ…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"በስርዓተ-ጥለት መክፈት።"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"በፊት መክፈት።"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"በፒን መክፈት።"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"በይለፍ ቃል መክፈት።"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"የስርዓተ-ጥለት አካባቢ።"</string>
diff --git a/packages/Keyguard/res/values-ar/strings.xml b/packages/Keyguard/res/values-ar/strings.xml
index 5b919ba..00482e4 100644
--- a/packages/Keyguard/res/values-ar/strings.xml
+++ b/packages/Keyguard/res/values-ar/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"‏شريحة SIM مؤمّنة بكود PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"‏جارٍ إلغاء تأمين شريحة SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"تأمين الجهاز بالوجه."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"‏إلغاء القفل باستخدام رمز PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"إلغاء القفل باستخدام كلمة المرور."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"منطقة النقش."</string>
diff --git a/packages/Keyguard/res/values-bg/strings.xml b/packages/Keyguard/res/values-bg/strings.xml
index 97b04e4..225239a 100644
--- a/packages/Keyguard/res/values-bg/strings.xml
+++ b/packages/Keyguard/res/values-bg/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картата е заключена с PUK код."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картата се отключва…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Отключване с фигура."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Отключване с лице."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Отключване с ПИН код."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Отключване с парола."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област на фигурата."</string>
diff --git a/packages/Keyguard/res/values-bn-rBD/strings.xml b/packages/Keyguard/res/values-bn-rBD/strings.xml
index a67143a..a26bede 100644
--- a/packages/Keyguard/res/values-bn-rBD/strings.xml
+++ b/packages/Keyguard/res/values-bn-rBD/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"সিম কার্ডটি PUK কোড দিয়ে লক করা আছে৷"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"সিম কার্ড আনলক করা হচ্ছে…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"প্যাটার্ন দিয়ে আনলক৷"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"মুখের সাহায্যে আনলক করুন৷"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"পিন দিয়ে আনলক৷"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"পাসওয়ার্ড দিয়ে আনলক৷"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"প্যাটার্ন এলাকা৷"</string>
diff --git a/packages/Keyguard/res/values-ca/strings.xml b/packages/Keyguard/res/values-ca/strings.xml
index 6541d80..c9a41a8 100644
--- a/packages/Keyguard/res/values-ca/strings.xml
+++ b/packages/Keyguard/res/values-ca/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La targeta SIM està bloquejada pel PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"S\'està desbloquejant la targeta SIM..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueig mitjançant patró"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueig facial"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueig mitjançant PIN"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueig mitjançant contrasenya"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Àrea de patró"</string>
diff --git a/packages/Keyguard/res/values-cs/strings.xml b/packages/Keyguard/res/values-cs/strings.xml
index b264141..ee26e16 100644
--- a/packages/Keyguard/res/values-cs/strings.xml
+++ b/packages/Keyguard/res/values-cs/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karta je zablokována pomocí kódu PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odblokování SIM karty…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odemknutí gestem."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Odemknutí obličejem."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odemknutí kódem PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odemknutí heslem."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Oblast pro zadání bezpečnostního gesta."</string>
diff --git a/packages/Keyguard/res/values-da/strings.xml b/packages/Keyguard/res/values-da/strings.xml
index a60a433..363cfbc 100644
--- a/packages/Keyguard/res/values-da/strings.xml
+++ b/packages/Keyguard/res/values-da/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kort er låst med PUK-koden."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kortet låses op…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lås op med mønster."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Lås op med ansigt."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lås op med pinkode."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lås op med adgangskode."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mønsterområde."</string>
diff --git a/packages/Keyguard/res/values-de/strings.xml b/packages/Keyguard/res/values-de/strings.xml
index b46284a..8c7ac55 100644
--- a/packages/Keyguard/res/values-de/strings.xml
+++ b/packages/Keyguard/res/values-de/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-Karte ist gesperrt. PUK-Eingabe erforderlich."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-Karte wird entsperrt…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Entsperrung mit Muster"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face Unlock"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Entsperrung mit PIN"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Entsperrung mit Passwort"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Bereich für Muster"</string>
diff --git a/packages/Keyguard/res/values-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml
index ff67a6f..7afc5e5 100644
--- a/packages/Keyguard/res/values-el/strings.xml
+++ b/packages/Keyguard/res/values-el/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Η κάρτα SIM είναι κλειδωμένη με κωδικό PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ξεκλείδωμα κάρτας SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ξεκλείδωμα μοτίβου."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ξεκλείδωμα κωδικού ασφαλείας"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ξεκλείδωμα κωδικού πρόσβασης."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Περιοχή μοτίβου."</string>
diff --git a/packages/Keyguard/res/values-en-rAU/strings.xml b/packages/Keyguard/res/values-en-rAU/strings.xml
index 3b1adc9..053b9d1 100644
--- a/packages/Keyguard/res/values-en-rAU/strings.xml
+++ b/packages/Keyguard/res/values-en-rAU/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
diff --git a/packages/Keyguard/res/values-en-rGB/strings.xml b/packages/Keyguard/res/values-en-rGB/strings.xml
index 3b1adc9..053b9d1 100644
--- a/packages/Keyguard/res/values-en-rGB/strings.xml
+++ b/packages/Keyguard/res/values-en-rGB/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
diff --git a/packages/Keyguard/res/values-en-rIN/strings.xml b/packages/Keyguard/res/values-en-rIN/strings.xml
index 3b1adc9..053b9d1 100644
--- a/packages/Keyguard/res/values-en-rIN/strings.xml
+++ b/packages/Keyguard/res/values-en-rIN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
diff --git a/packages/Keyguard/res/values-es-rUS/strings.xml b/packages/Keyguard/res/values-es-rUS/strings.xml
index e130c90..e5b2157 100644
--- a/packages/Keyguard/res/values-es-rUS/strings.xml
+++ b/packages/Keyguard/res/values-es-rUS/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La tarjeta SIM está bloqueada por código PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarjeta SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo por patrón"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueo facial"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo por PIN"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo por contraseña"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área de patrón"</string>
diff --git a/packages/Keyguard/res/values-es/strings.xml b/packages/Keyguard/res/values-es/strings.xml
index e7f0a50..1bd1903 100644
--- a/packages/Keyguard/res/values-es/strings.xml
+++ b/packages/Keyguard/res/values-es/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La tarjeta SIM está bloqueada con el código PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarjeta SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo por patrón"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueo facial"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo por PIN"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo por contraseña"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área de patrón"</string>
diff --git a/packages/Keyguard/res/values-et-rEE/strings.xml b/packages/Keyguard/res/values-et-rEE/strings.xml
index 3175e7b..b194924 100644
--- a/packages/Keyguard/res/values-et-rEE/strings.xml
+++ b/packages/Keyguard/res/values-et-rEE/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart on PUK-lukus."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kaardi avamine ..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mustriga avamine."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Näoga avamine."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-koodiga avamine."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parooliga avamine."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mustri ala."</string>
diff --git a/packages/Keyguard/res/values-eu-rES/strings.xml b/packages/Keyguard/res/values-eu-rES/strings.xml
index 6a18667..9e1853b 100644
--- a/packages/Keyguard/res/values-eu-rES/strings.xml
+++ b/packages/Keyguard/res/values-eu-rES/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM txartela PUK bidez blokeatuta dago."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM txartela desblokeatzen…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ereduaren bidez desblokeatzea."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Aurpegiaren bidez desblokeatzea."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN kodearen bidez desblokeatzea."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Pasahitzaren bidez desblokeatzea."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Eredua marrazteko eremua."</string>
diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml
index b0bb6e6..12c171d 100644
--- a/packages/Keyguard/res/values-fa/strings.xml
+++ b/packages/Keyguard/res/values-fa/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"‏سیم کارت با PUK قفل شده است."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"درحال بازگشایی قفل سیم کارت..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"باز کردن قفل با الگو."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"باز کردن قفل با چهره."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"باز کردن قفل با پین."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"باز کردن قفل با گذرواژه."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ناحیه الگو."</string>
diff --git a/packages/Keyguard/res/values-fi/strings.xml b/packages/Keyguard/res/values-fi/strings.xml
index 459b32b..838f65a1 100644
--- a/packages/Keyguard/res/values-fi/strings.xml
+++ b/packages/Keyguard/res/values-fi/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortti on PUK-lukittu."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kortin lukitusta poistetaan…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lukituksen poisto salasanalla."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face Unlock"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lukituksen poisto PIN-koodilla."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lukituksen poisto salasanalla."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kuvioalue."</string>
diff --git a/packages/Keyguard/res/values-fr-rCA/strings.xml b/packages/Keyguard/res/values-fr-rCA/strings.xml
index 992faf8..6d6c9a3 100644
--- a/packages/Keyguard/res/values-fr-rCA/strings.xml
+++ b/packages/Keyguard/res/values-fr-rCA/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La carte SIM est verrouillée par clé PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Déverrouillage de la carte SIM en cours…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Déverrouillage par schéma"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Déverrouillage par reconnaissance faciale"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Déverrouillage par NIP"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Déverrouillage par mot de passe"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zone du schéma"</string>
diff --git a/packages/Keyguard/res/values-fr/strings.xml b/packages/Keyguard/res/values-fr/strings.xml
index 48b5bc3..54be330 100644
--- a/packages/Keyguard/res/values-fr/strings.xml
+++ b/packages/Keyguard/res/values-fr/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La carte SIM est verrouillée par clé PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Déverrouillage de la carte SIM en cours…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Déverrouillage par schéma"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Déverrouillage par reconnaissance faciale"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Déverrouillage par code PIN"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Déverrouillage par mot de passe"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zone du schéma"</string>
diff --git a/packages/Keyguard/res/values-gl-rES/strings.xml b/packages/Keyguard/res/values-gl-rES/strings.xml
index 8b6b0ba..86e3f2f 100644
--- a/packages/Keyguard/res/values-gl-rES/strings.xml
+++ b/packages/Keyguard/res/values-gl-rES/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"A tarxeta SIM está bloqueada mediante un PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarxeta SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo mediante padrón"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueo facial"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo mediante PIN"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo mediante contrasinal"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zona do padrón"</string>
diff --git a/packages/Keyguard/res/values-hi/strings.xml b/packages/Keyguard/res/values-hi/strings.xml
index aa32759..0330ca9 100644
--- a/packages/Keyguard/res/values-hi/strings.xml
+++ b/packages/Keyguard/res/values-hi/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"सिम कार्ड PUK द्वारा लॉक किया हुआ है."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"सिम कार्ड अनलॉक हो रहा है…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"आकार अनलॉक."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलॉक."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"पिन अनलॉक."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलॉक."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"आकार क्षेत्र."</string>
diff --git a/packages/Keyguard/res/values-hr/strings.xml b/packages/Keyguard/res/values-hr/strings.xml
index cd280e3..6a32394 100644
--- a/packages/Keyguard/res/values-hr/strings.xml
+++ b/packages/Keyguard/res/values-hr/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kartica zaključana je PUK-om."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Otključavanje SIM kartice…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Uzorak za otključavanje."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Otključavanje licem."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Otključavanje PIN-om."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Otključavanje zaporkom."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Područje uzorka."</string>
diff --git a/packages/Keyguard/res/values-hu/strings.xml b/packages/Keyguard/res/values-hu/strings.xml
index ead2f87..b3018dc 100644
--- a/packages/Keyguard/res/values-hu/strings.xml
+++ b/packages/Keyguard/res/values-hu/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"A SIM kártya le van zárva a PUK kóddal."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM kártya feloldása..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Feloldás mintával"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Arcalapú feloldás"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Feloldás PIN kóddal"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Feloldás jelszóval"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mintaterület"</string>
diff --git a/packages/Keyguard/res/values-hy-rAM/strings.xml b/packages/Keyguard/res/values-hy-rAM/strings.xml
index 9b94ba0..7c2f4d8 100644
--- a/packages/Keyguard/res/values-hy-rAM/strings.xml
+++ b/packages/Keyguard/res/values-hy-rAM/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM քարտը PUK-ով կողպված է:"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM քարտը ապակողպվում է..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Սխեմայով ապակողպում:"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Դեմքով ապակողպում:"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin-ն ապակողպված է:"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Գաղտնաբառի ապակողպում:"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Սխեմայի տարածք:"</string>
diff --git a/packages/Keyguard/res/values-in/strings.xml b/packages/Keyguard/res/values-in/strings.xml
index 93484d2..60ef81f 100644
--- a/packages/Keyguard/res/values-in/strings.xml
+++ b/packages/Keyguard/res/values-in/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kartu SIM terkunci PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kartu SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci dengan pola."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Buka kunci dengan face unlock."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci dengan PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci dengan sandi."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Area pola."</string>
diff --git a/packages/Keyguard/res/values-is-rIS/strings.xml b/packages/Keyguard/res/values-is-rIS/strings.xml
index 9e88318..e43d468 100644
--- a/packages/Keyguard/res/values-is-rIS/strings.xml
+++ b/packages/Keyguard/res/values-is-rIS/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortið er PUK-læst."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Tekur SIM-kort úr lás…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Opnun með mynstri."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Opnun með andliti."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Opnun með PIN-númeri."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Opnun með aðgangsorði."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Svæði mynsturs."</string>
diff --git a/packages/Keyguard/res/values-it/strings.xml b/packages/Keyguard/res/values-it/strings.xml
index c0c690b..ce57101 100644
--- a/packages/Keyguard/res/values-it/strings.xml
+++ b/packages/Keyguard/res/values-it/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La SIM è bloccata tramite PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Sblocco scheda SIM..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Sblocco con sequenza."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Sblocco col sorriso."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Sblocco con PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Sblocco con password."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Area sequenza."</string>
diff --git a/packages/Keyguard/res/values-iw/strings.xml b/packages/Keyguard/res/values-iw/strings.xml
index f817096..7d51b71 100644
--- a/packages/Keyguard/res/values-iw/strings.xml
+++ b/packages/Keyguard/res/values-iw/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"‏כרטיס SIM נעול באמצעות PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"‏מבטל נעילה של כרטיס SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ביטול נעילה באמצעות ציור קו."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ביטול נעילה באמצעות זיהוי פנים."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"‏ביטול נעילה באמצעות מספר PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ביטול נעילה באמצעות סיסמה."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"אזור ציור קו."</string>
diff --git a/packages/Keyguard/res/values-ja/strings.xml b/packages/Keyguard/res/values-ja/strings.xml
index 5f92356..65949c6 100644
--- a/packages/Keyguard/res/values-ja/strings.xml
+++ b/packages/Keyguard/res/values-ja/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIMカードはPUKでロックされています。"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIMカードをロック解除しています…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"パターンロックを解除します。"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"フェイスアンロックを行います。"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PINロックを解除します。"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"パスワードロックを解除します。"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"パターンエリアです。"</string>
diff --git a/packages/Keyguard/res/values-ka-rGE/strings.xml b/packages/Keyguard/res/values-ka-rGE/strings.xml
index 8ed74c7..c97e32b 100644
--- a/packages/Keyguard/res/values-ka-rGE/strings.xml
+++ b/packages/Keyguard/res/values-ka-rGE/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM ბარათი დაბლოკილია PUK კოდით."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"მიმდინარეობს SIM ბარათის განბლოკვა…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"განბლოკვა ნიმუშით."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"განბლოკვა სახით"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"განბლოკვა Pin-ით."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"პაროლის განბლოკვა"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ნიმუშების სივრცე."</string>
diff --git a/packages/Keyguard/res/values-kk-rKZ/strings.xml b/packages/Keyguard/res/values-kk-rKZ/strings.xml
index 2b38a2a..fa0934d 100644
--- a/packages/Keyguard/res/values-kk-rKZ/strings.xml
+++ b/packages/Keyguard/res/values-kk-rKZ/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картасының PUK коды бекітілген."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картасының бекітпесін ашуда…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Кескін арқылы ашу."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Бет-әлпет арқылы ашу."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin арқылы ашу."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Кілтсөз арқылы ашу."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Кескін арқылы ашу аймағы."</string>
diff --git a/packages/Keyguard/res/values-km-rKH/strings.xml b/packages/Keyguard/res/values-km-rKH/strings.xml
index c278a47..3a909a9 100644
--- a/packages/Keyguard/res/values-km-rKH/strings.xml
+++ b/packages/Keyguard/res/values-km-rKH/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ស៊ីម​កាត​ជាប់​កូដ​​ PUK ។"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"កំពុង​ដោះ​សោ​ស៊ីម​កាត..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"លំនាំ​ដោះ​សោ​។"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ដោះ​សោ​តាម​​ទម្រង់​មុខ។"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"កូដ PIN ដោះ​សោ។"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ពាក្យ​សម្ងាត់​ដោះ​សោ​។"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ផ្ទៃ​លំនាំ។"</string>
diff --git a/packages/Keyguard/res/values-kn-rIN/strings.xml b/packages/Keyguard/res/values-kn-rIN/strings.xml
index a5631a6..c97040e 100644
--- a/packages/Keyguard/res/values-kn-rIN/strings.xml
+++ b/packages/Keyguard/res/values-kn-rIN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಅನ್ನು PUK-ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ನಮೂನೆ ಅನ್‌ಲಾಕ್."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ಮುಖದ ಅನ್‌ಲಾಕ್."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ಪಿನ್ ಅನ್‌ಲಾಕ್."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ಪಾಸ್‌ವರ್ಡ್ ಅನ್‌ಲಾಕ್."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ನಮೂನೆ ಪ್ರದೇಶ."</string>
diff --git a/packages/Keyguard/res/values-ko/strings.xml b/packages/Keyguard/res/values-ko/strings.xml
index 37bf289..336cfbf 100644
--- a/packages/Keyguard/res/values-ko/strings.xml
+++ b/packages/Keyguard/res/values-ko/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 카드가 PUK 잠김 상태입니다."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM 카드 잠금해제 중..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"패턴을 사용하여 잠금해제합니다."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"얼굴 인식을 사용하여 잠금해제합니다."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"핀을 사용하여 잠금해제합니다."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"비밀번호를 사용하여 잠금해제합니다."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"패턴을 그리는 부분입니다."</string>
diff --git a/packages/Keyguard/res/values-ky-rKG/strings.xml b/packages/Keyguard/res/values-ky-rKG/strings.xml
index cf7a07c..303dabd 100644
--- a/packages/Keyguard/res/values-ky-rKG/strings.xml
+++ b/packages/Keyguard/res/values-ky-rKG/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карта PUK-бөгөттө."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-карта бөгөттөн чыгарылууда…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Үлгү менен ачуу."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Жүзүнөн таануу"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Пин код менен ачуу."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Сырсөз менен ачуу."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Үлгү аймагы."</string>
diff --git a/packages/Keyguard/res/values-lo-rLA/strings.xml b/packages/Keyguard/res/values-lo-rLA/strings.xml
index bcc1cf1..8e4ae99 100644
--- a/packages/Keyguard/res/values-lo-rLA/strings.xml
+++ b/packages/Keyguard/res/values-lo-rLA/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ຊິມກາດຖືກລັອກດ້ວຍລະຫັດ PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ກຳລັງປົດລັອກຊິມກາດ..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ປົດລັອກດ້ວຍຮູບແບບ."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ປົດລັອກດ້ວຍໜ້າ."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ປົດລັອກດ້ວຍ PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ການປົດລັອກດ້ວຍລະຫັດຜ່ານ."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ພື້ນທີ່ຮູບແບບ."</string>
diff --git a/packages/Keyguard/res/values-lt/strings.xml b/packages/Keyguard/res/values-lt/strings.xml
index 3bbf54f..bde5357 100644
--- a/packages/Keyguard/res/values-lt/strings.xml
+++ b/packages/Keyguard/res/values-lt/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kortelė užrakinta PUK kodu."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Atrakinama SIM kortelė…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Atrakinimas pagal piešinį."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Atrakinimas pagal veidą."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Atrakinimas įvedus PIN kodą."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Atrakinimas įvedus slaptažodį."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Atrakinimo pagal piešinį sritis."</string>
diff --git a/packages/Keyguard/res/values-lv/strings.xml b/packages/Keyguard/res/values-lv/strings.xml
index 3b03d0d..a3c9c79 100644
--- a/packages/Keyguard/res/values-lv/strings.xml
+++ b/packages/Keyguard/res/values-lv/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karte ir bloķēta ar PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Notiek SIM kartes atbloķēšana..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Autorizācija ar kombināciju."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Autorizācija pēc sejas."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Autorizācija ar PIN kodu."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Autorizācija ar paroli."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kombinācijas ievades apgabals."</string>
diff --git a/packages/Keyguard/res/values-mk-rMK/strings.xml b/packages/Keyguard/res/values-mk-rMK/strings.xml
index d5f4a096..fa0a9b3 100644
--- a/packages/Keyguard/res/values-mk-rMK/strings.xml
+++ b/packages/Keyguard/res/values-mk-rMK/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"СИМ картичката е заклучена со ПУК."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"СИМ картичката се отклучува..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Отклучување со шема."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Отклучување со лик."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Отклучување со пин."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Отклучување со лозинка."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област за шема."</string>
diff --git a/packages/Keyguard/res/values-ml-rIN/strings.xml b/packages/Keyguard/res/values-ml-rIN/strings.xml
index 509491f..6e19eb9 100644
--- a/packages/Keyguard/res/values-ml-rIN/strings.xml
+++ b/packages/Keyguard/res/values-ml-rIN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"സിം കാർഡ് PUK-ലോക്ക് ചെയ്‌തതാണ്."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"സിം കാർഡ് അൺലോക്കുചെയ്യുന്നു…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"പാറ്റേൺ അൺലോക്ക്."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"മുഖം തിരിച്ചറിഞ്ഞുള്ള അൺലോക്ക്."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"പിൻ അൺലോക്ക്."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"പാസ്‌വേഡ് അൺലോക്ക്."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"പാറ്റേൺ ഏരിയ."</string>
diff --git a/packages/Keyguard/res/values-mn-rMN/strings.xml b/packages/Keyguard/res/values-mn-rMN/strings.xml
index 6426d9e..7be5896 100644
--- a/packages/Keyguard/res/values-mn-rMN/strings.xml
+++ b/packages/Keyguard/res/values-mn-rMN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картны PUK-түгжигдсэн."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картны түгжээг гаргаж байна…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Тайлах хээ."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Нүүрээр тайлах"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Тайлах пин."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Тайлах нууц үг."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Хээний хэсэг."</string>
diff --git a/packages/Keyguard/res/values-mr-rIN/strings.xml b/packages/Keyguard/res/values-mr-rIN/strings.xml
index 6d40958..535b91c 100644
--- a/packages/Keyguard/res/values-mr-rIN/strings.xml
+++ b/packages/Keyguard/res/values-mr-rIN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"सिम कार्ड PUK-लॉक केलेले आहे."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"सिम कार्ड अनलॉक करत आहे…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"नमुना अनलॉक."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"चेहरा अनलॉक."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"पिन अनलॉक."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"संकेतशब्द अनलॉक."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"नमुना क्षेत्र."</string>
diff --git a/packages/Keyguard/res/values-ms-rMY/strings.xml b/packages/Keyguard/res/values-ms-rMY/strings.xml
index 53151be..104f824 100644
--- a/packages/Keyguard/res/values-ms-rMY/strings.xml
+++ b/packages/Keyguard/res/values-ms-rMY/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kad SIM dikunci dengan PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kunci kad SIM..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci corak."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Wajah Buka Kunci"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci pin."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci kata laluan."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kawasan corak."</string>
diff --git a/packages/Keyguard/res/values-my-rMM/strings.xml b/packages/Keyguard/res/values-my-rMM/strings.xml
index 69498ed6..91ac647 100644
--- a/packages/Keyguard/res/values-my-rMM/strings.xml
+++ b/packages/Keyguard/res/values-my-rMM/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ဆင်းမ်ကဒ် ရဲ့ ပင်နံပါတ် ပြန်ဖွင့်သည့် ကုဒ် သော့ကျနေပါသည်"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ဆင်းမ်ကဒ် ကို သော့ဖွင့်နေပါသည်"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ပုံစံဖြင့် သော့ဖွင့်ခြင်း"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"မျက်နှာမှတ် သော့ဖွင့်ခြင်း"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ပင်နံပါတ်ဖြင့် သော့ဖွင့်ခြင်း"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"စကားဝှက်ဖြင့် သော့ဖွင့်ခြင်း"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ပုံစံနေရာ"</string>
diff --git a/packages/Keyguard/res/values-nb/strings.xml b/packages/Keyguard/res/values-nb/strings.xml
index 454729e..3f9cc4e 100644
--- a/packages/Keyguard/res/values-nb/strings.xml
+++ b/packages/Keyguard/res/values-nb/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortet er PUK-låst."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Låser opp SIM-kortet ..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mønsteropplåsning."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Ansiktsopplåsning."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-opplåsning."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Passordopplåsning."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mønsterområde."</string>
diff --git a/packages/Keyguard/res/values-ne-rNP/strings.xml b/packages/Keyguard/res/values-ne-rNP/strings.xml
index 3fc8339..7dc9c67 100644
--- a/packages/Keyguard/res/values-ne-rNP/strings.xml
+++ b/packages/Keyguard/res/values-ne-rNP/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM कार्ड PUK-लक छ।"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM कार्ड अनलक हुँदै…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ढाँचा अनलक।"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलक"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin अनलक"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलक।"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ढाँचा क्षेत्र।"</string>
diff --git a/packages/Keyguard/res/values-nl/strings.xml b/packages/Keyguard/res/values-nl/strings.xml
index dad2fff..079832a 100644
--- a/packages/Keyguard/res/values-nl/strings.xml
+++ b/packages/Keyguard/res/values-nl/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Simkaart is vergrendeld met PUK-code."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Simkaart ontgrendelen…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ontgrendeling via patroon."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Ontgrendelen via gezichtsherkenning"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ontgrendeling via pincode."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ontgrendeling via wachtwoord."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Tekengebied voor patroon."</string>
diff --git a/packages/Keyguard/res/values-pl/strings.xml b/packages/Keyguard/res/values-pl/strings.xml
index cb2b211..cb2c373 100644
--- a/packages/Keyguard/res/values-pl/strings.xml
+++ b/packages/Keyguard/res/values-pl/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Karta SIM jest zablokowana za pomocą kodu PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odblokowuję kartę SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odblokowanie wzorem."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Rozpoznanie twarzy"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odblokowanie kodem PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odblokowanie hasłem."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Obszar wzoru."</string>
diff --git a/packages/Keyguard/res/values-pt-rPT/strings.xml b/packages/Keyguard/res/values-pt-rPT/strings.xml
index dcd5ca7..fe3bc47 100644
--- a/packages/Keyguard/res/values-pt-rPT/strings.xml
+++ b/packages/Keyguard/res/values-pt-rPT/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"O cartão SIM está bloqueado por PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"A desbloquear o cartão SIM..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueio através de sequência."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueio através do rosto."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueio através de PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueio através de palavra-passe."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área da sequência."</string>
diff --git a/packages/Keyguard/res/values-pt/strings.xml b/packages/Keyguard/res/values-pt/strings.xml
index 09cbe14..a6ecc20 100644
--- a/packages/Keyguard/res/values-pt/strings.xml
+++ b/packages/Keyguard/res/values-pt/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"O cartão SIM está bloqueado pelo PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando o cartão SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueio com padrão."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Desbloqueio facial."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueio com PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueio com senha."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área do padrão."</string>
diff --git a/packages/Keyguard/res/values-ro/strings.xml b/packages/Keyguard/res/values-ro/strings.xml
index 01e5de2..14b6c8d 100644
--- a/packages/Keyguard/res/values-ro/strings.xml
+++ b/packages/Keyguard/res/values-ro/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Cardul SIM este blocat cu codul PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Se deblochează cardul SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Deblocare cu model."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Deblocare facială."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Deblocare cu PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Deblocare cu parolă."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zonă model."</string>
diff --git a/packages/Keyguard/res/values-ru/strings.xml b/packages/Keyguard/res/values-ru/strings.xml
index e0a0b92..6587eef 100644
--- a/packages/Keyguard/res/values-ru/strings.xml
+++ b/packages/Keyguard/res/values-ru/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Для разблокировки SIM-карты требуется PUK-код."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Разблокировка SIM-карты…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Графический ключ"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Фейсконтроль"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-код"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Пароль"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Область ввода графического ключа"</string>
diff --git a/packages/Keyguard/res/values-si-rLK/strings.xml b/packages/Keyguard/res/values-si-rLK/strings.xml
index 232f525..f7aa9a9 100644
--- a/packages/Keyguard/res/values-si-rLK/strings.xml
+++ b/packages/Keyguard/res/values-si-rLK/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM පත PUK අගුළු ලා ඇත."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM පත අගුළු හරිමින්..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"රටා අගුළු ඇරීම."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"මුහුණ භාවිතයෙන් අඟුළු හැරීම."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN අගුළු ඇරීම."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"මුරපද අගුළු ඇරීම."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"රටා ප්‍රදේශය."</string>
diff --git a/packages/Keyguard/res/values-sk/strings.xml b/packages/Keyguard/res/values-sk/strings.xml
index 4f60141..ae55574 100644
--- a/packages/Keyguard/res/values-sk/strings.xml
+++ b/packages/Keyguard/res/values-sk/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Karta SIM je uzamknutá pomocou kódu PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Prebieha odomykanie karty SIM..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odomknutie vzorom."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Odomknutie tvárou."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odomknutie kódom PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odomknutie heslom."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Oblasť na zadanie bezpečnostného vzoru."</string>
diff --git a/packages/Keyguard/res/values-sl/strings.xml b/packages/Keyguard/res/values-sl/strings.xml
index 673d5c9..38edbd3 100644
--- a/packages/Keyguard/res/values-sl/strings.xml
+++ b/packages/Keyguard/res/values-sl/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kartica SIM je zaklenjena s kodo PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odklepanje kartice SIM …"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odklepanje z vzorcem."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Odklepanje z obrazom."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odklepanje s kodo PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odklepanje z geslom."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Območje vzorca."</string>
diff --git a/packages/Keyguard/res/values-sq-rAL/strings.xml b/packages/Keyguard/res/values-sq-rAL/strings.xml
index d356588..f3943ea 100644
--- a/packages/Keyguard/res/values-sq-rAL/strings.xml
+++ b/packages/Keyguard/res/values-sq-rAL/strings.xml
@@ -108,6 +108,6 @@
     <string name="kg_pin_accepted" msgid="1448241673570020097">"Kodi u pranua!"</string>
     <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nuk ka shërbim."</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butoni i metodës së ndërrimit të hyrjeve."</string>
-    <string name="airplane_mode" msgid="3122107900897202805">"Modaliteti i aeroplanit"</string>
+    <string name="airplane_mode" msgid="3122107900897202805">"Modaliteti \"në aeroplan\""</string>
     <string name="fingerprint_not_recognized" msgid="2690661881608146617">"Nuk njihet"</string>
 </resources>
diff --git a/packages/Keyguard/res/values-sr/strings.xml b/packages/Keyguard/res/values-sr/strings.xml
index e888179..8431b01 100644
--- a/packages/Keyguard/res/values-sr/strings.xml
+++ b/packages/Keyguard/res/values-sr/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картица је закључана PUK кодом."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Откључавање SIM картице…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Откључавање шаблоном."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Откључавање лицем."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Откључавање PIN-ом."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Откључавање лозинком."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област шаблона."</string>
diff --git a/packages/Keyguard/res/values-sv/strings.xml b/packages/Keyguard/res/values-sv/strings.xml
index 3fa40ff..55798de 100644
--- a/packages/Keyguard/res/values-sv/strings.xml
+++ b/packages/Keyguard/res/values-sv/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortet är PUK-låst."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Låser upp SIM-kort …"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lås upp med grafiskt lösenord."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Lås upp med Ansiktslås."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lås upp med PIN-kod."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lås upp med lösenord."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Fält för grafiskt lösenord."</string>
diff --git a/packages/Keyguard/res/values-sw/strings.xml b/packages/Keyguard/res/values-sw/strings.xml
index 403d452..71689a6 100644
--- a/packages/Keyguard/res/values-sw/strings.xml
+++ b/packages/Keyguard/res/values-sw/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kadi imefungwa na PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Inafungua SIM kadi..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kufungua kwa ruwaza."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Kufungua kwa uso."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Kufungua kwa PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Kufungua kwa nenosiri."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Eneo la ruwaza."</string>
diff --git a/packages/Keyguard/res/values-ta-rIN/strings.xml b/packages/Keyguard/res/values-ta-rIN/strings.xml
index 42b00c0..8e5dd1a 100644
--- a/packages/Keyguard/res/values-ta-rIN/strings.xml
+++ b/packages/Keyguard/res/values-ta-rIN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"சிம் கார்டு PUK ஆல் பூட்டப்பட்டது."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"சிம் கார்டின் தடையைநீக்குகிறது..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"வடிவம் மூலம் திறத்தல்."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"முகத்தால் திறத்தல்."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin மூலம் திறத்தல்."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"கடவுச்சொல் மூலம் திறத்தல்."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"வடிவப் பகுதி."</string>
diff --git a/packages/Keyguard/res/values-te-rIN/strings.xml b/packages/Keyguard/res/values-te-rIN/strings.xml
index 9d9a70a..fcffa05 100644
--- a/packages/Keyguard/res/values-te-rIN/strings.xml
+++ b/packages/Keyguard/res/values-te-rIN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"సిమ్ కార్డు PUK లాక్ చేయబడింది."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"సిమ్ కార్డును అన్‌లాక్ చేస్తోంది…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"నమూనా అన్‌లాక్."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ముఖంతో అన్‌లాక్."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"పిన్ అన్‌లాక్."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"పాస్‌వర్డ్ అన్‌లాక్."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"నమూనా ప్రాంతం."</string>
diff --git a/packages/Keyguard/res/values-th/strings.xml b/packages/Keyguard/res/values-th/strings.xml
index 36e82af..04f9d01 100644
--- a/packages/Keyguard/res/values-th/strings.xml
+++ b/packages/Keyguard/res/values-th/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ซิมการ์ดถูกล็อกด้วย PUK"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"กำลังปลดล็อกซิมการ์ด…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"การปลดล็อกด้วยรูปแบบ"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"การปลดล็อกด้วยใบหน้า"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"การปลดล็อกด้วย PIN"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"การปลดล็อกด้วยรหัสผ่าน"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"พื้นที่สำหรับรูปแบบ"</string>
diff --git a/packages/Keyguard/res/values-tl/strings.xml b/packages/Keyguard/res/values-tl/strings.xml
index eabebb4..54ef1f7 100644
--- a/packages/Keyguard/res/values-tl/strings.xml
+++ b/packages/Keyguard/res/values-tl/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Naka-lock ang SIM card gamit ang PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ina-unlock ang SIM card…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pag-unlock ng pattern."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pag-unlock ng pin."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Pag-unlock ng password."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Bahagi ng pattern."</string>
diff --git a/packages/Keyguard/res/values-tr/strings.xml b/packages/Keyguard/res/values-tr/strings.xml
index 14c9d22..099a18c 100644
--- a/packages/Keyguard/res/values-tr/strings.xml
+++ b/packages/Keyguard/res/values-tr/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kart PUK kilidi devrede."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM kart kilidi açılıyor…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desenle kilit açma."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Yüzle kilit açma."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin koduyla kilit açma."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifreyle kilit açma."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Desen alanı."</string>
diff --git a/packages/Keyguard/res/values-uk/strings.xml b/packages/Keyguard/res/values-uk/strings.xml
index fdff8c6..4e3a5b0 100644
--- a/packages/Keyguard/res/values-uk/strings.xml
+++ b/packages/Keyguard/res/values-uk/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карту заблоковано PUK-кодом."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Розблокування SIM-карти…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Розблокування ключем."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Фейсконтроль"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Розблокування PIN-кодом."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Розблокування паролем."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Область ключа."</string>
diff --git a/packages/Keyguard/res/values-ur-rPK/strings.xml b/packages/Keyguard/res/values-ur-rPK/strings.xml
index 29b2d5b..d8983ea 100644
--- a/packages/Keyguard/res/values-ur-rPK/strings.xml
+++ b/packages/Keyguard/res/values-ur-rPK/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"‏SIM کارڈ PUK-مقفل ہے۔"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"‏SIM کارڈ غیر مقفل کیا جا رہا ہے…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"پیٹرن کے ذریعے غیر مقفل کریں۔"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"چہرے کے ذریعے غیر مقفل کریں۔"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"پن کے ذریعے غیر مقفل کریں۔"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"پاس ورڈ کے ذریعہ غیر مقفل کریں۔"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"پیٹرن کا علاقہ۔"</string>
@@ -76,7 +75,7 @@
     <string name="kg_invalid_puk" msgid="3638289409676051243">"‏صحیح PUK کوڈ دوبارہ درج کریں۔ بار بار کی کوششیں SIM کو مستقل طور پر غیر فعال کر دیں گی۔"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"‏PIN کوڈز مماثل نہیں ہیں"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"پیٹرن کی بہت ساری کوششیں"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"‏آپ نے اپنا PIN <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_pin_attempts_dialog_message" msgid="8276745642049502550">"‏آپ نے <xliff:g id="NUMBER_0">%d</xliff:g> بار اپنا PIN غلط طریقے سے ٹائپ کیا ہے۔ \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>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="8774056606869646621">"آپ نے ٹیبلیٹ کو غیر مقفل کرنے کیلئے <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے کوشش کی ہے۔ <xliff:g id="NUMBER_1">%d</xliff:g> مزید ناکام کوششوں کے بعد، اس ٹیبلیٹ کو دوبارہ ترتیب دے دیا جائے گا، جس سے اس کا سبھی ڈیٹا حذف ہو جائے گا۔"</string>
diff --git a/packages/Keyguard/res/values-uz-rUZ/strings.xml b/packages/Keyguard/res/values-uz-rUZ/strings.xml
index c522a46..6dace41 100644
--- a/packages/Keyguard/res/values-uz-rUZ/strings.xml
+++ b/packages/Keyguard/res/values-uz-rUZ/strings.xml
@@ -29,7 +29,7 @@
     <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_charged" msgid="3272223906073492454">"Zaryad to‘ldi"</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>
@@ -45,7 +45,6 @@
     <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_face_unlock" msgid="4817282543351718535">"Qulfni yuzni tanitib 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>
@@ -53,14 +52,14 @@
     <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">"Keyingi uyg‘otkich <xliff:g id="ALARM">%1$s</xliff:g> uchun o‘rnatildi"</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>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Chizmali parol unutilgan"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Xato chizma paroli"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Xato parol"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"Xato PIN kod"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> soniyadan so‘ng qaytadan urinib ko‘ring."</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Chizmali kalit noto‘g‘ri"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Parol noto‘g‘ri"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN-kod noto‘g‘ri"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"Chizmali parolni chizing"</string>
     <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM karta PIN kodini kiriting"</string>
     <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"“<xliff:g id="CARRIER">%1$s</xliff:g>” SIM kartasi uchun PIN kodni kiriting"</string>
@@ -76,9 +75,9 @@
     <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>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodlar bir xil emas"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Chizmali parolni ochishga juda ko‘p urinildi"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodingizni <xliff:g id="NUMBER_0">%d</xliff:g> marta xato kiritdingiz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng qaytadan urinib ko‘ring."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Parolingizni <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 qaytadan urinib ko‘ring."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Chizmali parolingizni <xliff:g id="NUMBER_0">%d</xliff:g> marta xato chizdingiz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng qaytadan urinib ko‘ring."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"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 urinib ko‘ring."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"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 urinib ko‘ring."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"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 urinib ko‘ring."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="8774056606869646621">"Siz planshetni qulfdan chiqarish uchun <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri urinish qildingiz. Agar yana <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinish qilsangiz, ushbu planshetda zavod sozlamalari qayta tiklanadi va undagi barcha ma’lumotlar ham o‘chib ketadi."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="1843331751334128428">"Siz telefonni qulfdan chiqarish uchun <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri urinish qildingiz. Agar yana <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinish qilsangiz, ushbu telefonda zavod sozlamalari qayta tiklanadi va undagi barcha ma’lumotlar ham o‘chib ketadi."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="258925501999698032">"Siz planshetni qulfdan chiqarish uchun <xliff:g id="NUMBER">%d</xliff:g> marta noto‘g‘ri urinish qildingiz. Endi, ushbu planshetda zavod sozlamalari qayta tiklanadi va undagi barcha ma’lumotlar ham o‘chib ketadi."</string>
@@ -91,8 +90,8 @@
     <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="6853071165802933545">"Siz telefonni qulfdan chiqarish uchun <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri urinish qildingiz. Agar yana <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinish qilsangiz, ishchi profil o‘chirib tashlanadi va undagi barcha profil ma’lumotlari ham o‘chib ketadi."</string>
     <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4686386497449912146">"Siz planshetni 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_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">"Chizmali parolni  <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, 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">"Chizmali parolni <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_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>
     <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>
diff --git a/packages/Keyguard/res/values-vi/strings.xml b/packages/Keyguard/res/values-vi/strings.xml
index 7e48d57..1aed81c 100644
--- a/packages/Keyguard/res/values-vi/strings.xml
+++ b/packages/Keyguard/res/values-vi/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Thẻ SIM đã bị khóa PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Đang mở khóa thẻ SIM…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mở khóa bằng hình."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Mở khóa bằng khuôn mặt."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Mở khóa bằng mã pin."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Mở khóa bằng mật khẩu."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Khu vực hình."</string>
diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml
index ee11122..c11b7a0 100644
--- a/packages/Keyguard/res/values-zh-rCN/strings.xml
+++ b/packages/Keyguard/res/values-zh-rCN/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM卡已被PUK码锁定。"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解锁SIM卡..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"图案解锁。"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"人脸解锁。"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN码解锁。"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密码解锁。"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"图案区域。"</string>
diff --git a/packages/Keyguard/res/values-zh-rHK/strings.xml b/packages/Keyguard/res/values-zh-rHK/strings.xml
index f1310b0..8bd8532 100644
--- a/packages/Keyguard/res/values-zh-rHK/strings.xml
+++ b/packages/Keyguard/res/values-zh-rHK/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 卡處於 PUK 鎖定狀態。"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解開上鎖的 SIM 卡..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"圖案解鎖。"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"臉容解鎖。"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN 解鎖。"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密碼解鎖。"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"圖案區域。"</string>
diff --git a/packages/Keyguard/res/values-zh-rTW/strings.xml b/packages/Keyguard/res/values-zh-rTW/strings.xml
index 88945e5..14dd76f 100644
--- a/packages/Keyguard/res/values-zh-rTW/strings.xml
+++ b/packages/Keyguard/res/values-zh-rTW/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 卡處於 PUK 鎖定狀態"</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解除 SIM 卡鎖定..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"圖形解鎖。"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"人臉解鎖。"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN 解鎖。"</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密碼解鎖。"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"圖形區域。"</string>
diff --git a/packages/Keyguard/res/values-zu/strings.xml b/packages/Keyguard/res/values-zu/strings.xml
index eaf6fd5..60b5e20 100644
--- a/packages/Keyguard/res/values-zu/strings.xml
+++ b/packages/Keyguard/res/values-zu/strings.xml
@@ -45,7 +45,6 @@
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Ikhadi le-SIM likhiywe nge-PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ivula ikhadi le-SIM..."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ukuvula ngephethini."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Vula ngobuso"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ukuvula ngephinikhodi."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ukuvula ngephasiwedi."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Indawo yephethini."</string>
diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml
index e060b4a..49ce427 100644
--- a/packages/Keyguard/res/values/strings.xml
+++ b/packages/Keyguard/res/values/strings.xml
@@ -96,8 +96,6 @@
     <string name="keyguard_widget_24_hours_format" translatable="false">kk\uee01mm</string>
 
     <string name="keyguard_accessibility_pattern_unlock">Pattern unlock.</string>
-    <!-- Accessibility description of the face unlock. [CHAR_LIMIT=none] -->
-    <string name="keyguard_accessibility_face_unlock">Face unlock.</string>
     <!-- Accessibility description of the pin lock. [CHAR_LIMIT=none] -->
     <string name="keyguard_accessibility_pin_unlock">Pin unlock.</string>
     <!-- Accessibility description of the password lock. [CHAR_LIMIT=none] -->
diff --git a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
index 25b1875..1cabcdfc 100644
--- a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
+++ b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Configuration;
 import android.os.PowerManager;
 import android.os.SystemClock;
 import android.os.UserHandle;
@@ -104,6 +105,12 @@
         updateEmergencyCallButton();
     }
 
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        updateEmergencyCallButton();
+    }
+
     /**
      * Shows the emergency dialer or returns the user to the existing call.
      */
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
index 845d53a..929258d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
@@ -162,7 +162,8 @@
             switchImeButton.setOnClickListener(new OnClickListener() {
                 public void onClick(View v) {
                     mCallback.userActivity(); // Leave the screen on a bit longer
-                    mImm.showInputMethodPicker();
+                    // Do not show auxiliary subtypes in password lock screen.
+                    mImm.showInputMethodPicker(false /* showAuxiliarySubtypes */);
                 }
             });
         }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
index ae4baad..4d89a8d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -260,7 +260,6 @@
         if (DEBUG) Log.d(TAG, "reportFailedPatternAttempt: #" + failedAttempts);
 
         SecurityMode mode = mSecurityModel.getSecurityMode();
-        final boolean usingPattern = mode == KeyguardSecurityModel.SecurityMode.Pattern;
         final int currentUser = KeyguardUpdateMonitor.getCurrentUser();
         final DevicePolicyManager dpm = mLockPatternUtils.getDevicePolicyManager();
         final int failedAttemptsBeforeWipe =
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java
index b5eda90..1c4b963 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java
@@ -16,6 +16,7 @@
 
 package com.android.keyguard;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Rect;
@@ -25,12 +26,15 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewHierarchyEncoder;
 import android.view.WindowManager;
 import android.widget.FrameLayout;
 import android.widget.ViewFlipper;
 
 import com.android.internal.widget.LockPatternUtils;
 
+import java.lang.Override;
+
 /**
  * Subclass of the current view flipper that allows us to overload dispatchTouchEvent() so
  * we can emulate {@link WindowManager.LayoutParams#FLAG_SLIPPERY} within a view hierarchy.
@@ -268,5 +272,14 @@
                     R.styleable.KeyguardSecurityViewFlipper_Layout_layout_maxHeight, 0);
             a.recycle();
         }
+
+        /** @hide */
+        @Override
+        protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
+            super.encodeProperties(encoder);
+
+            encoder.addProperty("layout:maxWidth", maxWidth);
+            encoder.addProperty("layout:maxHeight", maxHeight);
+        }
     }
 }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index b8d9053..d13d71c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -58,13 +58,13 @@
 import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
 import android.hardware.fingerprint.FingerprintUtils;
 import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
-import android.service.trust.TrustAgentService;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
 import android.telephony.TelephonyManager;
 import android.util.Log;
 import android.util.SparseBooleanArray;
+import android.util.SparseIntArray;
 
 import com.google.android.collect.Lists;
 
@@ -139,7 +139,7 @@
     private BatteryStatus mBatteryStatus;
 
     // Password attempts
-    private int mFailedAttempts = 0;
+    private SparseIntArray mFailedAttempts = new SparseIntArray();
 
     private boolean mClockVisible;
 
@@ -153,6 +153,7 @@
     private SubscriptionManager mSubscriptionManager;
     private List<SubscriptionInfo> mSubscriptionInfo;
     private boolean mFingerprintDetectionRunning;
+    private TrustManager mTrustManager;
 
     private final Handler mHandler = new Handler() {
         @Override
@@ -549,7 +550,7 @@
 
         @Override
         public void onAuthenticationError(int errMsgId, CharSequence errString) {
-            mHandler.obtainMessage(MSG_FINGERPRINT_ERROR, errMsgId, 0, errString);
+            mHandler.obtainMessage(MSG_FINGERPRINT_ERROR, errMsgId, 0, errString).sendToTarget();
         }
     };
     private CancellationSignal mFingerprintCancelSignal;
@@ -783,8 +784,8 @@
             e.printStackTrace();
         }
 
-        TrustManager trustManager = (TrustManager) context.getSystemService(Context.TRUST_SERVICE);
-        trustManager.registerTrustListener(this);
+        mTrustManager = (TrustManager) context.getSystemService(Context.TRUST_SERVICE);
+        mTrustManager.registerTrustListener(this);
 
         mFpm = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
         updateFingerprintListeningState();
@@ -800,7 +801,8 @@
     }
 
     private boolean shouldListenForFingerprint() {
-        return mScreenOn && mKeyguardIsVisible && !mSwitchingUser;
+        return mScreenOn && mKeyguardIsVisible && !mSwitchingUser
+                && mTrustManager.hasUserAuthenticatedSinceBoot(ActivityManager.getCurrentUser());
     }
 
     private void startListeningForFingerprint() {
@@ -1260,30 +1262,22 @@
         return mDeviceProvisioned;
     }
 
-    public int getFailedUnlockAttempts() {
-        return mFailedAttempts;
+    public void clearFailedUnlockAttempts() {
+        mFailedAttempts.delete(sCurrentUser);
     }
 
-    public void clearFailedUnlockAttempts() {
-        mFailedAttempts = 0;
+    public int getFailedUnlockAttempts() {
+        return mFailedAttempts.get(sCurrentUser, 0);
+    }
+
+    public void reportFailedUnlockAttempt() {
+        mFailedAttempts.put(sCurrentUser, getFailedUnlockAttempts() + 1);
     }
 
     public void clearFingerprintRecognized() {
         mUserFingerprintAuthenticated.clear();
     }
 
-    public void reportFailedUnlockAttempt() {
-        mFailedAttempts++;
-    }
-
-    public boolean isClockVisible() {
-        return mClockVisible;
-    }
-
-    public int getPhoneState() {
-        return mPhoneState;
-    }
-
     public boolean isSimPinVoiceSecure() {
         // TODO: only count SIMs that handle voice
         return isSimPinSecure();
diff --git a/packages/PrintSpooler/res/values-sq-rAL/strings.xml b/packages/PrintSpooler/res/values-sq-rAL/strings.xml
index 01eb719..0fbde0e 100644
--- a/packages/PrintSpooler/res/values-sq-rAL/strings.xml
+++ b/packages/PrintSpooler/res/values-sq-rAL/strings.xml
@@ -66,8 +66,8 @@
     <string name="failed_notification_title_template" msgid="2256217208186530973">"Printeri ndeshi në gabim gjatë punës: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printeri bllokoi <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780">
-      <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> punë printimi</item>
-      <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> punë printimi</item>
+      <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> punë për printim</item>
+      <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> punë për printim</item>
     </plurals>
     <string name="cancel" msgid="4373674107267141885">"Anulo"</string>
     <string name="restart" msgid="2472034227037808749">"Rifillo"</string>
diff --git a/packages/PrintSpooler/res/values/themes.xml b/packages/PrintSpooler/res/values/themes.xml
index 532b01f..db319e9 100644
--- a/packages/PrintSpooler/res/values/themes.xml
+++ b/packages/PrintSpooler/res/values/themes.xml
@@ -16,10 +16,7 @@
 
 <resources>
 
-    <style name="PrintActivity" parent="@android:style/Theme.Material">
-        <item name="android:colorPrimary">@*android:color/material_blue_grey_900</item>
-        <item name="android:colorPrimaryDark">@*android:color/material_blue_grey_950</item>
-        <item name="android:colorAccent">@*android:color/material_deep_teal_500</item>
+    <style name="PrintActivity" parent="@android:style/Theme.Material.Settings">
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:windowBackground">@android:color/transparent</item>
         <item name="android:windowContentOverlay">@null</item>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 6876222..b702e35 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -64,6 +64,8 @@
     <string name="wifi_not_in_range">Not in range</string>
     <!-- Summary for the remembered network but no internet connection was detected. -->
     <string name="wifi_no_internet">No Internet Access Detected, won\'t automatically reconnect.</string>
+    <!-- Summary for saved networks -->
+    <string name="saved_network">Saved by <xliff:g id="name">%1$s</xliff:g></string>
 
     <!-- Status message of Wi-Fi when it is connected by a Wi-Fi assistant application. [CHAR LIMIT=NONE] -->
     <string name="connected_via_wfa">Connected via Wi\u2011Fi assistant</string>
@@ -71,6 +73,13 @@
     <string name="connected_via_passpoint">Connected via %1$s</string>
     <!-- Status message of Wi-Fi when network has matching passpoint credentials. [CHAR LIMIT=NONE] -->
     <string name="available_via_passpoint">Available via %1$s</string>
+    <!-- Package name for Settings app-->
+    <string name="settings_package" translatable="false">com.android.settings</string>
+    <!-- Package name for Certinstaller app-->
+    <string name="certinstaller_package" translatable="false">com.android.certinstaller</string>
+
+    <!-- Summary for Connected wifi network without internet -->
+    <string name="wifi_connected_no_internet">Connected, no Internet</string>
 
     <!-- Bluetooth settings.  Message when a device is disconnected -->
     <string name="bluetooth_disconnected">Disconnected</string>
@@ -108,8 +117,10 @@
     <string name="bluetooth_profile_pbap_summary">Use for contact sharing</string>
     <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PAN profile (sharing this device's Internet connection). [CHAR LIMIT=40] -->
     <string name="bluetooth_profile_pan_nap">Internet connection sharing</string>
-    <!-- Bluetooth settings.  The user-visible string that is used whenever referring to the map profile. -->
+    <!-- Bluetooth settings. The user-visible string that is used whenever referring to the map profile. -->
     <string name="bluetooth_profile_map">Message Access</string>
+    <!-- Bluetooth settings. The user-visible string that is used whenever referring to the SAP profile (sharing SIM card). -->
+    <string name="bluetooth_profile_sap">SIM Access</string>
 
     <!-- Bluetooth settings.  Connection options screen.  The summary for the A2DP checkbox preference when A2DP is connected. -->
     <string name="bluetooth_a2dp_profile_summary_connected">Connected to media audio</string>
@@ -119,6 +130,8 @@
     <string name="bluetooth_opp_profile_summary_connected">Connected to file transfer server</string>
     <!-- Bluetooth settings.  Connection options screen.  The summary for the map checkbox preference when map is connected. -->
     <string name="bluetooth_map_profile_summary_connected">Connected to map</string>
+    <!-- Bluetooth settings.  Connection options screen.  The summary for the sap checkbox preference when SAP is connected. -->
+    <string name="bluetooth_sap_profile_summary_connected">Connected to SAP</string>
     <!-- Bluetooth settings.  Connection options screen.  The summary for the OPP checkbox preference when OPP is not connected. -->
     <string name="bluetooth_opp_profile_summary_not_connected">Not connected to file transfer server</string>
     <!-- Bluetooth settings. Connection options screen. The summary for the HID checkbox preference when HID is connected. -->
@@ -134,6 +147,8 @@
     <string name="bluetooth_pan_profile_summary_use_for">Use for Internet access</string>
     <!-- Bluetooth settings. Connection options screen.  The summary for the map checkbox preference that describes how checking it will set the map profile as preferred. -->
     <string name="bluetooth_map_profile_summary_use_for">Use for map</string>
+    <!-- Bluetooth settings.  Connection options screen.  The summary for the sap checkbox preference that describes how checking it will set the sap profile as preferred. -->
+    <string name="bluetooth_sap_profile_summary_use_for">Use for SIM access</string>
     <!-- Bluetooth settings.  Connection options screen.  The summary for the A2DP checkbox preference that describes how checking it will set the A2DP profile as preferred. -->
     <string name="bluetooth_a2dp_profile_summary_use_for">Use for media audio</string>
     <!-- Bluetooth settings.  Connection options screen.  The summary for the headset checkbox preference that describes how checking it will set the headset profile as preferred. -->
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index dd2368f..7534b8e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -67,10 +67,6 @@
 
     private boolean mVisible;
 
-    private int mPhonebookPermissionChoice;
-
-    private int mMessagePermissionChoice;
-
     private int mMessageRejectionCount;
 
     private final Collection<Callback> mCallbacks = new ArrayList<Callback>();
@@ -556,6 +552,7 @@
             mConnectAfterPairing = false;  // cancel auto-connect
             setPhonebookPermissionChoice(ACCESS_UNKNOWN);
             setMessagePermissionChoice(ACCESS_UNKNOWN);
+            setSimPermissionChoice(ACCESS_UNKNOWN);
             mMessageRejectionCount = 0;
             saveMessageRejectionCount();
         }
@@ -732,6 +729,26 @@
         mDevice.setMessageAccessPermission(permission);
     }
 
+    public int getSimPermissionChoice() {
+        int permission = mDevice.getSimAccessPermission();
+        if (permission == BluetoothDevice.ACCESS_ALLOWED) {
+            return ACCESS_ALLOWED;
+        } else if (permission == BluetoothDevice.ACCESS_REJECTED) {
+            return ACCESS_REJECTED;
+        }
+        return ACCESS_UNKNOWN;
+    }
+
+    void setSimPermissionChoice(int permissionChoice) {
+        int permission = BluetoothDevice.ACCESS_UNKNOWN;
+        if (permissionChoice == ACCESS_ALLOWED) {
+            permission = BluetoothDevice.ACCESS_ALLOWED;
+        } else if (permissionChoice == ACCESS_REJECTED) {
+            permission = BluetoothDevice.ACCESS_REJECTED;
+        }
+        mDevice.setSimAccessPermission(permission);
+    }
+
     // Migrates data from old data store (in Settings app's shared preferences) to new (in Bluetooth
     // app's shared preferences).
     private void migrateMessagePermissionChoice() {
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/SapProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/SapProfile.java
new file mode 100644
index 0000000..25c53e6
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/SapProfile.java
@@ -0,0 +1,216 @@
+/*
+ * 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.settingslib.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothClass;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothSap;
+import android.bluetooth.BluetoothProfile;
+import android.bluetooth.BluetoothUuid;
+import android.content.Context;
+import android.os.ParcelUuid;
+import android.util.Log;
+
+import com.android.settingslib.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * SapProfile handles Bluetooth SAP profile.
+ */
+final class SapProfile implements LocalBluetoothProfile {
+    private static final String TAG = "SapProfile";
+    private static boolean V = true;
+
+    private BluetoothSap mService;
+    private boolean mIsProfileReady;
+
+    private final LocalBluetoothAdapter mLocalAdapter;
+    private final CachedBluetoothDeviceManager mDeviceManager;
+    private final LocalBluetoothProfileManager mProfileManager;
+
+    static final ParcelUuid[] UUIDS = {
+        BluetoothUuid.SAP,
+    };
+
+    static final String NAME = "SAP";
+
+    // Order of this profile in device profiles list
+    private static final int ORDINAL = 10;
+
+    // These callbacks run on the main thread.
+    private final class SapServiceListener
+            implements BluetoothProfile.ServiceListener {
+
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            if (V) Log.d(TAG,"Bluetooth service connected");
+            mService = (BluetoothSap) proxy;
+            // We just bound to the service, so refresh the UI for any connected SAP devices.
+            List<BluetoothDevice> deviceList = mService.getConnectedDevices();
+            while (!deviceList.isEmpty()) {
+                BluetoothDevice nextDevice = deviceList.remove(0);
+                CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice);
+                // we may add a new device here, but generally this should not happen
+                if (device == null) {
+                    Log.w(TAG, "SapProfile found new device: " + nextDevice);
+                    device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice);
+                }
+                device.onProfileStateChanged(SapProfile.this,
+                        BluetoothProfile.STATE_CONNECTED);
+                device.refresh();
+            }
+
+            mProfileManager.callServiceConnectedListeners();
+            mIsProfileReady=true;
+        }
+
+        public void onServiceDisconnected(int profile) {
+            if (V) Log.d(TAG,"Bluetooth service disconnected");
+            mProfileManager.callServiceDisconnectedListeners();
+            mIsProfileReady=false;
+        }
+    }
+
+    public boolean isProfileReady() {
+        return mIsProfileReady;
+    }
+
+    SapProfile(Context context, LocalBluetoothAdapter adapter,
+            CachedBluetoothDeviceManager deviceManager,
+            LocalBluetoothProfileManager profileManager) {
+        mLocalAdapter = adapter;
+        mDeviceManager = deviceManager;
+        mProfileManager = profileManager;
+        mLocalAdapter.getProfileProxy(context, new SapServiceListener(),
+                BluetoothProfile.SAP);
+    }
+
+    public boolean isConnectable() {
+        return true;
+    }
+
+    public boolean isAutoConnectable() {
+        return true;
+    }
+
+    public boolean connect(BluetoothDevice device) {
+        if (mService == null) return false;
+        List<BluetoothDevice> sinks = mService.getConnectedDevices();
+        if (sinks != null) {
+            for (BluetoothDevice sink : sinks) {
+                mService.disconnect(sink);
+            }
+        }
+        return mService.connect(device);
+    }
+
+    public boolean disconnect(BluetoothDevice device) {
+        if (mService == null) return false;
+        List<BluetoothDevice> deviceList = mService.getConnectedDevices();
+        if (!deviceList.isEmpty() && deviceList.get(0).equals(device)) {
+            if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) {
+                mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
+            }
+            return mService.disconnect(device);
+        } else {
+            return false;
+        }
+    }
+
+    public int getConnectionStatus(BluetoothDevice device) {
+        if (mService == null) return BluetoothProfile.STATE_DISCONNECTED;
+        List<BluetoothDevice> deviceList = mService.getConnectedDevices();
+
+        return !deviceList.isEmpty() && deviceList.get(0).equals(device)
+                ? mService.getConnectionState(device)
+                : BluetoothProfile.STATE_DISCONNECTED;
+    }
+
+    public boolean isPreferred(BluetoothDevice device) {
+        if (mService == null) return false;
+        return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF;
+    }
+
+    public int getPreferred(BluetoothDevice device) {
+        if (mService == null) return BluetoothProfile.PRIORITY_OFF;
+        return mService.getPriority(device);
+    }
+
+    public void setPreferred(BluetoothDevice device, boolean preferred) {
+        if (mService == null) return;
+        if (preferred) {
+            if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) {
+                mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
+            }
+        } else {
+            mService.setPriority(device, BluetoothProfile.PRIORITY_OFF);
+        }
+    }
+
+    public List<BluetoothDevice> getConnectedDevices() {
+        if (mService == null) return new ArrayList<BluetoothDevice>(0);
+        return mService.getDevicesMatchingConnectionStates(
+              new int[] {BluetoothProfile.STATE_CONNECTED,
+                         BluetoothProfile.STATE_CONNECTING,
+                         BluetoothProfile.STATE_DISCONNECTING});
+    }
+
+    public String toString() {
+        return NAME;
+    }
+
+    public int getOrdinal() {
+        return ORDINAL;
+    }
+
+    public int getNameResource(BluetoothDevice device) {
+        return R.string.bluetooth_profile_sap;
+    }
+
+    public int getSummaryResourceForDevice(BluetoothDevice device) {
+        int state = getConnectionStatus(device);
+        switch (state) {
+            case BluetoothProfile.STATE_DISCONNECTED:
+                return R.string.bluetooth_sap_profile_summary_use_for;
+
+            case BluetoothProfile.STATE_CONNECTED:
+                return R.string.bluetooth_sap_profile_summary_connected;
+
+            default:
+                return Utils.getConnectionStateSummary(state);
+        }
+    }
+
+    public int getDrawableResource(BluetoothClass btClass) {
+        return R.drawable.ic_bt_cellphone;
+    }
+
+    protected void finalize() {
+        if (V) Log.d(TAG, "finalize()");
+        if (mService != null) {
+            try {
+                BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.SAP,
+                                                                       mService);
+                mService = null;
+            }catch (Throwable t) {
+                Log.w(TAG, "Error cleaning up SAP proxy", t);
+            }
+        }
+    }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java
index 1cf7248..c81f22a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java
@@ -32,7 +32,6 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.storage.StorageVolume;
@@ -349,6 +348,11 @@
         final Message finished = mMeasurementHandler.obtainMessage(MeasurementHandler.MSG_COMPLETED,
                 details);
 
+        if (mVolume == null || !mVolume.isMountedReadable()) {
+            finished.sendToTarget();
+            return;
+        }
+
         if (mSharedVolume != null && mSharedVolume.isMountedReadable()) {
             final File basePath = mSharedVolume.getPathForUser(currentUser);
 
@@ -375,8 +379,10 @@
         }
 
         final File file = mVolume.getPath();
-        details.totalSize = file.getTotalSpace();
-        details.availSize = file.getFreeSpace();
+        if (file != null) {
+            details.totalSize = file.getTotalSpace();
+            details.availSize = file.getFreeSpace();
+        }
 
         // Measure all apps hosted on this volume for all users
         if (mVolume.getType() == VolumeInfo.TYPE_PRIVATE) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 2fde4f9..7eaa728 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -17,9 +17,13 @@
 package com.android.settingslib.wifi;
 
 import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
 import android.net.NetworkInfo;
 import android.net.NetworkInfo.DetailedState;
 import android.net.NetworkInfo.State;
+import android.net.wifi.IWifiManager;
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiConfiguration.KeyMgmt;
@@ -27,8 +31,16 @@
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.util.Log;
 import android.util.LruCache;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.os.UserHandle;
+import android.os.RemoteException;
+import android.app.AppGlobals;
 
 import com.android.settingslib.R;
 
@@ -282,12 +294,28 @@
     }
 
     public String getSavedNetworkSummary() {
-        // Update to new summary
-        if (mConfig != null && mConfig.isPasspoint()) {
-            return "";
-        } else {
-            return getSettingsSummary();
+        if (mConfig != null) {
+            PackageManager pm = mContext.getPackageManager();
+            String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID);
+            int userId = UserHandle.getUserId(mConfig.creatorUid);
+            ApplicationInfo appInfo = null;
+            if (mConfig.creatorName != null && mConfig.creatorName.equals(systemName)) {
+                appInfo = mContext.getApplicationInfo();
+            } else {
+                try {
+                    IPackageManager ipm = AppGlobals.getPackageManager();
+                    appInfo = ipm.getApplicationInfo(mConfig.creatorName, 0 /* flags */, userId);
+                } catch (RemoteException rex) {
+                }
+            }
+            if (appInfo != null &&
+                    !appInfo.packageName.equals(mContext.getString(R.string.settings_package)) &&
+                    !appInfo.packageName.equals(
+                    mContext.getString(R.string.certinstaller_package))) {
+                return mContext.getString(R.string.saved_network, appInfo.loadLabel(pm));
+            }
         }
+        return "";
     }
 
     public String getSummary() {
@@ -700,6 +728,25 @@
             }
         }
 
+        // Case when there is wifi connected without internet connectivity.
+        final ConnectivityManager cm = (ConnectivityManager)
+                context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        if (state == DetailedState.CONNECTED) {
+            IWifiManager wifiManager = IWifiManager.Stub.asInterface(
+                    ServiceManager.getService(Context.WIFI_SERVICE));
+            Network nw;
+
+            try {
+                nw = wifiManager.getCurrentNetwork();
+            } catch (RemoteException e) {
+                nw = null;
+            }
+            NetworkCapabilities nc = cm.getNetworkCapabilities(nw);
+            if (nc != null && !nc.hasCapability(nc.NET_CAPABILITY_VALIDATED)) {
+                return context.getString(R.string.wifi_connected_no_internet);
+            }
+        }
+
         String[] formats = context.getResources().getStringArray((ssid == null)
                 ? R.array.wifi_status : R.array.wifi_status_with_ssid);
         int index = state.ordinal();
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 09e6912..28fa8fb 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -26,6 +26,7 @@
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.widget.Toast;
 
@@ -63,10 +64,12 @@
     private final boolean mIncludeScans;
     private final boolean mIncludePasspoints;
 
+    private final MainHandler mMainHandler;
+    private final WorkHandler mWorkHandler;
+
     private boolean mSavedNetworksExist;
     private boolean mRegistered;
     private ArrayList<AccessPoint> mAccessPoints = new ArrayList<>();
-    private ArrayList<AccessPoint> mCachedAccessPoints = new ArrayList<>();
 
     private NetworkInfo mLastNetworkInfo;
     private WifiInfo mLastInfo;
@@ -74,23 +77,38 @@
     @VisibleForTesting
     Scanner mScanner;
 
-    public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved,
-                       boolean includeScans) {
-        this(context, wifiListener, includeSaved, includeScans, false);
+    public WifiTracker(Context context, WifiListener wifiListener,
+            boolean includeSaved, boolean includeScans) {
+        this(context, wifiListener, null, includeSaved, includeScans);
     }
-    public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved,
-            boolean includeScans, boolean includePasspoints) {
-        this(context, wifiListener, includeSaved, includeScans, includePasspoints,
+
+    public WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper,
+            boolean includeSaved, boolean includeScans) {
+        this(context, wifiListener, workerLooper, includeSaved, includeScans, false);
+    }
+
+    public WifiTracker(Context context, WifiListener wifiListener,
+            boolean includeSaved, boolean includeScans, boolean includePasspoints) {
+        this(context, wifiListener, null, includeSaved, includeScans, includePasspoints);
+    }
+
+    public WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper,
+            boolean includeSaved, boolean includeScans, boolean includePasspoints) {
+        this(context, wifiListener, workerLooper, includeSaved, includeScans, includePasspoints,
                 (WifiManager) context.getSystemService(Context.WIFI_SERVICE));
     }
 
     @VisibleForTesting
-    WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved,
-            boolean includeScans, boolean includePasspoints, WifiManager wifiManager) {
+    WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper,
+            boolean includeSaved, boolean includeScans, boolean includePasspoints,
+            WifiManager wifiManager) {
         if (!includeSaved && !includeScans) {
             throw new IllegalArgumentException("Must include either saved or scans");
         }
         mContext = context;
+        mMainHandler = new MainHandler();
+        mWorkHandler = new WorkHandler(
+                workerLooper != null ? workerLooper : Looper.myLooper());
         mWifiManager = wifiManager;
         mIncludeSaved = includeSaved;
         mIncludeScans = includeScans;
@@ -147,7 +165,7 @@
         if (mWifiManager.isWifiEnabled()) {
             mScanner.resume();
         }
-        updateAccessPoints();
+        mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
     }
 
     /**
@@ -213,16 +231,14 @@
 
     private void updateAccessPoints() {
         // Swap the current access points into a cached list.
-        ArrayList<AccessPoint> tmpSwp = mAccessPoints;
-        mAccessPoints = mCachedAccessPoints;
-        mCachedAccessPoints = tmpSwp;
+        ArrayList<AccessPoint> cachedAccessPoints = new ArrayList<>(mAccessPoints);
+        ArrayList<AccessPoint> accessPoints = new ArrayList<>();
+
         // Clear out the configs so we don't think something is saved when it isn't.
-        for (AccessPoint accessPoint : mCachedAccessPoints) {
+        for (AccessPoint accessPoint : cachedAccessPoints) {
             accessPoint.clearConfig();
         }
 
-        mAccessPoints.clear();
-
         /** Lookup table to more quickly update AccessPoints by only considering objects with the
          * correct SSID.  Maps SSID -> List of AccessPoints with the given SSID.  */
         Multimap<String, AccessPoint> apMap = new Multimap<String, AccessPoint>();
@@ -238,7 +254,7 @@
                 if (config.selfAdded && config.numAssociation == 0) {
                     continue;
                 }
-                AccessPoint accessPoint = getCachedOrCreate(config);
+                AccessPoint accessPoint = getCachedOrCreate(config, cachedAccessPoints);
                 if (mLastInfo != null && mLastNetworkInfo != null) {
                     if (config.isPasspoint() == false) {
                         accessPoint.update(mLastInfo, mLastNetworkInfo);
@@ -246,7 +262,7 @@
                 }
                 if (mIncludeSaved) {
                     if (!config.isPasspoint() || mIncludePasspoints)
-                        mAccessPoints.add(accessPoint);
+                        accessPoints.add(accessPoint);
 
                     if (config.isPasspoint() == false) {
                         apMap.put(accessPoint.getSsid(), accessPoint);
@@ -254,7 +270,7 @@
                 } else {
                     // If we aren't using saved networks, drop them into the cache so that
                     // we have access to their saved info.
-                    mCachedAccessPoints.add(accessPoint);
+                    cachedAccessPoints.add(accessPoint);
                 }
             }
         }
@@ -276,7 +292,7 @@
                     }
                 }
                 if (!found && mIncludeScans) {
-                    AccessPoint accessPoint = getCachedOrCreate(result);
+                    AccessPoint accessPoint = getCachedOrCreate(result, cachedAccessPoints);
                     if (mLastInfo != null && mLastNetworkInfo != null) {
                         accessPoint.update(mLastInfo, mLastNetworkInfo);
                     }
@@ -296,24 +312,23 @@
                         accessPoint.update(connectionConfig);
                     }
 
-                    mAccessPoints.add(accessPoint);
+                    accessPoints.add(accessPoint);
                     apMap.put(accessPoint.getSsid(), accessPoint);
                 }
             }
         }
 
         // Pre-sort accessPoints to speed preference insertion
-        Collections.sort(mAccessPoints);
-        if (mListener != null) {
-            mListener.onAccessPointsChanged();
-        }
+        Collections.sort(accessPoints);
+        mAccessPoints = accessPoints;
+        mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED);
     }
 
-    private AccessPoint getCachedOrCreate(ScanResult result) {
-        final int N = mCachedAccessPoints.size();
+    private AccessPoint getCachedOrCreate(ScanResult result, ArrayList<AccessPoint> cache) {
+        final int N = cache.size();
         for (int i = 0; i < N; i++) {
-            if (mCachedAccessPoints.get(i).matches(result)) {
-                AccessPoint ret = mCachedAccessPoints.remove(i);
+            if (cache.get(i).matches(result)) {
+                AccessPoint ret = cache.remove(i);
                 ret.update(result);
                 return ret;
             }
@@ -321,11 +336,11 @@
         return new AccessPoint(mContext, result);
     }
 
-    private AccessPoint getCachedOrCreate(WifiConfiguration config) {
-        final int N = mCachedAccessPoints.size();
+    private AccessPoint getCachedOrCreate(WifiConfiguration config, ArrayList<AccessPoint> cache) {
+        final int N = cache.size();
         for (int i = 0; i < N; i++) {
-            if (mCachedAccessPoints.get(i).matches(config)) {
-                AccessPoint ret = mCachedAccessPoints.remove(i);
+            if (cache.get(i).matches(config)) {
+                AccessPoint ret = cache.remove(i);
                 ret.loadConfig(config);
                 return ret;
             }
@@ -360,9 +375,7 @@
         }
         if (reorder) {
             Collections.sort(mAccessPoints);
-            if (mListener != null) {
-                mListener.onAccessPointsChanged();
-            }
+            mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED);
         }
     }
 
@@ -380,15 +393,13 @@
                 mScanner.pause();
             }
         }
-        if (mListener != null) {
-            mListener.onWifiStateChanged(state);
-        }
+        mMainHandler.obtainMessage(MainHandler.MSG_WIFI_STATE_CHANGED, state, 0).sendToTarget();
     }
 
     public static List<AccessPoint> getCurrentAccessPoints(Context context, boolean includeSaved,
             boolean includeScans, boolean includePasspoints) {
         WifiTracker tracker = new WifiTracker(context,
-                null, includeSaved, includeScans, includePasspoints);
+                null, null, includeSaved, includeScans, includePasspoints);
         tracker.forceUpdate();
         return tracker.getAccessPoints();
     }
@@ -404,22 +415,68 @@
             } else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action) ||
                     WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION.equals(action) ||
                     WifiManager.LINK_CONFIGURATION_CHANGED_ACTION.equals(action)) {
-                updateAccessPoints();
+                mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
             } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
                 NetworkInfo info = (NetworkInfo) intent.getParcelableExtra(
                         WifiManager.EXTRA_NETWORK_INFO);
                 mConnected.set(info.isConnected());
-                if (mListener != null) {
-                    mListener.onConnectedChanged();
-                }
-                updateAccessPoints();
-                updateNetworkInfo(info);
+
+                mMainHandler.sendEmptyMessage(MainHandler.MSG_CONNECTED_CHANGED);
+
+                mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
+                mWorkHandler.obtainMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO, info)
+                        .sendToTarget();
             } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {
-                updateNetworkInfo(null);
+                mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO);
             }
         }
     };
 
+    private final class MainHandler extends Handler {
+        private static final int MSG_CONNECTED_CHANGED = 0;
+        private static final int MSG_WIFI_STATE_CHANGED = 1;
+        private static final int MSG_ACCESS_POINT_CHANGED = 2;
+
+        @Override
+        public void handleMessage(Message msg) {
+            if (mListener == null) {
+                return;
+            }
+            switch (msg.what) {
+                case MSG_CONNECTED_CHANGED:
+                    mListener.onConnectedChanged();
+                    break;
+                case MSG_WIFI_STATE_CHANGED:
+                    mListener.onWifiStateChanged(msg.arg1);
+                    break;
+                case MSG_ACCESS_POINT_CHANGED:
+                    mListener.onAccessPointsChanged();
+                    break;
+            }
+        }
+    }
+
+    private final class WorkHandler extends Handler {
+        private static final int MSG_UPDATE_ACCESS_POINTS = 0;
+        private static final int MSG_UPDATE_NETWORK_INFO = 1;
+
+        public WorkHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_UPDATE_ACCESS_POINTS:
+                    updateAccessPoints();
+                    break;
+                case MSG_UPDATE_NETWORK_INFO:
+                    updateNetworkInfo((NetworkInfo) msg.obj);
+                    break;
+            }
+        }
+    }
+
     @VisibleForTesting
     class Scanner extends Handler {
         private static final int MSG_SCAN = 0;
diff --git a/packages/SettingsProvider/res/values-sq-rAL/defaults.xml b/packages/SettingsProvider/res/values-sq-rAL/defaults.xml
new file mode 100644
index 0000000..22443a5
--- /dev/null
+++ b/packages/SettingsProvider/res/values-sq-rAL/defaults.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
+    <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
+</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 1953e75..5f5d61e 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -35,6 +35,7 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteQueryBuilder;
 import android.hardware.camera2.utils.ArrayUtils;
+import android.media.AudioManager;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
@@ -52,9 +53,11 @@
 import android.util.ArraySet;
 import android.util.Slog;
 import android.util.SparseArray;
+
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.content.PackageMonitor;
 import com.android.internal.os.BackgroundThread;
+
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileNotFoundException;
@@ -1788,7 +1791,7 @@
         }
 
         private final class UpgradeController {
-            private static final int SETTINGS_VERSION = 118;
+            private static final int SETTINGS_VERSION = 119;
 
             private final int mUserId;
 
@@ -1891,6 +1894,20 @@
 
                 int currentVersion = oldVersion;
 
+                // v119: Reset zen + ringer mode.
+                if (currentVersion == 118) {
+                    if (userId == UserHandle.USER_OWNER) {
+                        final SettingsState globalSettings = getGlobalSettingsLocked();
+                        globalSettings.updateSettingLocked(Settings.Global.ZEN_MODE,
+                                Integer.toString(Settings.Global.ZEN_MODE_OFF),
+                                SettingsState.SYSTEM_PACKAGE_NAME);
+                        globalSettings.updateSettingLocked(Settings.Global.MODE_RINGER,
+                                Integer.toString(AudioManager.RINGER_MODE_NORMAL),
+                                SettingsState.SYSTEM_PACKAGE_NAME);
+                    }
+                    currentVersion = 119;
+                }
+
                 // vXXX: Add new settings above this point.
 
                 // Return the current version.
diff --git a/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java
index 89f84fc..e453cf5 100644
--- a/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java
+++ b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java
@@ -8,11 +8,11 @@
 import android.os.ParcelFileDescriptor;
 import android.os.storage.StorageManager;
 import android.os.storage.StorageVolume;
+import android.util.ArraySet;
 import android.util.Slog;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.HashSet;
 
 public class SharedStorageAgent extends FullBackupAgent {
     static final String TAG = "SharedStorageAgent";
@@ -42,7 +42,7 @@
             if (DEBUG) Slog.i(TAG, "Backing up " + mVolumes.length + " shared volumes");
             // Ignore all apps' getExternalFilesDir() content; it is backed up as part of
             // each app-specific payload.
-            HashSet<String> externalFilesDirFilter = new HashSet<String>();
+            ArraySet<String> externalFilesDirFilter = new ArraySet();
             final File externalAndroidRoot = new File(Environment.getExternalStorageDirectory(),
                     Environment.DIRECTORY_ANDROID);
             externalFilesDirFilter.add(externalAndroidRoot.getCanonicalPath());
@@ -53,7 +53,9 @@
                 //     shared/N/path/to/file
                 // The restore will then extract to the given volume
                 String domain = FullBackup.SHARED_PREFIX + i;
-                fullBackupFileTree(null, domain, v.getPath(), externalFilesDirFilter, output);
+                fullBackupFileTree(null, domain, v.getPath(),
+                        null /* manifestExcludes */,
+                        externalFilesDirFilter /* systemExcludes */, output);
             }
         }
     }
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 5b4b4fd..dda9358 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -121,7 +121,7 @@
 
         <activity
             android:name=".BugreportWarningActivity"
-            android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
+            android:theme="@*android:style/Theme.Material.DayNight.Dialog.Alert"
             android:finishOnCloseSystemDialogs="true"
             android:excludeFromRecents="true"
             android:exported="false" />
diff --git a/packages/SystemUI/res/drawable/ic_mic_26dp.xml b/packages/SystemUI/res/drawable/ic_mic_26dp.xml
new file mode 100644
index 0000000..83e4ba8
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_mic_26dp.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="26.0dp"
+        android:height="26.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M12.000000,14.000000c1.700000,0.000000 3.000000,-1.300000 3.000000,-3.000000l0.000000,-6.000000c0.000000,-1.700000 -1.300000,-3.000000 -3.000000,-3.000000c-1.700000,0.000000 -3.000000,1.300000 -3.000000,3.000000l0.000000,6.000000C9.000000,12.700000 10.300000,14.000000 12.000000,14.000000zM17.299999,11.000000c0.000000,3.000000 -2.500000,5.100000 -5.300000,5.100000c-2.800000,0.000000 -5.300000,-2.100000 -5.300000,-5.100000L5.000000,11.000000c0.000000,3.400000 2.700000,6.200000 6.000000,6.700000L11.000000,21.000000l2.000000,0.000000l0.000000,-3.300000c3.300000,-0.500000 6.000000,-3.300000 6.000000,-6.700000L17.299999,11.000001z"
+        android:fillColor="#FF000000"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/segmented_buttons_background.xml b/packages/SystemUI/res/drawable/segmented_buttons_background.xml
new file mode 100644
index 0000000..b243dc7c
--- /dev/null
+++ b/packages/SystemUI/res/drawable/segmented_buttons_background.xml
@@ -0,0 +1,22 @@
+<!--
+     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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+
+      <corners android:radius="@dimen/borderless_button_radius" />
+
+      <solid android:color="@color/segmented_buttons_background" />
+
+</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/stat_sys_ethernet.xml b/packages/SystemUI/res/drawable/stat_sys_ethernet.xml
new file mode 100644
index 0000000..e765320
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_ethernet.xml
@@ -0,0 +1,30 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:autoMirrored="true"
+        android:width="18.77dp"
+        android:height="17dp"
+        android:viewportWidth="53.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="?attr/singleToneColor"
+        android:pathData="M15.54 13.52l-3.08-2.55L1.64 24l10.82 13.04 3.08-2.55L6.84 24l8.7-10.48zM14 26h4v-4h-4v4zm20-4h-4v4h4v-4zm-12 4h4v-4h-4v4zm13.54-15.04l-3.08 2.55L41.16 24l-8.7 10.48 3.08 2.55L46.36 24 35.54 10.96z"/>
+    <path
+        android:fillColor="?attr/singleToneColor"
+        android:pathData="M49.000000,40.000000l4.000000,0.000000l0.000000,4.000000l-4.000000,0.000000z"/>
+    <path
+        android:fillColor="?attr/singleToneColor"
+        android:pathData="M49.000000,20.000000l4.000000,0.000000l0.000000,16.100000l-4.000000,0.000000z"/></vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_ethernet_fully.xml b/packages/SystemUI/res/drawable/stat_sys_ethernet_fully.xml
new file mode 100644
index 0000000..b7b154c
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_ethernet_fully.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="18.77dp"
+        android:height="17dp"
+        android:viewportWidth="53.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="?attr/singleToneColor"
+        android:pathData="M15.54 13.52l-3.08-2.55L1.64 24l10.82 13.04 3.08-2.55L6.84 24l8.7-10.48zM14 26h4v-4h-4v4zm20-4h-4v4h4v-4zm-12 4h4v-4h-4v4zm13.54-15.04l-3.08 2.55L41.16 24l-8.7 10.48 3.08 2.55L46.36 24 35.54 10.96z"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/zen_introduction_message_background.xml b/packages/SystemUI/res/drawable/zen_introduction_message_background.xml
new file mode 100644
index 0000000..352fb57
--- /dev/null
+++ b/packages/SystemUI/res/drawable/zen_introduction_message_background.xml
@@ -0,0 +1,22 @@
+<!--
+     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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+
+      <corners android:radius="@dimen/borderless_button_radius" />
+
+      <solid android:color="@color/zen_introduction_message_background" />
+
+</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
index 1057464..5d0367e 100644
--- a/packages/SystemUI/res/layout/keyguard_bottom_area.xml
+++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
@@ -52,7 +52,7 @@
         android:contentDescription="@string/accessibility_camera_button" />
 
     <com.android.systemui.statusbar.KeyguardAffordanceView
-        android:id="@+id/phone_button"
+        android:id="@+id/left_button"
         android:layout_height="@dimen/keyguard_affordance_height"
         android:layout_width="@dimen/keyguard_affordance_width"
         android:layout_gravity="bottom|start"
diff --git a/packages/SystemUI/res/layout/segmented_button.xml b/packages/SystemUI/res/layout/segmented_button.xml
index b7a7932..9e1f373 100644
--- a/packages/SystemUI/res/layout/segmented_button.xml
+++ b/packages/SystemUI/res/layout/segmented_button.xml
@@ -25,4 +25,4 @@
     android:textColor="@color/segmented_button_text_selector"
     android:background="@drawable/btn_borderless_rect"
     android:textAppearance="@style/TextAppearance.QS.SegmentedButton"
-    android:minHeight="64dp" />
+    android:minHeight="72dp" />
diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml
index c9edef8..69dcad2 100644
--- a/packages/SystemUI/res/layout/signal_cluster_view.xml
+++ b/packages/SystemUI/res/layout/signal_cluster_view.xml
@@ -34,6 +34,25 @@
         android:src="@drawable/stat_sys_vpn_ic"
         />
     <FrameLayout
+        android:id="@+id/ethernet_combo"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        >
+        <com.android.systemui.statusbar.AlphaOptimizedImageView
+            android:theme="@style/DualToneLightTheme"
+            android:id="@+id/ethernet"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            />
+        <com.android.systemui.statusbar.AlphaOptimizedImageView
+            android:theme="@style/DualToneDarkTheme"
+            android:id="@+id/ethernet_dark"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:alpha="0.0"
+            />
+    </FrameLayout>
+    <FrameLayout
         android:id="@+id/wifi_combo"
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
diff --git a/packages/SystemUI/res/layout/volume_dialog_row.xml b/packages/SystemUI/res/layout/volume_dialog_row.xml
index 53ae61b..d12bf5d 100644
--- a/packages/SystemUI/res/layout/volume_dialog_row.xml
+++ b/packages/SystemUI/res/layout/volume_dialog_row.xml
@@ -50,9 +50,7 @@
         android:layout_toEndOf="@id/volume_row_icon"
         android:layout_toStartOf="@+id/volume_settings_button"
         android:paddingEnd="8dp"
-        android:paddingStart="8dp"
-        android:progressTint="@android:color/white"
-        android:thumbTint="@android:color/white" />
+        android:paddingStart="8dp" />
 
     <com.android.keyguard.AlphaOptimizedImageButton
         android:id="@+id/volume_settings_button"
diff --git a/packages/SystemUI/res/layout/volume_zen_footer.xml b/packages/SystemUI/res/layout/volume_zen_footer.xml
index 9e761e2..b780f7d 100644
--- a/packages/SystemUI/res/layout/volume_zen_footer.xml
+++ b/packages/SystemUI/res/layout/volume_zen_footer.xml
@@ -72,6 +72,7 @@
             android:focusable="true"
             android:minWidth="91dp"
             android:text="@string/volume_zen_end_now"
+            android:textColor="@color/system_accent_color"
             android:textAppearance="@style/TextAppearance.QS.DetailButton" />
     </LinearLayout>
 
diff --git a/packages/SystemUI/res/layout/zen_mode_panel.xml b/packages/SystemUI/res/layout/zen_mode_panel.xml
index 595c9ed..2160ca3 100644
--- a/packages/SystemUI/res/layout/zen_mode_panel.xml
+++ b/packages/SystemUI/res/layout/zen_mode_panel.xml
@@ -24,35 +24,33 @@
 
     <com.android.systemui.volume.SegmentedButtons
         android:id="@+id/zen_buttons"
+        android:background="@drawable/segmented_buttons_background"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginStart="8dp"
-        android:layout_marginEnd="8dp" />
-
-    <View
-        android:id="@+id/zen_embedded_divider"
-        android:layout_width="match_parent"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
         android:layout_marginTop="8dp"
-        android:layout_height="1dp"
-        android:background="#4dffffff" />
+        android:layout_marginBottom="8dp" />
 
     <RelativeLayout
         android:id="@+id/zen_introduction"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingEnd="4dp"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="16dp"
         android:paddingTop="8dp"
         android:paddingBottom="8dp"
-        android:background="@color/zen_introduction_message_background" >
+        android:background="@drawable/zen_introduction_message_background" >
 
         <ImageView
             android:id="@+id/zen_introduction_confirm"
             android:layout_width="48dp"
             android:layout_height="48dp"
+            android:layout_marginEnd="8dp"
             android:layout_alignParentEnd="true"
             android:background="@drawable/btn_borderless_rect"
             android:clickable="true"
-            android:contentDescription="@string/accessibility_desc_confirm"
+            android:contentDescription="@string/accessibility_desc_close"
             android:scaleType="center"
             android:src="@drawable/ic_close"
             android:tint="@android:color/white" />
@@ -73,7 +71,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentEnd="true"
-            android:layout_marginEnd="4dp"
+            android:layout_marginEnd="12dp"
             android:layout_below="@id/zen_introduction_message"
             android:clickable="true"
             android:focusable="true"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 9c96cdc7..098d8c3 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Deursoek"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Foon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Ontsluit"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ontsluit"</string>
     <string name="phone_label" msgid="2320074140205331708">"maak foon oop"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"maak kamera oop"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Kies nuwe taakuitleg"</string>
     <string name="cancel" msgid="6442560571259935130">"Kanselleer"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX twee strepies."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX drie strepies."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-sein vol."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet is ontkoppel."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet gekoppel."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Geen sein nie."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Nie gekoppel nie."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Geen stawe."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> verwerp."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle onlangse programme is toegemaak."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Begin tans <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Kennisgewing is toegemaak."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Kennisgewingskerm."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Vinnige instellings."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Sluitskerm."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Instellings"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Oorsig."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Bevestig"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Maak toe"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Gebruiker <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi afgeskakel."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Vliegtuigmodus afgeskakel."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegtuigmodus aangeskakel."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Moenie steur nie aan, net prioriteit."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Moenie steur nie aan, geen onderbrekings nie."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Moenie steur nie; volkome stilte."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\'Moenie steur nie\' is aan, net wekkers."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Moenie steur nie af."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Moenie steur nie is afgeskakel."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Moenie steur nie"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Net prioriteit"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Net wekkers"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Geen onderbrekings nie"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Volkome stilte"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> toestelle)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth af"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Soek"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Gly op vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Gly links vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Geen onderbrekings nie. Nie eens wekkers nie."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Jy sal nie deur klanke en vibrasies gesteur word nie, afgesien van wekkers, onthounotas, gebeurtenisse en bellers wat jy spesifiseer."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Jy sal nie deur klanke en vibrasies gesteur word nie, afgesien van wekkers, onthounotas, gebeurtenisse en bellers wat jy spesifiseer."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Pasmaak"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Geen onderbrekings nie"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Net prioriteitonderbrekings"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Net wekkers"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Jou volgende wekker is om <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Jou volgende wekker is <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Jy sal nie jou wekker om <xliff:g id="ALARM_TIME">%s</xliff:g> hoor nie"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Dit blokkeer ALLE klanke en virbrasies, insluitend van wekkers, musiek, video\'s en speletjies af. Jy sal steeds foonoproepe kan maak."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Minder dringende kennisgewings hieronder"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Raak weer om oop te maak"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Sleep op om te ontsluit"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Sleep regs vir foon"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Sleep links vir kamera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Geen onderbrekings"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Volkome stilte"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Net prioriteit"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Net wekkers"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Alles"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Geen\nonderbrekings nie"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Volkome\nstilte"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Net\nprioriteit"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Net\nwekkers"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laai tans (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Deaktiveer VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Ontkoppel VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word, en jou toestel se ligginginligting monitor en bestuur. Kontak jou administrateur vir meer inligting."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Jou werkprofiel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJou administrateur kan jou netwerkaktiwiteit, insluitend e-posse, programme en veilige webwerwe, monitor.\n\nKontak jou administrateur vir meer inligting."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Jou toestel word bestuur deur:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nJou werkprofiel word bestuur deur:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nJou administrateur kan jou toestel en netwerkaktiwiteit, insluitend e-posse, programme en veilige webwerwe, monitor.\n\nKontak jou administrateur vir meer inligting."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Jy het \'n program toestemming gegee om \'n VPN-verbinding op te stel.\n\nHierdie program kan jou toestel en netwerkaktiwiteit, insluitend e-posse, programme en veilige webwerwe, monitor."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Jy het \'n program toestemming gegee om \'n VPN-verbinding op te stel.\n\nHierdie program kan jou toestel- en netwerkaktiwiteit monitor, insluitend e-posse, programme en webwerwe."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word, en jou toestel se ligginginligting monitor en bestuur.\n\nJy is aan \'n VPN gekoppel wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nKontak jou administrateur vir meer inligting."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Jou werkprofiel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJou administrateur kan jou netwerkaktiwiteit, insluitend e-posse, programme en veilige webwerwe, monitor.\n\nKontak jou administrateur vir meer inligting.\n\nJy is ook aan \'n VPN gekoppel wat jou netwerkaktiwiteit kan monitor."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nJou werkprofiel word bestuur deur:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nJou administrateur kan jou netwerkaktiwiteit, insluitend e-posse, programme en veilige webwerwe, monitor.\n\nKontak jou administrateur vir meer inligting.\n\nJy is ook aan \'n VPN gekoppel wat jou persoonlike netwerkaktiwiteit kan monitor"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur.\n\nJou administrateur is in staat om jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, te monitor.\n\nKontak jou administrateur vir meer inligting.\n\nJy is ook aan \'n VPN gekoppel wat jou netwerkaktiwiteit kan monitor."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend eposse, programme en webwerwe, kan monitor.\n\nVir meer inligting, kontak jou administrateur."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nJy is ook gekoppel aan <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit kan monitor."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nJou administrateur kan instelings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word en jou toestel se ligginginligting monitor en bestuur.\n\nJy is gekoppel aan <xliff:g id="APPLICATION">%2$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nVir meer inligting, kontak jou administrateur."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Toestel sal gesluit bly totdat jy dit handmatig ontsluit"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Kry kennisgewings vinniger"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Sien hulle voordat jy ontsluit"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Sien alles"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Versteek alles"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Beëindig nou"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skerm is vasgespeld"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Dit hou dit in sig totdat jy dit ontspeld. Raak en hou Terug en Oorsig op dieselfde tyd om te ontspeld."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Dit hou dit in sig totdat jy ontspeld. Raak en hou Oorsig om te ontspeld."</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 198747c..3fb27b2 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"ፈልግ"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ካሜራ"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ስልክ"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"ክፈት"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ክፈት"</string>
     <string name="phone_label" msgid="2320074140205331708">"ስልክ ክፈት"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ካሜራ ክፈት"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"የአዲስ ተግባር አቀማመጥን ይምረጡ"</string>
     <string name="cancel" msgid="6442560571259935130">"ይቅር"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX ሁለት አሞሌዎች።"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX ሦስት አሞሌዎች።"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX አመልካች ሙሉ ነው።"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ኤተርኔት ተነቅሏል።"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ኤተርኔት ተገናኝቷል።"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"ምንም ምልክት የለም።"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"አልተገናኘም።"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"ዜሮ አሞሌዎች።"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ተሰናብቷል::"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ሁሉም የቅርብ ጊዜ ማመልከቻዎች ተሰናብተዋል።"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> በመጀመር ላይ።"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"ማሳወቂያ ተወግዷል።"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"የማሳወቂያ ጥላ።"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ፈጣን ቅንብሮች።"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ማያ ገጽ ቆልፍ።"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ቅንብሮች"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"አጠቃላይ እይታ።"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"አረጋግጥ"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"ዝጋ"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ተጠቃሚ <xliff:g id="USER">%s</xliff:g>።"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>።"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi ጠፍቷል።"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"የአውሮፕላን ሁነታ ጠፍቷል።"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"የአውሮፕላን ሁነታ በርቷል።"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"አትረብሽ በርቷል፣ ቅድሚያ የሚሰጠው ብቻ።"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"አትረብሽ በርቷል፣ ምንም ማቋረጦች የሉም።"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"አትረብሽ በርቷል፣ ሙሉ ለሙሉ ጸጥታ።"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"አትረብሽ በርቷል፣ ማንቂያዎች ብቻ።"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"አትረብሽ ጠፍቷል።"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"አትረብሽ ጠፍቷል።"</string>
@@ -235,7 +242,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="7309935569360609114">"ምንም ማቋረጦች የሉም"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"ፍለጋ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ላይ አንሸራትት።"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ግራ አንሸራትት።"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"ምንም ማቋረጦች የሉም። ማንቂያዎችም እንኳ።"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"እርስዎ ከገለጿቸው ማንቂያዎች፣ አስታዋሾች፣ ክስተቶች እና ደዋዮች በስተቀር በድምጾች እና ንዝረቶች አይረበሹም።"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"እርስዎ ከገለጿቸው ማንቂያዎች፣ አስታዋሾች፣ ክስተቶች እና ደዋዮች በስተቀር በድምጾች እና ንዝረቶች አይረበሹም።"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"አብጅ"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"ምንም ማቋረጦች የሉም"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"ቅድሚያ የሚሰጣቸው ማቋረጦች ብቻ"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"ማንቂያዎች ብቻ"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"ቀጣዩ ማንቂያ ደውልዎ በ<xliff:g id="ALARM_TIME">%s</xliff:g> ነው"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"ቀጣዩ ማንቂያ ደውልዎ <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> ነው"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"በ<xliff:g id="ALARM_TIME">%s</xliff:g> ያለውን ማንቂያ ደውልዎን አይሰሙትም"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"ይሄ ከማንቂያዎች፣ ሙዚቃ፣ ቪዲዮዎች እና ጨዋታዎች የመጡትንም ጨምሮ ሁሉንም ድምጾች እና ንዝረቶች ያግዳል። አሁንም የድምጽ ጥሪዎችን ማድረግ ይችላሉ።"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"በጣም አስቸካይ ያልሆኑ ማሳወቂያዎች ከታች"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"ለመክፈት ዳግም ይንኩ"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"ለማስከፈት ወደ ላይ ያንሸራትቱ"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ለስልክ ወደቀኝ ያንሸራትቱ"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"ለካሜራ ወደግራ ያንሸራትቱ"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"ምንም ማቋረጦች የሉም"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"ሁሉም"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"ምንም\nመቆራረጦች የሉም"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"ሃይል በመሙላት ላይ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> እስከሚሞላ ድረስ)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN አሰናክል"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"የVPN ግንኙነት አቋርጥ"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"የእርስዎ መሣሪያ የሚቀናበረው በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻ፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን፣ እና የመሣሪያዎ የአካባቢ መረጃን መከታተል እና ማቀናበር ይችላሉ። ተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው የሚቀናበረው።\n\nየእርስዎ አስተዳዳሪ ኢሜይሎችን፣ መተግበሪያዎችን እና ደህነንታቸው የተጠበቁ ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን የመከታተል ችሎታ አለው።\n\nተጨማሪ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"የእርስዎ መሣሪያ የሚቀናበረው በ፦\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>።\nየስራ መገለጫዎ የሚቀናበረው በ፦\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>።\n\nየእርስዎ አስተዳዳሪ ኢሜይሎችን፣ መተግበሪያዎችን እና ደህንነታቸው የተጠበቁ ድር ጣቢያዎችንም ጨምሮ የመሣሪያ እና የአውታረ መረብ እንቅስቃሴውን መከታተል ይችላሉ።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"አንድ መተግበሪያ የVPN ግንኙነት እንዲያዋቅር ፈቅደውለታል።\n\nይህ መተግበሪያ ኢሚይሎችን፣ መተግበሪያዎችን እና ደህንነታቸው የተጠበቁ ድር ጣቢያዎችንም ጨምሮ የመሣሪያዎን እና የአውታረ መረብ እንቅስቃሴዎን መከታተል ይችላሉ።"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"አንድ መተግበሪያ የVPN ግንኙነት እንዲያዋቅር ፍቃድ ሰጥተውታል።\n\nይህ መተግበሪያ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የመሣሪያዎን እና የአውታረ መረብ እንቅስቃሴዎን መከታተል ይችላል።"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"የእርስዎ መሣሪያ የሚቀናበረው በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻ፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን  እና የመሣሪያዎን የአካባቢ መረጃ መከታተል እና ማቀናበር ይችላል።\n\nከአንድ VPN ጋር ተገናኝተዋል፣ ይሄ ደግሞ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብዎን እንቅስቃሴ መከታተል ይችላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው የሚቀናበረው።\n\nየእርስዎ አስተዳዳሪ ኢሜይሎችን፣ መተግበሪያዎችን እና ደህንነታቸው የተጠበቁ ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን የመከታተል ችሎታ አለው።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።\n\nእንዲሁም የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችል VPN ጋርም ተገናኝተዋል።"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"የእርስዎ መሣሪያ በ<xliff:g id="ORGANIZATION_0">%1$s</xliff:g> ነው የሚቀናበረው።\nየስራ መገለጫዎ የሚቀናበረው በ፦\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>።\n\nየእርስዎ አስተዳዳሪ ኢሜይሎችን፣ መተግበሪያዎችን እና ደህንነታቸው የተጠበቁ ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን የመከታተል ብቃት አለው።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።\n\nእንዲሁም የግል አውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችል VPN ጋርም ተገናኝተዋል"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው የሚተዳደረው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን እና የመሣሪያዎ የአካባቢ መረጃን መከታተል እና ማቀናበር ይችላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።\n\nእንዲሁም የአውታረ መረብ ግንኙነትዎን መከታተል ከሚችል አንድ VPN ጋር ተገናኝተዋል።"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን ከሚከታተለው <xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን ከሚከታተለው <xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው እየተዳደረ ያለው። ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%2$s</xliff:g> ጋር ተገናኝተዋል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው እየተዳደረ ያለው። ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ጋር ተገናኝተዋል።\n\nእንዲሁም የግል አውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ጋርም ተገናኝተዋል።"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"የእርስዎ መሣሪያ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው የሚተዳደረው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን እና የመሣሪያዎ የአካባቢ መረጃን መከታተል እና ማቀናበር ይችላል።\n\nእርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችን  ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%2$s</xliff:g> ጋር ተገናኝተዋል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"እራስዎ እስኪከፍቱት ድረስ መሣሪያ እንደተቆለፈ ይቆያል"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"ማሳወቂያዎችን ፈጥነው ያግኙ"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ከመክፈትዎ በፊት ይመልከቷቸው"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"ሁሉንም ይመልከቱ"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"ሁሉንም ደብቅ"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>። <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"አሁን ጨርስ"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"ማያ ገጽ ተሰክቷል"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ይህ እስከሚነቅሉት ድረስ ድረስ በዕይታ ውስጥ እንዲቆይ ያደርገዋል። ለመንቀል በተመሳሳይ ጊዜ ተመለስን እና አጠቃላይ ዕይታን አንድ ላይ ነክተው ይያዙ።"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"ይህ እስከሚነቅሉት ድረስ በዕይታ ውስጥ ያቆየዋል። እንዲነቀል ለማድረግ አጠቃላይ ዕይታን ነካ አድርገው ይያዙት።"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index dceeb21f1..59be694 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -87,9 +87,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"بحث"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"الكاميرا"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"الهاتف"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"المساعد الصوتي"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"إلغاء القفل"</string>
     <string name="unlock_label" msgid="8779712358041029439">"إلغاء القفل"</string>
     <string name="phone_label" msgid="2320074140205331708">"فتح الهاتف"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"فتح المساعد الصوتي"</string>
     <string name="camera_label" msgid="7261107956054836961">"فتح الكاميرا"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"تحديد تنسيق جديد للمهمة"</string>
     <string name="cancel" msgid="6442560571259935130">"إلغاء"</string>
@@ -125,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‏شريطا WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‏أشرطة WiMAX الثلاثة."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‏إشارة WiMAX كاملة."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"‏تم قطع اتصال Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"‏تم إنشاء اتصال Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"ليست هناك إشارة."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"غير متصل."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"ليست هناك أشرطة."</string>
@@ -166,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"تمت إزالة <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"تم تجاهل كل التطبيقات المستخدمة مؤخرًا."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"جارٍ بدء <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"تم تجاهل الإشعار."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"مركز الإشعارات."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"الإعدادات السريعة."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"شاشة التأمين."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"الإعدادات"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"النظرة عامة."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"تأكيد"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"إغلاق"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"المستخدم <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"‏تم إيقاف Wifi."</string>
@@ -184,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"تم إيقاف وضع الطائرة."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"تم تشغيل وضع الطائرة."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"تم تشغيل الرجاء عدم الإزعاج، الأولوية فقط."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"تم تشغيل \"الرجاء عدم الإزعاج\"، ممنوع الإزعاج."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"تم تشغيل الرجاء عدم الإزعاج، كتم الصوت تمامًا."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"تم تشغيل الرجاء عدم الإزعاج، التنبيهات فقط."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"تم تعطيل \"الرجاء عدم الإزعاج\"."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"تم تعطيل \"الرجاء عدم الإزعاج\"."</string>
@@ -239,7 +244,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="7309935569360609114">"عدم الإزعاج"</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>
@@ -306,26 +311,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"بحث"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"تمرير لليسار لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"عدم المقاطعة، ولا بالتنبيهات كذلك."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"لن يتم إزعاجك بأصوات الاهتزاز، عدا من التنبيهات والتذكيرات والأحداث والمتصلين الذين تحددهم."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"لن يتم إزعاجك بأصوات أو اهتزاز، عدا من التنبيهات والتذكيرات والأحداث والمتصلين الذين تحددهم."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"تخصيص"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"بدون مقاطعات"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"المقاطعات ذات الأولوية فقط"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"التنبيهات فقط"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"التنبيه المقبل في <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"التنبيه المقبل في <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"لن تسمع المنبهات في <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"سيؤدي هذا إلى حظر جميع الأصوات والاهتزازات، بما في ذلك ما يرد من التنبيهات والموسيقى والفيديو والألعاب. إلا أنه سيظل بإمكانك إجراء مكالمات هاتفية."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"الإشعارات الأقل إلحاحًا أدناه"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"المس مرة أخرى للفتح"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"مرر سريعًا لأعلى لإلغاء القفل"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"مرر سريعًا إلى اليسار لفتح الهاتف"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"مرر سريعًا إلى اليمين لفتح الكاميرا"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"عدم الإزعاج"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"يمكنك التمرير سريعًا من الرمز لتشغيل الهاتف"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"يمكنك التمرير سريعًا من الرمز لتشغيل المساعد الصوتي"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"يمكنك التمرير سريعًا من الرمز لتشغيل الكاميرا"</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_all" msgid="1330581184930945764">"الكل"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"عدم\nالإزعاج"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"جارٍ الشحن (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الامتلاء)"</string>
@@ -367,12 +366,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"تعطيل الشبكة الظاهرية الخاصة"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"‏قطع الاتصال بشبكة VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"تتم إدارة جهازك عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيمكن للمشرف مراقبة وإدارة كل من الإعدادات والدخول إلى الشركة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع لجهازك. للمزيد من المعلومات، اتصل بالمشرف."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيستطيع المشرف مراقبة أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب الآمنة.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"تتم إدارة جهازك عن طريق:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nتتم إدارة ملفك الشخصي للعمل عن طريق:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nيمكن للمشرف مراقبة جهازك وأنشطة الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب الآمنة.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"‏لقد منحت تطبيقًا إذنًا لإعداد اتصال شبكة ظاهرية خاصة (VPN).\n\nيمكن لهذا التطبيق مراقبة جهازك وأنشطة الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب الآمنة."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"‏لقد منحت تطبيقًا الإذن لإعداد اتصال شبكة ظاهرية خاصة (VPN).\n\nيمكن لهذا التطبيق مراقبة أنشطتك على الجهاز والشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"‏تتم إدارة جهازك عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيمكن للمشرف مراقبة وإدارة كل من الإعدادات والدخول إلى الشركة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع لجهازك.\n\nأنت متصل بشبكة ظاهرية خاصة (VPN)، يمكنها مراقبة أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"‏تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيستطيع المشرف مراقبة أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب الآمنة.\n\nللمزيد من المعلومات، اتصل بالمشرف.\n\nأنت متصل أيضًا بشبكة ظاهرية خاصة (VPN)، يمكنها مراقبة أنشطة الشبكة."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"‏تتم إدارة جهازك عن طريق <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nتتم إدارة ملفك الشخصي للعمل عن طريق:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nيستطيع المشرف مراقبة أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب الآمنة.\n\nللمزيد من المعلومات، اتصل بالمشرف.\n\nأنت متصل أيضًا بشبكة ظاهرية خاصة (VPN)، يمكنها مراقبة أنشطة شبكتك الشخصية"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"‏تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nبإمكان المشرف مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف.\n\nأنت متصل أيضًا بشبكة ظاهرية خاصة (VPN)، يمكنها مراقبة أنشطتك على الشبكة."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"شبكة ظاهرية خاصة"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"أنت متصل بـ <xliff:g id="APPLICATION">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"أنت متصل بـ <xliff:g id="APPLICATION">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك الشخصية على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>. وهذا الملف الشخصي للعمل متصل بـ <xliff:g id="APPLICATION">%2$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على شبكة العمل، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>. وهذا الملف الشخصي للعمل متصل بـ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على شبكة العمل، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nأنت متصل أيضًا بـ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>، الذي يمكنه مراقبة أنشطتك الشخصية على الشبكة."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"تتم إدارة جهازك عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nيمكن للمشرف مراقبة وإدارة كل من الإعدادات والوصول إلى الشركة والتطبيقات والبيانات المرتبطة بجهازك ومعلومات الموقع لجهازك.\n\nأنت متصل بـ <xliff:g id="APPLICATION">%2$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"سيظل الجهاز مقفلاً إلى أن يتم إلغاء قفله يدويًا"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"الحصول على الإشعارات بشكل أسرع"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"الاطلاع عليها قبل إلغاء القفل"</string>
@@ -381,6 +383,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"عرض الكل"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"إخفاء الكل"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"إنهاء الآن"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"توسيع"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"تصغير"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"تم تثبيت الشاشة"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"يساعد هذا على استمرار العرض حتى يتم إلغاء التثبيت. ويمكنك لمس \"رجوع\" و\"عرض عام\" مع الاستمرار في وقت واحد لإلغاء التثبيت."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"يساعد هذا على استمرار العرض حتى يتم إلغاء التثبيت. ويمكنك لمس \"عرض عام\" مع الاستمرار في وقت واحد لإلغاء التثبيت."</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 915cc15..0898bec 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Търсене"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Телефон"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Отключване"</string>
     <string name="unlock_label" msgid="8779712358041029439">"отключване"</string>
     <string name="phone_label" msgid="2320074140205331708">"отваряне на телефона"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"отваряне на камерата"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Избиране на ново оформление за задачите"</string>
     <string name="cancel" msgid="6442560571259935130">"Отказ"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX е с две чертички."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX е с три чертички."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Сигналът за WiMAX е пълен."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Връзката с Ethernet е прекратена."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Установена е връзка с Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Няма сигнал."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Няма връзка."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Нула чертички."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Приложението <xliff:g id="APP">%s</xliff:g> е отхвърлено."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Всички скорошни приложения са отхвърлени."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> се стартира."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Известието е отхвърлено."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Падащ панел с известия."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Бързи настройки."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заключване на екрана."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Настройки"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Общ преглед."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Потвърждаване"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Затваряне"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Потребител: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Функцията за Wi-Fi се изключи."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Самолетният режим се изключи."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Самолетният режим се включи."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Настройката „Не безпокойте“ е включена – само с приоритет."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Настройката „Не безпокойте“ е включена – без прекъсвания."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Настройката „Не безпокойте“ е включена в режим за пълна тишина."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Настройката „Не безпокойте“ е включена в режим само с будилници."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Настройката „Не безпокойте“ е изключена."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Настройката „Не безпокойте“ е изключена."</string>
@@ -235,7 +242,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="7309935569360609114">"Без прекъсвания"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Пълна тишина"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> устройства)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth е изключен"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Търсене"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Плъзнете нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Плъзнете наляво за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Без прекъсвания. Дори без будилници."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Няма да бъдете обезпокоявани от звуци и вибрирания, различни от будилници, напомняния, събития и обаждания от посочени от вас контакти."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Няма да бъдете обезпокоявани от звуци и вибрирания, различни от будилници, напомняния, събития и обаждания от посочени от вас контакти."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Персонализиране"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Без прекъсвания"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Само приоритетни прекъсвания"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Само будилници"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Следващият ви будилник е в <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Следващият ви будилник е в/ъв <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Няма да чуете будилника си в <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Този режим блокира ВСИЧКИ звуци и вибрирания, включително от будилници, музика, видеоклипове и игри. Пак ще можете да извършвате телефонни обаждания."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Ппоказване на по-малко спешните известия по-долу"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Докоснете отново за отваряне"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Прекарайте пръст нагоре, за да отключите"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Прекарайте пръст надясно, за да използвате телефона"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Прекарайте пръст наляво, за да включите камерата"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Без прекъсвания"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Всички"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Без\nпрекъсвания"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарежда се (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Деактивиране на VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Прекратяване на връзката с VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Устройството ви се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията и данните, свързани с устройството ви, включително информацията за местоположението му. За още подробности се свържете с администратора си."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава активността ви в мрежата, включително имейли, приложения и сигурни уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Устройството ви се управлява от:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nСлужебният ви потребителски профил се управлява от:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава активността ви на устройството и в мрежата, включително имейли, приложения и сигурни уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Разрешихте на приложение да настрои връзка с виртуална частна мрежа (VPN).\n\nТо може да наблюдава активността ви на устройството и в мрежата, включително имейли, приложения и сигурни уебсайтове."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Разрешихте на приложение да настрои връзка с виртуална частна мрежа (VPN).\n\nТова приложение може да наблюдава активността ви на устройството и в мрежата, включително имейли, приложения и уебсайтове."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Устройството ви се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията и данните, свързани с устройството ви, включително информацията за местоположението му.\n\nСвързани сте с виртуална частна мрежа (VPN) и активността ви в нея може да се наблюдава, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава активността ви в мрежата, включително имейли, приложения и сигурни уебсайтове.\n\nЗа още информация се свържете с администратора си.\n\nСъщо така сте свързани с виртуална частна мрежа (VPN) и активността ви в нея може да се наблюдава."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Устройството ви се управлява от <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nСлужебният ви потребителски профил се управлява от:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава активността ви в мрежата, включително имейли, приложения и сигурни уебсайтове.\n\nЗа още информация се свържете с администратора си.\n\nСъщо така сте свързани с виртуална частна мрежа (VPN) и личната ви активност в нея може да се наблюдава."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си.\n\nСъщо така е установена връзка с виртуална частна мрежа (VPN) и активността ви в нея може да се наблюдава."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Установена е връзка с приложението <xliff:g id="APPLICATION">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Установена е връзка с приложението <xliff:g id="APPLICATION">%1$s</xliff:g>, което може да наблюдава личната ви активност в мрежата, включително имейли, приложения и уебсайтове."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Той е свързан с приложението <xliff:g id="APPLICATION">%2$s</xliff:g>, което може да наблюдава служебната ви активност в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Той е свързан с приложението <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, което може да наблюдава служебната ви активност в мрежата, включително имейли, приложения и уебсайтове.\n\nУстановена е връзка и с приложението <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, което може да наблюдава личната ви активност в мрежата."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Устройството ви се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава и управлява настройките, корпоративния достъп, приложенията и данните, свързани с устройството ви, включително информацията за местоположението му.\n\nУстановена е връзка с приложението <xliff:g id="APPLICATION">%2$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Устройството ще остане заключено, докато не го отключите ръчно"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Получавайте известия по-бързо"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Вижте известията, преди да отключите"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Преглед на всичко"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Скриване на всичко"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Прекратяване сега"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Екранът е фиксиран"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Така екранът ще се показва, докато не го освободите. За да направите това, докоснете и задръжте бутона за връщане назад и този за общ преглед едновременно."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Така екранът ще се показва, докато не го освободите. За да направите това, докоснете и задръжте бутона за общ преглед."</string>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index 0ad51bf..e9bc159 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"অনুসন্ধান করুন"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ক্যামেরা"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ফোন"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"আনলক করুন"</string>
     <string name="unlock_label" msgid="8779712358041029439">"আনলক করুন"</string>
     <string name="phone_label" msgid="2320074140205331708">"ফোন খুলুন"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ক্যামেরা খুলুন"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"নতুন কার্য লেআউট নির্বাচন করুন"</string>
     <string name="cancel" msgid="6442560571259935130">"বাতিল করুন"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX এ দুইটি দণ্ড৷"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX এ তিনটি দণ্ড৷"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX এ সম্পূর্ণ সিগন্যাল৷"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ইথারনেটের সংযোগ বিচ্ছিন্ন হয়েছে৷"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ইথারনেট সংযুক্ত হয়েছে৷"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"কোনো সিগন্যাল নেই৷"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"সংযুক্ত নয়৷"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"কোনো দণ্ড নেই৷"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> খারিজ করা হয়েছে৷"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"সমস্ত সাম্প্রতিক অ্যাপ্লিকেশন খারিজ করা হয়েছে।"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> তারাঙ্কিত করা হচ্ছে।"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"বিজ্ঞপ্তি খারিজ করা হয়েছে৷"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"বিজ্ঞপ্তি শেড৷"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"দ্রুত সেটিংস৷"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"লক স্ক্রীন।"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"সেটিংস"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"এক নজরে৷"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"নিশ্চিত করুন"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"বন্ধ করুন"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ব্যবহারকারী <xliff:g id="USER">%s</xliff:g>৷"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi বন্ধ হয়েছে।"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"বিমান মোড বন্ধ হয়েছে।"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"বিমান মোড চালু হয়েছে।"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"“বিরক্ত করবেন না” চালু করবেন, শুধুমাত্র অগ্রাধিকার৷"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"“বিরক্ত করবেন না” চালু করবেন, কোন বাধা নয়"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"“বিরক্ত করবেন না” চালু করবেন, একদম নিরব"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"“বিরক্ত করবেন না” চালু করবেন, শুধুমাত্র অ্যালার্মগুলি৷"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"“বিরক্ত করবেন না” বন্ধ৷"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"বিরক্ত করবেন না বন্ধ রয়েছে৷"</string>
@@ -235,7 +242,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="7309935569360609114">"কোনো বাধা নয়"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"একদম নিরব"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> টি ডিভাইস)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth বন্ধ"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"অনুসন্ধান করুন"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> এর জন্য উপরের দিকে স্লাইড করুন৷"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> এর জন্য বাম দিকে স্লাইড করুন৷"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"কোনো ব্যাঘাত ছাড়াই। এমনকি অ্যালার্মও নয়।"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"আপনার নির্দিষ্ট অ্যালার্ম, অনুস্মারক, ইভেন্ট, এবং কলারগুলি ব্যতীত আপনাকে শব্দ এবং কম্পনগুলির দ্বারা বিরক্ত করা হবে না৷"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"আপনার নির্দিষ্ট অ্যালার্ম, অনুস্মারক, ইভেন্ট, এবং কলারগুলি ব্যতীত আপনাকে শব্দ এবং কম্পনগুলির দ্বারা বিরক্ত করা হবে না৷"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"কাস্টমাইজ করুন"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"কোনো বাধা নয়"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"শুধুমাত্র প্রাধান্য বাধাগুলি"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"শুধুমাত্র অ্যালার্মগুলি"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"আপনার পরবর্তী অ্যালার্মের সময় <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"আপনার পরবর্তী অ্যালার্মের সময় <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> বাজলে আপনি অ্যালার্ম শুনতে পাবেন না"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"এটি অ্যালার্ম, সংগীত, ভিডিও এবং গেমগুলি থেকে আসা সমস্ত রকমের ধ্বনি এবং কম্পনগুলিকে বন্ধ করে৷ আপনি এখনও ফোন কলগুলি করতে পারবেন৷"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"নিচে অপেক্ষাকৃত কম জরুরী বিজ্ঞপ্তিগুলি"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"খোলার জন্য আবার স্পর্শ করুন"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"আনলক করতে উপরের দিকে সোয়াইপ করুন"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ফোনের জন্য ডানদিকে সোয়াইপ করুন"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"ক্যামেরার জন্য ডানদিকে সোয়াইপ করুন"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"কোনো বাধা নেই"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"সমস্ত"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"কোনো\nবাঁধাদান নেই"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"চার্জ হচ্ছে (পূর্ণ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> সময় বাকি)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN অক্ষম করুন"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN এর সংযোগ বিচ্ছিন্ন করুন"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করে৷\n\nআপনার প্রশাসক আপনার ডিভাইসের সাথে সম্পর্কিত সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্লিকেশানগুলি, ডেটা এবং ডিভাইসের অবস্থান সম্পর্কিত তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন৷ আরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷\n\nআপনার প্রশাসক ইমেল, অ্যাপ্লিকেশান ও নিরাপদ ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে সক্ষম৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"আপনার ডিভাইস পরিচালনা করছে:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>৷\nআপনার কাজের প্রোফাইল পরিচালনা করছে:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>৷\n\nআপনার প্রশাসক ইমেল,অ্যাপ্লিকেশান ও নিরাপদ ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারেন।\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সঙ্গে যোগাযোগ করুন।"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"আপনি VPN সংযোগ সেট আপ করার জন্য একটি অ্যাপ্লিকেশানকে অনুমতি দিন৷\n\nএই অ্যাপ্লিকেশানটি ইমেল, অ্যাপ্লিকেশান ও নিরাপদ ওয়েবসাইটগুলি সহ আপনার ডিভাইস এবং নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে।"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"আপনি VPN সংযোগ সেট আপ করার জন্য একটি অ্যাপ্লিকেশানকে অনুমতি দিন৷\n\nএই অ্যাপ্লিকেশানটি ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার ডিভাইস এবং নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে।"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করে৷\n\nআপনার প্রশাসক আপনার ডিভাইসের সাথে সম্পর্কিত সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্লিকেশান ডেটা এবং ডিভাইসের অবস্থান সম্পর্কিত তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন৷\n\nআপনি একটি VPN এর সাথে সংযুক্ত রয়েছেন যা ইমেল, অ্যাপ্লিকেশান ও নিরাপদ ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷\n\nআপনার প্রশাসক ইমেল, অ্যাপ্লিকেশান ও নিরাপদ ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে সক্ষম৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷\n\nএছাড়াও আপনি একটি VPN এর সাথে সংযুক্ত রয়েছেন যা আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"<xliff:g id="ORGANIZATION_0">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করে৷\nআপনার কাজের প্রোফাইল পরিচালনা করছে:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>৷\n\nআপনার প্রশাসক ইমেল,অ্যাপ্লিকেশান ও নিরাপদ ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্ক ক্রিয়াকলাপ নিরীক্ষণ করতে সক্ষম।\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷\n\nএছাড়াও আপনি একটি VPN এর সাথে সংযুক্ত রয়েছেন যা আপনার নেটওয়ার্কের কার্যকলাপও নিরীক্ষণ করতে পারে।"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷\n\nআপনার প্রশাসক ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে সক্ষম৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷\n\nএছাড়াও আপনি একটি VPN, এর সাথে সংযুক্ত রয়েছেন যা আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ্লিকেশান এবং ওয়েবসাইটগুলি সমেত আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ্লিকেশান এবং ওয়েবসাইটগুলি সমেত আপনার ব্যক্তিগত নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷ এটি <xliff:g id="APPLICATION">%2$s</xliff:g> এ সংযুক্ত রয়েছে যা আপনার ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার কাজের নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷ এটি <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> এ সংযুক্ত রয়েছে যা আপনার ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার কাজের নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nএছাড়াও আপনি <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> এর সাথে সংযুক্ত রয়েছেন যা আপনার ব্যক্তিগত নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করে৷\n\nআপনার প্রশাসক আপনার ডিভাইসের সাথে সম্পর্কিত সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্লিকেশান ডেটা এবং ডিভাইসের অবস্থান সম্পর্কিত তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন৷\n\nআপনি <xliff:g id="APPLICATION">%2$s</xliff:g> এর সাথে সংযুক্ত রয়েছেন যা ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"আপনি নিজে আনলক না করা পর্যন্ত ডিভাইসটি লক হয়ে থাকবে"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"বিজ্ঞপ্তিগুলি আরো দ্রুত পান"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"আপনি আনলক করার আগে ওগুলো দেখুন"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"সবগুলি দেখুন"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"সবগুলি লুকান"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"এখন সমাপ্ত করুন"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"স্ক্রীন পিন করা হয়েছে"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"এটি আপনার আনপিন না করা পর্যন্ত এটিকে দর্শনে রাখে৷ আনপিন করতে একই সময়ে ফিরুন এবং ওভারভিউ এ স্পর্শ করে ধরে রাখুন৷"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"এটি আপনার আনপিন না করা পর্যন্ত এটিকে দর্শনে রাখে৷ আনপিন করতে ওভারভিউ এ স্পর্শ করে ধরে রাখুন৷"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 7888e4a..14e990b 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Cerca"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Càmera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telèfon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloqueja"</string>
     <string name="unlock_label" msgid="8779712358041029439">"desbloqueja"</string>
     <string name="phone_label" msgid="2320074140205331708">"obre el telèfon"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"obre la càmera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Selecciona el disseny de la tasca nova"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancel·la"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Dues barres de WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Tres barres de WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Senyal de WiMAX plena."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"S\'ha desconnectat l\'Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"S\'ha connectat l\'Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Sense senyal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Sense connexió."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Cap barra."</string>
@@ -164,13 +170,14 @@
     <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>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificació omesa."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Àrea de notificacions"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuració ràpida."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla de bloqueig"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Configuració"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visió general"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirma"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Tanca"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Usuari <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"La xarxa Wi-Fi està desactivada."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"S\'ha desactivat el Mode d\'avió."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"S\'ha activat el Mode d\'avió."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"El mode No molesteu està activat (només amb prioritat)."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"El mode No molesteu està activat (cap interrupció)."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"El mode No molesteu està activat; silenci total."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"El mode No molesteu està activat (només alarmes)."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"El mode No molesteu està desactivat."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"S\'ha desactivat el mode No molesteu."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molesteu"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Només amb prioritat"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Només alarmes"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Cap interrupció"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Silenci total"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositius)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivat"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Cerca"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Fes lliscar el dit cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Fes lliscar el dit cap a l\'esquerra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Sense interrupcions (ni tan sols alarmes)"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"No t\'interromprà cap so ni vibració, tret dels que produeixin les alarmes, els recordatoris, els esdeveniments i les trucades de les persones que especifiquis."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"No t\'interromprà cap so ni cap vibració, tret dels que produeixin les alarmes, els recordatoris, els esdeveniments i les trucades de les persones que especifiquis."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalitza"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Cap interrupció"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Només interrupcions amb prioritat"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Només alarmes"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"La propera alarma és a les <xliff:g id="ALARM_TIME">%s</xliff:g>."</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Propera alarma: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"No sentiràs l\'alarma a les <xliff:g id="ALARM_TIME">%s</xliff:g>."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Es bloquejaran TOTS els sons i totes les vibracions, inclosos les alarmes, la música, els vídeos i els jocs. Tot i això, encara podràs fer trucades."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificacions menys urgents a continuació"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Torna a tocar per obrir"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Fes lliscar el dit cap amunt per desbloquejar el teclat."</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Fes lliscar el dit cap a la dreta per obrir el telèfon."</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Fes lliscar el dit cap a l\'esquerra per obrir la càmera."</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Cap interrupció"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Silenci total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Només amb prioritat"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Només alarmes"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Totes"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Sense\ninterrupcions"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silenci\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Només\ninterr. prior."</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Només\nalarmes"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregant (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar la càrrega)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Desactiva la VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Desconnecta la VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Administrador del dispositiu: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions i les dades associades amb aquest dispositiu, inclosa la informació d\'ubicació. Per obtenir més informació, contacta amb l\'administrador."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Administrador del perfil professional: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'administrador pot supervisar l\'activitat de la xarxa, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Administrador del dispositiu:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nAdministrador del perfil professional:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nL\'administrador pot supervisar el dispositiu i l\'activitat de xarxa, inclosos els correus electrònics, les aplicacions i els llocs webs segurs.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Has donat permís a una aplicació per configurar una connexió VPN.\n\nAquesta aplicació pot supervisar el dispositiu i l\'activitat de la xarxa, inclosos els correus electrònics, les aplicacions i els llocs web segurs."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Has donat permís a una aplicació per configurar una connexió VPN.\n\nAquesta aplicació pot supervisar el dispositiu i l\'activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Administrador del dispositiu: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'administrador pot supervisar i gestionar el següent: configuració, accés corporatiu, aplicacions i dades associades amb aquest dispositiu, inclosa la seva informació d\'ubicació.\n\nEstàs connectat a una VPN, que pot supervisar l\'activitat de la xarxa, com ara els correus, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Administrador del perfil professional: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'administrador pot supervisar l\'activitat de la xarxa, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació, contacta amb l\'administrador.\n\nA més, estàs connectat a una VPN, que pot supervisar l\'activitat personal a la xarxa."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Administrador del dispositiu:<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nAdministrador del perfil professional:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nL\'administrador pot supervisar l\'activitat de la xarxa, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació, contacta amb l\'administrador.\n\nA més, estàs connectat a una VPN, que pot supervisar l\'activitat personal a la xarxa."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el perfil de Work.\n\nL\'administrador pot supervisar l\'activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador.\n\nA més, estàs connectat a una VPN, que pot supervisar l\'activitat a la xarxa."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el perfil de Work. El perfil està connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el perfil de Work. El perfil està connectat a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nA més, estàs connectat a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el dispositiu.\n\nL\'administrador pot supervisar i gestionar el següent: configuració, accés corporatiu, aplicacions i dades associades amb el dispositiu, inclosa la informació d\'ubicació.\n\nEstàs connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar l\'activitat a la xarxa, com ara els correus, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositiu continuarà bloquejat fins que no el desbloquegis manualment."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Obtén notificacions més ràpidament"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Mostra-les abans de desbloquejar"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Mostra-les totes"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Amaga-les totes"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Finalitza ara"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"La pantalla està fixada"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Continuarà a la visualització fins que n\'anul·lis la fixació. Per fer-ho, toca i mantén premuts els botons Enrere i Visió general a la vegada."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Continuarà a la visualització fins que n\'anul·lis la fixació. Per fer-ho, toca i mantén premut el botó Visió general."</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 39fc403..3c82ccb 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Hledat"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparát"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Odemknout"</string>
     <string name="unlock_label" msgid="8779712358041029439">"odemknout"</string>
     <string name="phone_label" msgid="2320074140205331708">"otevřít telefon"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"spustit fotoaparát"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Vybrat nové rozvržení úkolů"</string>
     <string name="cancel" msgid="6442560571259935130">"Zrušit"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Dvě čárky signálu sítě WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Tři čárky signálu sítě WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Plný signál sítě WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Síť ethernet je odpojena."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Síť ethernet je připojena."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Není signál."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Nepřipojeno."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Žádná čárka."</string>
@@ -166,13 +172,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikace <xliff:g id="APP">%s</xliff:g> byla odebrána."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Všechny naposledy použité aplikace byly odstraněny."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Spouštění aplikace <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Oznámení je zavřeno."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Panel oznámení."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Rychlé nastavení."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Obrazovka uzamčení"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Nastavení"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Přehled"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Potvrdit"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Zavřít"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Uživatel <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Připojení Wi-Fi je vypnuto."</string>
@@ -184,7 +191,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Režim Letadlo je vypnutý."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Režim Letadlo je zapnutý."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Stav Nerušit je zapnutý – pouze prioritní vyrušení."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Stav Nerušit je zapnutý – žádná vyrušení."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Je zapnut režim Nerušit – úplné ticho."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Nerušit, pouze budíky"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Stav Nerušit je vypnutý."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stav Nerušit je vypnutý"</string>
@@ -239,7 +246,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nerušit"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Pouze prioritní"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Pouze budíky"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Žádná vyrušení"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Úplné ticho"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> zařízení)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Rozhraní Bluetooth je vypnuto"</string>
@@ -306,26 +313,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Vyhledávání"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Přejeďte prstem nahoru: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Přejeďte prstem doleva: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Žádná vyrušení, dokonce ani budíky."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Nebudou vás rušit zvuky ani vibrace s výjimkou budíků, upozornění, událostí a volajících, které zadáte."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Nebudou vás rušit zvuky ani vibrace s výjimkou budíků, upozornění, událostí a volajících, které zadáte."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Přizpůsobit"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Žádná vyrušení"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Pouze prioritní vyrušení"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Pouze budíky"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Další budík je nastaven na: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Další budík: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Neuslyšíte budík v <xliff:g id="ALARM_TIME">%s</xliff:g>."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"V tomto režimu budou blokovány VŠECHNY zvuky a vibrace, včetně těch z budíků, hudby, videí a her. Telefonovat budete moci i nadále."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Méně urgentní oznámení níže"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Otevřete opětovným klepnutím"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Zařízení odemknete přejetím prstem nahoru"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Telefon otevřete přejetím prstem vpravo."</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Fotoaparát otevřete přejetím prstem vlevo."</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Žádná vyrušení"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Úplné ticho"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Pouze prioritní"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Pouze budíky"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Vše"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Nerušit\n"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Úplné\nticho"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Pouze\nprioritní"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Pouze\nbudíky"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -367,12 +371,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Deaktivovat VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Odpojit VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu. O další informace požádejte svého administrátora."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může monitorovat vaši síťovou aktivitu, včetně e-mailů, aplikací a zabezpečených webů.\n\nO další informace požádejte svého administrátora."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Toto zařízení je spravováno následující organizací:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nVáš pracovní profil je spravován následující organizací:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nAdministrátor může monitorovat vaše zařízení a síťovou aktivitu, včetně e-mailů, aplikací a zabezpečených webů.\n\nO další informace požádejte svého administrátora."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Udělili jste aplikaci oprávnění k nastavení připojení VPN.\n\nTato aplikace může sledovat vaši aktivitu v zařízení a v síti, včetně e-mailů, aplikací a zabezpečených webových stránek."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Udělili jste aplikaci oprávnění k nastavení připojení VPN. \n\nTato aplikace může sledovat vaši aktivitu v zařízení a v síti, včetně e-mailů, aplikací a webových stránek."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu.\n\nJste připojeni k síti VPN, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může monitorovat vaši síťovou aktivitu, včetně e-mailů, aplikací a zabezpečených webů.\n\nO další informace požádejte svého administrátora.\n\nJste také připojeni k síti VPN, která může sledovat vaši aktivitu v síti."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVáš pracovní profil je spravován následující organizací:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nAdministrátor může monitorovat vaši síťovou aktivitu, včetně e-mailů, aplikací a zabezpečených webů.\n\nO další informace požádejte svého administrátora.\n\nJste také připojeni k síti VPN, která může sledovat vaši osobní aktivitu v síti."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může monitorovat vaši síťovou aktivitu, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora.\n\nJste také připojeni k síti VPN, která může sledovat vaši aktivitu v síti."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nTaké jste připojeni k aplikaci <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a informace o jeho poloze.\n\nJste připojeni k aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Zařízení zůstane uzamčeno, dokud je ručně neodemknete"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Čtěte si oznámení rychleji"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Můžete si je přečíst před odemčením obrazovky."</string>
@@ -381,6 +388,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Zobrazit vše"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skrýt vše"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Ukončit"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Obrazovka je připnuta"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Obsah bude připnut v zobrazení, dokud jej neuvolníte. Chcete-li jej uvolnit, stiskněte a podržte současně tlačítka Zpět a Přehled."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Obsah bude připnut v zobrazení, dokud jej neuvolníte. Uvolníte jej stisknutím a podržením tlačítka Přehled."</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 51a5a19..5fb0f8d 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Søg"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Lås op"</string>
     <string name="unlock_label" msgid="8779712358041029439">"lås op"</string>
     <string name="phone_label" msgid="2320074140205331708">"åbn telefon"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"åbn kamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Vælg nyt opgavelayout"</string>
     <string name="cancel" msgid="6442560571259935130">"Annuller"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX to bjælker."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX tre bjælker."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-signal er fuldt."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet er ikke tilsluttet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet er tilsluttet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Intet signal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Ikke tilsluttet."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nul bjælker."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> er annulleret."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle de seneste applikationer er lukket."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> startes."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Underretningen er annulleret."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Underretningspanel."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hurtige indstillinger."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Låseskærm."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Indstillinger"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Oversigt."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Bekræft"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Luk"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Bruger <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi er slået fra."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flytilstand er slået fra."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flytilstand er slået til."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Vil ikke forstyrres\" er slået til, kun prioritet."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Vil ikke forstyrres\" er slået til, ingen afbrydelser."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Vil ikke forstyrres\" er slået til, total stilhed."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Vil ikke forstyrres\" er slået til, kun alarmer."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Vil ikke forstyrres\" er slået fra."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Vil ikke forstyrres\" er slået fra."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Vil ikke forstyrres"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Kun prioritet"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Kun Alarmer"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ingen afbrydelser"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Total stilhed"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheder)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth slået fra"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Søgning"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Glid op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Glid til venstre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Ingen afbrydelser. Ikke engang alarmer."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Du bliver ikke forstyrret af lyde og vibrationer undtagen fra de alarmer, påmindelser, begivenheder og opkaldere, som du angiver."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Du bliver ikke forstyrret af lyde og vibrationer undtagen fra de alarmer, påmindelser, begivenheder og opkaldere, som du angiver."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tilpas"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Ingen afbrydelser"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Kun prioriterede afbrydelser"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Kun Alarmer"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Dit næste alarm er indstillet til kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Din næste alarm er indstillet til <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Du vil ikke kunne høre din alarm kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Dette blokerer ALLE lyde og vibrationer, herunder fra alarmer, musik, videoer og spil. Du vil stadig kunne foretage telefonopkald."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre presserende underretninger nedenfor"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Tryk igen for at åbne"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Stryg for at låse op"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Stryg til højre for at bruge telefonen"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Stryg til venstre for at åbne kameraet"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Ingen afbrydelser"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Total stilhed"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Kun prioritet"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Kun Alarmer"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Ingen\nafbrydelser"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nstilhed"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Kun\nprioritet"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Kun\nalarmer"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Oplader (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Deaktiver VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Afbryd VPN-forbindelse"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Din enhed administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps, data, der er knyttet til din enhed, og din enheds placeringsoplysninger. Kontakt din administrator, hvis du vil have flere oplysninger."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge din netværksaktivitet, herunder e-mails, apps og sikre websites.\n\nKontakt din administrator, hvis du vil have flere oplysninger."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Din enhed administreres af:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nDin arbejdsprofil administreres af:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nDin administrator kan overvåge din enhed og netværksaktivitet, herunder e-mails, apps og sikre websites.\n\nKontakt din administrator, hvis du vil have flere oplysninger."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Du har givet en app tilladelse til at oprette en VPN-forbindelse.\n\nDenne app kan overvåge din enhed og netværksaktivitet, herunder e-mails, apps og sikre websites."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Du gav en app tilladelse til at konfigurere en VPN-forbindelse.\n\nDenne app kan overvåge din enhed og netværksaktivitet, bl.a. e-mails, apps og websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Din enhed administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps, data, der er knyttet til din enhed, og din enheds placeringsoplysninger.\n\nDu har forbindelse til et VPN, som kan overvåge din netværksaktivitet, herunder e-mails, apps og websites.\n\nKontakt din administrator, hvis du vil have flere oplysninger."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge din netværksaktivitet, herunder e-mails, apps og sikre websites.\n\nKontakt din administrator, hvis du vil have flere oplysninger.\n\nDu har også forbindelse til et VPN, som kan overvåge din netværksaktivitet."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Din enhed administreres af <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nDin arbejdsprofil administreres af:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nDin administrator kan overvåge din netværksaktivitet, herunder e-mail, apps og sikre websites.\n\nKontakt din administrator, hvis du vil have flere oplysninger.\n\nDu har også forbindelse til et VPN, som kan overvåge din personlige netværksaktivitet."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger.\n\nDu er også forbundet til en VPN-forbindelse, som kan overvåge din netværksaktivitet."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din personlige netværksaktivitet, bl.a. e-mails, apps og websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nDu er også forbundet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåge din personlige netværksaktivitet."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Din enhed administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedens adgang, data tilknyttet din enhed og enhedens placeringsoplysninger.\n\nDu er forbundet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheden vil forblive låst, indtil du manuelt låser den op"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Modtag underretninger hurtigere"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem, før du låser op"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Se alle"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skjul alle"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Afslut nu"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skærmen er fastgjort"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Dette fastholder den i visningen, indtil du frigør den. Tryk på Tilbage og Oversigt på samme tid, og hold dem nede for at frigøre denne skærm."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Dette fastholder den i visningen, indtil du frigør den. Tryk på Oversigt, og hold den nede for at frigøre denne skærm."</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index a0fe215..27202d3 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Suchen"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefonnummer"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Entsperren"</string>
     <string name="unlock_label" msgid="8779712358041029439">"Entsperren"</string>
     <string name="phone_label" msgid="2320074140205331708">"Telefon öffnen"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"Kamera öffnen"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Neues Aufgabenlayout auswählen"</string>
     <string name="cancel" msgid="6442560571259935130">"Abbrechen"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX - zwei Balken"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX - drei Balken"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Volle WiMAX-Signalstärke"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet nicht verbunden"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet verbunden"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Kein Signal"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Nicht verbunden"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Kein Balken"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> entfernt"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle kürzlich verwendeten Apps wurden entfernt."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> wird gestartet."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Benachrichtigung geschlossen"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Benachrichtigungsleiste"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Schnelleinstellungen"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Sperrbildschirm"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Einstellungen"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Übersicht"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Bestätigen"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Schließen"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Nutzer: <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WLAN ist deaktiviert."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Der Flugmodus ist deaktiviert."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Der Flugmodus ist aktiviert."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Nicht stören\" an, nur wichtige Unterbrechungen"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Nicht stören\" an, keine Unterbrechungen"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Nicht stören, lautlos"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Nicht stören\" an, nur Wecker"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Nicht stören\" aus"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Nicht stören\" deaktiviert"</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nicht stören"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Nur wichtige Unterbrechungen"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Nur Wecker"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Keine Unterbrechungen"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Lautlos"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Geräte)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth aus"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Suche"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben schieben"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach links schieben"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Keine Unterbrechungen. Auch keine Weckrufe."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Klingeltöne und die Vibration werden deaktiviert, außer für den Wecker, Erinnerungen, Termine sowie Anrufe von zuvor von Ihnen festgelegten Personen."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Klingeltöne und die Vibration werden deaktiviert, außer für Weckrufe, Erinnerungen, Termine sowie Anrufe von zuvor von Ihnen festgelegten Personen."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Anpassen"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Keine Unterbrechungen"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Nur wichtige Unterbrechungen"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Nur Wecker"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Nächster Weckruf: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Nächster Weckruf: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Lautloser Weckruf um <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Hierdurch werden alle Klingeltöne und Vibrationsalarme stummgeschaltet, auch für Weckrufe, Musik, Videos und Spiele. Anrufe können Sie jedoch weiterhin tätigen."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Weniger dringende Benachrichtigungen unten"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Zum Öffnen erneut berühren"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Zum Entsperren nach oben wischen"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Zum Öffnen des Telefons nach rechts wischen"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Zum Öffnen der Kamera nach links wischen"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Keine Unterbrechungen"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Lautlos"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Nur wichtige Unterbrechungen"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Nur Wecker"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Keine\nUnterbrechungen"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Laut-\nlos"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Nur\nwichtige"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Nur\nWecker"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Wird aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN deaktivieren"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN-Verbindung trennen"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Ihr Gerät wird verwaltet von <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nIhr Administrator kann die zu Ihrem Gerät gehörigen Einstellungen, Unternehmenszugriffsrechte, Apps und Daten überwachen und verwalten, einschließlich der Standortinformationen Ihres Geräts. Weitere Informationen erhalten Sie bei Ihrem Administrator."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Ihr Arbeitsprofil wird verwaltet von <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nIhr Administrator kann Ihre Netzwerkaktivität überwachen, einschließlich E-Mails, Apps und sicherer Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Ihr Gerät wird verwaltet von:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nIhr Arbeitsprofil wird verwaltet von:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nIhr Administrator kann Ihr Gerät und Ihre Netzwerkaktivität überwachen, einschließlich E-Mails, Apps und sicherer Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Sie haben einer App gestattet, eine VPN-Verbindung herzustellen.\n\nDiese App kann Ihr Gerät und Ihre Netzwerkaktivitäten überwachen, einschließlich E-Mails, Apps und sicherer Websites."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Sie haben einer App gestattet, eine VPN-Verbindung einzurichten.\n\nDiese App kann Ihr Gerät und Ihre Netzwerkaktivitäten überwachen, einschließlich E-Mails, Apps und Websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Ihr Gerät wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nIhr Administrator kann die zu Ihrem Gerät gehörigen Einstellungen, Unternehmenszugriffsrechte, Apps und Daten überwachen und verwalten, einschließlich der Standortinformationen Ihres Geräts.\n\nSie sind zudem mit einem VPN verbunden, das Ihre persönliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Ihr Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nIhr Administrator kann Ihre Netzwerkaktivität überwachen, einschließlich E-Mails, Apps und sicherer Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator.\n\nSie sind zudem mit einem VPN verbunden, das Ihre persönliche Netzwerkaktivität überwachen kann."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Ihr Gerät wird verwaltet von <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nIhr Arbeitsprofil wird verwaltet von:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nIhr Administrator kann Ihre Netzwerkaktivität überwachen, einschließlich E-Mails, Apps und sicherer Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator.\n\nSie sind zudem mit einem VPN verbunden, das Ihre persönliche Netzwerkaktivität überwachen kann."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Ihr Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nIhr Administrator kann Ihre Netzwerkaktivität überwachen, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator.\n\nSie sind zudem mit einem VPN verbunden, das Ihre persönliche Netzwerkaktivität überwachen kann."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Sie sind mit der App <xliff:g id="APPLICATION">%1$s</xliff:g> verbunden, die Ihre Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Sie sind mit der App <xliff:g id="APPLICATION">%1$s</xliff:g> verbunden, die Ihre persönliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Ihr Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION">%2$s</xliff:g> verbunden, die Ihre geschäftlichen Netzwerkaktivitäten überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Ihr Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> verbunden, die Ihre geschäftliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nSie sind außerdem mit der App <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> verbunden, die Ihre persönliche Netzwerkaktivität überwachen kann."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Ihr Gerät wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nIhr Administrator kann die zu Ihrem Gerät gehörigen Einstellungen, Unternehmenszugriffsrechte, Apps und Daten überwachen und verwalten, einschließlich der Standortinformationen Ihres Geräts.\n\nSie sind mit der App <xliff:g id="APPLICATION">%2$s</xliff:g> verbunden, die Ihre persönlichen Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhalten Sie bei Ihrem Administrator."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Das Gerät bleibt gesperrt, bis Sie es manuell entsperren."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Benachrichtigungen schneller erhalten"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Vor dem Entsperren anzeigen"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Alle anzeigen"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Alle ausblenden"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Jetzt beenden"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Bildschirm ist fixiert"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Der Bildschirm wird solange angezeigt, bis Sie die Fixierung aufheben. Berühren und halten Sie \"Zurück\" und \"Übersicht\" gleichzeitig, um die Fixierung aufzuheben."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Der Bildschirm wird solange angezeigt, bis Sie die Fixierung aufheben. Berühren und halten Sie \"Übersicht\", wenn Sie die Fixierung aufheben möchten."</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 5d3adf7..d2ef477 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Αναζήτηση"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Φωτογραφική μηχανή"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Τηλέφωνο"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Ξεκλείδωμα"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ξεκλείδωμα"</string>
     <string name="phone_label" msgid="2320074140205331708">"άνοιγμα τηλεφώνου"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"άνοιγμα φωτογραφικής μηχανής"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Επιλέξτε τη νέα διάταξη εργασίας"</string>
     <string name="cancel" msgid="6442560571259935130">"Ακύρωση"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Σήμα WiMAX δύο γραμμές."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Σήμα WiMAX τρεις γραμμές."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Πλήρες σήμα WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Το Ethernet αποσυνδέθηκε."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Το Ethernet συνδέθηκε."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Δεν υπάρχει σήμα."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Δεν έχει συνδεθεί."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Μηδέν γραμμές."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Απορρίφθηκαν <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Έγινε παράβλεψη όλων των πρόσφατων εφαρμογών."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Έναρξη <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Η ειδοποίηση έχει απορριφθεί."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Πλαίσιο σκίασης ειδοποιήσεων."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Γρήγορες ρυθμίσεις."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Κλείδωμα οθόνης."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Ρυθμίσεις"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Επισκόπηση."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Επιβεβαίωση"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Κλείσιμο"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Χρήστης <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Το Wi-fi απενεργοποιήθηκε."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Η λειτουργία πτήσης απενεργοποιήθηκε."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ενεργή λειτουργία πτήσης."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε, μόνο προτεραιότητας."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε, χωρίς διακοπές."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε, πλήρης σίγαση."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Μην ενοχλείτε, μόνο ειδοποιήσεις."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Η λειτουργία \"Μην ενοχλείτε\" απενεργοποιήθηκε."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Η λειτουργία \"Μην ενοχλείτε\" απενεργοποιήθηκε."</string>
@@ -237,7 +244,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="7309935569360609114">"Χωρίς διακοπές"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Πλήρης σίγαση"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> συσκευές)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Απενεργοποιημένο Bluetooth"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Αναζήτηση"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Κύλιση προς τα επάνω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Κύλιση προς τα αριστερά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Χωρίς διακοπές. Ούτε ειδοποιήσεις,"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Δεν θα διακόπτεστε από ήχους και δονήσεις, με εξαίρεση τα ξυπνητήρια, τις υπενθυμίσεις, τα συμβάντα και τους καλούντες που έχετε ορίσει."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Δεν θα διακόπτεστε από ήχους και δονήσεις, με εξαίρεση τα ξυπνητήρια, τις υπενθυμίσεις, τα συμβάντα και τους καλούντες που έχετε ορίσει."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Προσαρμογή"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Χωρίς διακοπές"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Μόνο διακοπές προτεραιότητας"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Μόνο ειδοποιήσεις"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Το επόμενο ξυπνητήρι είναι στις <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Το επόμενο ξυπνητήρι είναι στις <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Δεν θα ακούτε το ξυπνητήρι σας στις <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Αυτή η επιλογή αποκλείει ΟΛΟΥΣ τους ήχους και τις δονήσεις, μεταξύ των οποίων των ξυπνητηριών, της μουσικής, των βίντεο και των παιχνιδιών. Θα εξακολουθείτε να είστε σε θέση να πραγματοποιήσετε τηλεφωνικές κλήσεις."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Λιγότερο επείγουσες ειδοποιήσεις παρακάτω"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Αγγίξτε ξανά για άνοιγμα"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Σύρετε για να ξεκλειδώσετε"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Σύρετε προς τα δεξιά για το τηλέφωνο"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Σύρετε αριστερά για τη φωτογραφική μηχανή"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Χωρίς διακοπές"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Όλα"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Χωρίς\nδιακοπές"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Απενεργοποίηση VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Αποσύνδεση VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Η διαχείριση αυτής της συσκευής γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής σας έχει τη δυνατότητα να παρακολουθεί και να διαχειρίζεται τις ρυθμίσεις, την εταιρική πρόσβαση, τις εφαρμογές και τα δεδομένα που σχετίζονται με αυτήν τη συσκευή, συμπεριλαμβανομένων των πληροφοριών τοποθεσίας της συσκευής σας. Για περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή σας."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Η διαχείριση του προφίλ εργασίας γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής μπορεί να παρακολουθεί τη δραστηριότητα δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ασφαλών ιστότοπων.\n\nΓια πληροφορίες, επικοινωνήστε με το διαχειριστή."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Η διαχείριση της συσκευής γίνεται από:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nΗ διαχείριση του προφίλ εργασίας σας γίνεται από:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nΟ διαχειριστής μπορεί να παρακολουθεί τη συσκευή και τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ασφαλών ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Παραχωρήσατε σε μια εφαρμογή άδεια για τη δημιουργία σύνδεσης VPN.\n\nΑυτή η εφαρμογή μπορεί να παρακολουθεί τη δραστηριότητα της συσκευής σας και του δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ασφαλών ιστότοπων."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Παραχωρήσατε σε μια εφαρμογή άδεια για τη ρύθμιση σύνδεσης VPN.\n\nΑυτή η εφαρμογή μπορεί να παρακολουθεί τη δραστηριότητα της συσκευής και του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Η διαχείριση αυτής της συσκευής γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής σας έχει τη δυνατότητα να παρακολουθεί και να διαχειρίζεται τις ρυθμίσεις, την εταιρική πρόσβαση, τις εφαρμογές και τα δεδομένα που σχετίζονται με αυτήν τη συσκευή, συμπεριλαμβανομένων των πληροφοριών τοποθεσίας της συσκευής σας.\n\nΕίστε επίσης συνδεδεμένοι σε ένα VPN, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή σας."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Η διαχείριση του προφίλ εργασίας γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής μπορεί να παρακολουθεί τη δραστηριότητα δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ασφαλών ιστότοπων.\n\nΓια πληροφορίες, επικοινωνήστε με το διαχειριστή.\n\nΕίστε επίσης συνδεδεμένοι σε ένα VPN, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Η διαχείριση της συσκευής σας γίνεται από  <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nΗ διαχείριση του προφίλ εργασίας σας γίνεται από:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nΟ διαχειριστής μπορεί να παρακολουθεί τη δραστηριότητα δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ασφαλών ιστότοπων.\n\nΓια πληροφορίες, επικοινωνήστε με το διαχειριστή σας.\n\nΕίστε επίσης συνδεδεμένοι σε ένα VPN, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής έχει τη δυνατότητα παρακολούθησης της δραστηριότητας του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή.\n\nΕπίσης, είστε συνδεδεμένοι σε VPN, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου σας."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του προσωπικού σας δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Είναι συνδεδεμένο στην εφαρμογή <xliff:g id="APPLICATION">%2$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου εργασίας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Είναι συνδεδεμένο στην εφαρμογή <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου εργασίας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΕπίσης, είστε συνδεδεμένοι στην εφαρμογή <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του προσωπικού σας δικτύου."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Η διαχείριση της συσκευής γίνεται από <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής μπορεί να παρακολουθεί και να διαχειρίζεται ρυθμίσεις, εταιρική πρόσβαση, εφαρμογές, δεδομένα σχετικά με τη συσκευή και πληρ. τοποθεσίας της συσκευής.\n\nΕίστε συνδεδ. σε <xliff:g id="APPLICATION">%2$s</xliff:g> που μπορεί να παρακολουθεί τη δραστηρ. του δικτύου εργασίας, όπως μηνύματα ηλεκτρ. ταχυδρομείου, εφαρμογές και ιστότοπους.\n\nΓια περισ. πληροφορίες, επικοινωνήστε με το διαχειριστή."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Η συσκευή θα παραμείνει κλειδωμένη έως ότου την ξεκλειδώσετε μη αυτόματα"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Λάβετε ειδοποιήσεις γρηγορότερα"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Εμφάνιση πριν το ξεκλείδωμα"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Εμφάνιση όλων"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Aπόκρυψη όλων"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Τερματισμός τώρα"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Η οθόνη καρφιτσώθηκε"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Με αυτόν τον τρόπο παραμένει σε προβολή έως ότου την ξεκαρφιτσώσετε. Αγγίξτε παρατεταμένα \"Επιστροφή\" και \"Επισκόπηση\" ταυτόχρονα για ξεκαρφίτσωμα."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Με αυτόν τον τρόπο παραμένει σε προβολή έως ότου την ξεκαρφιτσώσετε. Αγγίξτε παρατεταμένα \"Επισκόπηση\" για ξεκαρφίτσωμα."</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 8bf8cf0..89f725c 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Phone"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"Voice Assist"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string>
     <string name="unlock_label" msgid="8779712358041029439">"unlock"</string>
     <string name="phone_label" msgid="2320074140205331708">"open phone"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
     <string name="camera_label" msgid="7261107956054836961">"open camera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancel"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX two bars."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX three bars."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signal full."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet disconnected."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet connected."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"No signal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Not connected."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero bars."</string>
@@ -162,13 +166,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirm"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Close"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"User <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string>
@@ -180,7 +185,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'Do not disturb\' on, no interruptions."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Do not disturb on, total silence."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Do not disturb on, alarms only."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string>
@@ -235,7 +240,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"No interruptions"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Total silence"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string>
@@ -302,26 +307,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"No interruptions. Not even alarms."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Customise"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"No interruptions"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Priority interruptions only"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Alarms only"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Your next alarm is at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Your next alarm is <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"You won\'t hear your alarm at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games. You’ll still be able to make phone calls."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Touch again to open"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Swipe right for phone"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Swipe left for camera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"No interruptions"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"Swipe from icon for phone"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"Swipe from icon for voice assist"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"Swipe from icon for camera"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"Total silence"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Priority only"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarms only"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"All"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"No\ninterruptions"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nsilence"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priority\nonly"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarms\nonly"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
@@ -363,12 +362,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information. For more information, contact your administrator."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Your device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and secure websites."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nYou\'re connected to a VPN, which can monitor your network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Your device is managed by <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your personal network activity"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string>
@@ -377,6 +379,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"See all"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Hide all"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"End now"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"Expand"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Collapse"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"This keeps it in view until you unpin. Touch and hold Overview to unpin."</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 8bf8cf0..89f725c 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Phone"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"Voice Assist"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string>
     <string name="unlock_label" msgid="8779712358041029439">"unlock"</string>
     <string name="phone_label" msgid="2320074140205331708">"open phone"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
     <string name="camera_label" msgid="7261107956054836961">"open camera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancel"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX two bars."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX three bars."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signal full."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet disconnected."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet connected."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"No signal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Not connected."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero bars."</string>
@@ -162,13 +166,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirm"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Close"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"User <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string>
@@ -180,7 +185,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'Do not disturb\' on, no interruptions."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Do not disturb on, total silence."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Do not disturb on, alarms only."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string>
@@ -235,7 +240,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"No interruptions"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Total silence"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string>
@@ -302,26 +307,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"No interruptions. Not even alarms."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Customise"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"No interruptions"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Priority interruptions only"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Alarms only"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Your next alarm is at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Your next alarm is <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"You won\'t hear your alarm at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games. You’ll still be able to make phone calls."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Touch again to open"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Swipe right for phone"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Swipe left for camera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"No interruptions"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"Swipe from icon for phone"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"Swipe from icon for voice assist"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"Swipe from icon for camera"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"Total silence"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Priority only"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarms only"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"All"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"No\ninterruptions"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nsilence"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priority\nonly"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarms\nonly"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
@@ -363,12 +362,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information. For more information, contact your administrator."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Your device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and secure websites."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nYou\'re connected to a VPN, which can monitor your network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Your device is managed by <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your personal network activity"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string>
@@ -377,6 +379,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"See all"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Hide all"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"End now"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"Expand"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Collapse"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"This keeps it in view until you unpin. Touch and hold Overview to unpin."</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 8bf8cf0..89f725c 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Phone"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"Voice Assist"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string>
     <string name="unlock_label" msgid="8779712358041029439">"unlock"</string>
     <string name="phone_label" msgid="2320074140205331708">"open phone"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
     <string name="camera_label" msgid="7261107956054836961">"open camera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancel"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX two bars."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX three bars."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signal full."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet disconnected."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet connected."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"No signal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Not connected."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero bars."</string>
@@ -162,13 +166,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirm"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Close"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"User <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string>
@@ -180,7 +185,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'Do not disturb\' on, no interruptions."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Do not disturb on, total silence."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Do not disturb on, alarms only."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string>
@@ -235,7 +240,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"No interruptions"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Total silence"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string>
@@ -302,26 +307,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"No interruptions. Not even alarms."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Customise"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"No interruptions"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Priority interruptions only"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Alarms only"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Your next alarm is at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Your next alarm is <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"You won\'t hear your alarm at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games. You’ll still be able to make phone calls."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Touch again to open"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Swipe right for phone"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Swipe left for camera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"No interruptions"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"Swipe from icon for phone"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"Swipe from icon for voice assist"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"Swipe from icon for camera"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"Total silence"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Priority only"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarms only"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"All"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"No\ninterruptions"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nsilence"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priority\nonly"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarms\nonly"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
@@ -363,12 +362,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information. For more information, contact your administrator."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Your device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and secure websites."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nYou\'re connected to a VPN, which can monitor your network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Your device is managed by <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your personal network activity"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string>
@@ -377,6 +379,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"See all"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Hide all"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"End now"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"Expand"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Collapse"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"This keeps it in view until you unpin. Touch and hold Overview to unpin."</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 7454a71..8e9efc8 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Buscar"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Cámara"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Teléfono"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string>
     <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string>
     <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Selecciona el nuevo diseño de la tarea."</string>
     <string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Dos barras de WiMAX"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Tres barras de WiMAX"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Señal de WiMAX al máximo"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet desconectada"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet conectada"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Sin señal"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"No conectado"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Cero barras"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartada."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Se descartaron todas las aplicaciones recientes."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificación ignorada"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Pantalla de notificaciones"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuración rápida"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla bloqueada"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Configuración"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Recientes"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmar"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Cerrar"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Usuario <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi desactivado"</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo de avión desactivado"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo de avión activado"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"No molestar activado (solo prioridad)"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"No molestar activado (sin interrupciones)"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"No molestar activado, silencio total"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"No molestar activado (solo alarmas)"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"No molestar desactivado"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"No molestar desactivado"</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molestar"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo prioridad"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Solo alarmas"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sin interrupciones"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Silencio total"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Sin interrupciones (ni siquiera alarmas)"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"No te molestarán los sonidos ni las vibraciones, excepto que se trate de alarmas, recordatorios, eventos y emisores que especifiques."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"No te molestarán los sonidos ni las vibraciones, excepto que se trate de alarmas, recordatorios, eventos y emisores que especifiques."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Sin interrupciones"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Solo interrupciones de prioridad"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Solo alarmas"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Próxima alarma a la(s) <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Próxima alarma: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"No oirás la alarma a la(s) <xliff:g id="ALARM_TIME">%s</xliff:g>."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Esta acción bloquea TODOS los sonidos y las vibraciones, incluidas las que provienen de alarmas, videos y juegos. Podrás realizar llamadas telefónicas."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificaciones menos urgentes abajo"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Vuelve a tocar para abrir."</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Deslizar el dedo hacia arriba para desbloquear"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Desliza hacia la derecha para abrir el teléfono."</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Desliza hacia la izquierda para acceder a la cámara."</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Sin interrupciones"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Silencio total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Solo prioridad"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Solo alarmas"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Todo"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Sin\ninterrupciones"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silencio\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo\nprioridad"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nalarmas"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (faltan <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Inhabilitar VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu dispositivo.\n\nEl administrador puede supervisar y administrar la configuración, el acceso corporativo, las aplicaciones, los datos asociados a este dispositivo y la información de ubicación del dispositivo. Para obtener más información, comunícate con el administrador."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo.\n\nEl administrador puede supervisar la actividad de red, incluidos los correos electrónicos, las aplicaciones y los sitios web seguros.\n\nPara obtener más información, comunícate con el administrador."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Administrador de tu dispositivo:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nAdministrador de tu perfil:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nEl administrador puede supervisar el dispositivo y la actividad de red, incluidos correos electrónicos, aplicaciones y sitios web seguros.\n\nPara obtener más información, comunícate con el administrador."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Permitiste que una aplicación configure una conexión VPN.\n\nEsta aplicación puede supervisar la actividad de la red y del dispositivo, incluidos el correo electrónico, las aplicaciones y los sitios web seguros."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Permitiste que una aplicación configurara una conexión VPN.\n\nEsta aplicación puede supervisar la actividad de la red y del dispositivo, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu dispositivo.\n\nEl administrador puede supervisar y administrar la configuración, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo y la información de ubicación.\n\nTambién tienes una conexión VPN, que puede supervisar la actividad de la red (correo electrónico, aplicaciones y sitios web).\n\nPara obtener más información, comunícate con el administrador."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo.\n\nEl administrador puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web seguros.\n\nPara obtener más información, comunícate con el administrador.\n\nTambién tienes una conexión VPN, que puede supervisar la actividad de la red."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Administrador del dispositivo: <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nAdministrador del perfil de trabajo:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nEl administrador puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web seguros.\n\nPara obtener más información, comunícate con el administrador.\n\nTambién tienes una conexión VPN, que puede supervisar tu actividad de la red personal."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo.\n\nEl administrador puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador.\n\nTambién tienes conexión a una VPN, que puede supervisar la actividad de tu red."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Tienes conexión a la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Tienes conexión a la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de la red personal, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nTambién tienes conexión a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede supervisar la actividad de la red personal."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu dispositivo.\n\nEl administrador puede supervisar y administrar la configuración, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo y la información de la ubicación.\n\nTienes conexión a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositivo permanecerá bloqueado hasta que lo desbloquees manualmente."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Recibe notificaciones más rápido"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver todas"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar todas"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Finalizar ahora"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Pantalla fija"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Esta función mantiene fija la vista de la pantalla hasta que la desactivas. Mantén presionados los botones Atrás y Recientes al mismo tiempo para anular la fijación."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Esta función mantiene fija la vista de la pantalla hasta que la desactivas. Mantén presionado el botón Recientes para anular la fijación."</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index b8e81d3..b7fb565 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Buscar"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Cámara"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Teléfono"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string>
     <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string>
     <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Seleccionar diseño de tarea nueva"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Dos barras de WiMAX"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Tres barras de WiMAX"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Señal de WiMAX al máximo"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Conexión Ethernet desconectada."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Conexión Ethernet conectada."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"No hay señal"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Sin conexión"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Ninguna barra"</string>
@@ -144,7 +150,7 @@
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Tipo Edge"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"Sin tarjeta SIM"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Anclaje por Bluetooth"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Compartir por Bluetooth"</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
     <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Cambiando red de operador."</string>
     <string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> por ciento de batería"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Se ha eliminado <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Se han ignorado todas las aplicaciones recientes."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificación ignorada"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Pantalla de notificaciones"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Ajustes rápidos"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla de bloqueo."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Ajustes"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visión general."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmar"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Cerrar"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Usuario <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi desactivado."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo avión desactivado."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo avión activado."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"No molestar activado (solo prioritarias)."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"No molestar activado (sin interrupciones)."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"No molestar activado, silencio total"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"No molestar activado, solo alarmas."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"No molestar desactivado."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"No molestar desactivado."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molestar"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo prioritarias"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Solo alarmas"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sin interrupciones"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Silencio total"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string>
@@ -274,7 +281,7 @@
     <string name="quick_settings_done" msgid="3402999958839153376">"Listo"</string>
     <string name="quick_settings_connected" msgid="1722253542984847487">"Conectado"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"Conectando..."</string>
-    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Anclaje a red"</string>
+    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Compartir Internet"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona Wi-Fi"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notificaciones"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Linterna"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Sin interrupciones, ni siquiera alarmas."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"No te interrumpirán sonidos ni vibraciones, salvo los de las alarmas, los recordatorios, los eventos y las llamadas que especifiques."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"No te interrumpirán sonidos ni vibraciones, salvo los de las alarmas, los recordatorios, los eventos y las llamadas que especifiques."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Sin interrupciones"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Solo interrupciones de prioridad"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Solo alarmas"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Siguiente alarma: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Siguiente alarma: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"No oirás tu alarma a las <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Esta opción bloqueará TODOS los sonidos y todas las vibraciones, por ejemplo, los vídeos, los juegos, las alarmas y la música. Seguirás pudiendo hacer llamadas de teléfono."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificaciones menos urgente abajo"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Vuelve a tocar para abrir"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Desliza el dedo hacia arriba para desbloquear"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Desliza el dedo hacia la derecha para acceder al teléfono"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Desliza el dedo hacia la izquierda para acceder a la cámara"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Sin interrupciones"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Silencio total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Solo prioritarias"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Solo alarmas"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Todo"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Sin\ninterrupciones"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silencio\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo\ncon prioridad"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nalarmas"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Inhabilitar VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Administrador de tu dispositivo: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nEl administrador puede controlar y administrar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo e información de su ubicación. Para obtener más información, ponte en contacto con el administrador."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Administrador de tu perfil de trabajo: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nEl administrador puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web seguros.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Administrador de tu dispositivo:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nAdministrador de tu perfil de trabajo:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nEl administrador puede controlar tu dispositivo y tu actividad de red, como correos electrónicos, aplicaciones y sitios web seguros.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Has concedido permiso a una aplicación para configurar una conexión VPN.\n\nEsta aplicación puede controlar tu dispositivo y tu actividad de red, como correos electrónicos, aplicaciones y sitios web seguros."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Has concedido permiso a una aplicación para configurar una conexión VPN.\n\nEsta aplicación puede supervisar tu dispositivo y tu actividad de red, como correos electrónicos, aplicaciones y sitios web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Administrador del dispositivo: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nEl administrador puede controlar y administrar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo e información de su ubicación.\n\nEstás conectado a una red VPN que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Administrador de tu perfil de trabajo: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nEl administrador puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web seguros.\n\nPara obtener más información, ponte en contacto con el administrador.\n\nAsimismo, estás conectado a una red VPN que puede controlar tu actividad de red."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Administrador del dispositivo: <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nAdministrador de tu perfil de trabajo:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nEl administrador puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web seguros.\n\nPara obtener más información, ponte en contacto con el administrador.\n\nAsimismo, estás conectado a una red VPN que puede controlar tu actividad de red personal"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nTu administrador puede supervisar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con tu administrador.\n\nTambién estás conectado a una red VPN que puede supervisar tu actividad de red."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar tu actividad de red, como correos electrónicos, aplicaciones y sitios web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar tu actividad de red personal, como correos electrónicos, aplicaciones y sitios web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este administrador está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar tu actividad de red del trabajo, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con tu administrador."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este administrador está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede supervisar tu actividad de red del trabajo, como correos electrónicos, aplicaciones y sitios web.\n\nTambién estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede supervisar tu actividad de red personal."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"El administrador de tu dispositivo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nTu administrador puede supervisar y administrar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo e información de su ubicación.\n\nEstás conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con tu administrador."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositivo permanecerá bloqueado hasta que se desbloquee manualmente"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Recibe notificaciones más rápido"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver todas"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar todas"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Finalizar ahora"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Pantalla fijada"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"La pantalla se mantendrá visible hasta que dejes de fijarla. Para ello, mantén pulsados los botones de retroceso e información general."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"La pantalla se mantendrá visible hasta que dejes de fijarla. Para ello, mantén pulsado el botón de información general."</string>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index b535fd8c..bd15bec 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Otsing"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kaamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Luku avamine"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ava lukk"</string>
     <string name="phone_label" msgid="2320074140205331708">"ava telefon"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ava kaamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Uue toimingu paigutuse valimine"</string>
     <string name="cancel" msgid="6442560571259935130">"Tühista"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-i on kaks riba."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-i on kolm riba."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-i signaal on tugev."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Etherneti-ühendus on katkestatud."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Etherneti-ühendus on loodud."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Signaal puudub."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Ühendus puudub."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Null pulka."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Loobusite rakendusest <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Kõikidest hiljutistest rakendustest on loobutud"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Rakenduse <xliff:g id="APP">%s</xliff:g> käivitamine."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g>, <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Märguandest on loobutud."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Märguande vari."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Kiirseaded."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Kuva lukustamine."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Seaded"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ülevaade."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Kinnitamine"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Sulgemine"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Kasutaja <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi on välja lülitatud."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lennukirežiim on välja lülitatud."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lennukirežiim on sisse lülitatud."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Funktsioon Mitte segada on sisse lülitatud (ainult prioriteetsed)."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Funktsioon Mitte segada on sisse lülitatud (mitte ühtegi katkestust)."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Funktsioon Mitte segada on sisse lülitatud, täielik vaikus."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Funktsioon Mitte segada on sisse lülitatud (ainult alarmid)."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Funktsioon Mitte segada on välja lülitatud."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Funktsioon Mitte segada on välja lülitatud."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Mitte segada"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Ainult prioriteetsed"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Ainult alarmid"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Mitte ühtegi katkestust"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Täielik vaikus"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> seadet)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth on väljas"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Katkestusi pole. Pole isegi hoiatusi."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Teid segatakse helide ja vibratsioonidega vaid teie määratud alarmide, meeldetuletuste, sündmuste ning helistajate puhul."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Teid segatakse helide ja värinaga vaid teie määratud alarmide, meeldetuletuste, sündmuste ning helistajate puhul."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Kohanda"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Mitte ühtegi katkestust"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Ainult prioriteetsed katkestused"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Ainult alarmid"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Teie järgmine äratus on <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Teie järgmine äratus on <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Te ei kuule äratust <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"See blokeerib KÕIK helid ja värinad, sh alarmide, muusika, videote ja mängude omad. Saate siiski helistada."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Vähem kiireloomulised märguanded on allpool"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Avamiseks puudutage uuesti"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Lukustuse tühistamiseks pühkige üles"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Telefoni kasutamiseks pühkige paremale"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Kaamera kasutamiseks pühkige vasakule"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Katkestusi pole"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Täielik vaikus"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Ainult prioriteetsed"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Ainult alarmid"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Kõik"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Katkestusi\npole"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Täielik\nvaikus"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Ainult\nprioriteetsed"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Ainult\nalarmid"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laadimine (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>, kuni seade on täis)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Keela VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Katkesta VPN-i ühendus"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Teie seadet haldab <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida ja hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet. Lisateabe saamiseks võtke ühendust administraatoriga."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Teie tööprofiili haldab <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida teie võrgutegevusi, sh meile, rakendusi ja turvalisi veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Teie seadet haldab:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nTeie tööprofiili haldab:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministraator saab jälgida teie seadet ja võrgutegevusi, sh meile, rakendusi ja turvalisi veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Andsite rakendusele loa VPN-i ühenduse seadistamiseks.\n\nSee rakendus saab jälgida teie seadet ja võrgutegevusi, sh meile, rakendusi ja turvalisi veebisaite."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Andsite rakendusele loa VPN-i ühenduse seadistamiseks.\n\nSee rakendus võib jälgida teie seadet ja võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Teie seadet haldab <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida ja hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet.\n\nTeil on ühendus VPN-iga, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Teie tööprofiili haldab <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida teie võrgutegevusi, sh meile, rakendusi ja turvalisi veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga.\n\nTeil on ühendus ka VPN-iga, mis saab jälgida teie võrgutegevusi."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Teie seadet haldab <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nTeie profiili haldab:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministraator saab jälgida teie võrgutegevusi, sh meile, rakendusi ja turvalisi veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga.\n\nTeil on ühendus ka VPN-iga, mis saab jälgida teie isiklikke võrgutegevusi"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga.\n\nTeil on ühendus ka VPN-iga, mis saab jälgida teie võrgutegevusi."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Olete ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Olete ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nOlete ühendatud ka rakendusega <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Teie seadet haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida ja hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet.\n\nOlete ühendatud rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Seade jääb lukku, kuni selle käsitsi avate"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Saate märguandeid kiiremini"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Näete neid enne avamist"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Kuva kõik"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Peida kõik"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Lõpeta nüüd"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Ekraan on kinnitatud"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"See hoiab selle kuval, kuni selle vabastate. Vabastamiseks puudutage ning hoidke korraga all nuppe Tagasi ja Ülevaade."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"See hoiab selle kuval, kuni selle vabastate. Vabastamiseks puudutage ja hoidke all nuppu Ülevaade."</string>
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml
index 0e25328..10e0fe4 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu-rES/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Bilatu"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefonoa"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Desblokeatu"</string>
     <string name="unlock_label" msgid="8779712358041029439">"desblokeatu"</string>
     <string name="phone_label" msgid="2320074140205331708">"ireki telefonoan"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ireki kamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Hautatu zereginen diseinua"</string>
     <string name="cancel" msgid="6442560571259935130">"Utzi"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX sarearen bi barra."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX sarearen hiru barra."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX sarearen seinalea osoa."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet bidezko konexioa eten da."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet bidez konektatu da."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ez dago seinalerik."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Konektatu gabe."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Barrarik ez."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> baztertu da."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Azken aplikazio guztiak baztertu da."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> hasten."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Jakinarazpena baztertu da."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Jakinarazpenen panela."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Ezarpen bizkorrak."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantaila blokeatzeko aukera."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Ezarpenak"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ikuspegi orokorra."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Berretsi"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Itxi"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"<xliff:g id="USER">%s</xliff:g> erabiltzailea."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi konexioa desaktibatu egin da."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Hegaldi modua desaktibatu egin da."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Hegaldi modua aktibatu egin da."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Ez molestatu\" aukera aktibatuta dago, lehentasunezkoak soilik."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Ez molestatu\" aukera aktibatuta dago, etenaldirik gabe."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Ez molestatu\" aukera aktibatuta dago, isiltasun osoa."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Ez molestatu\" aukera aktibatuta dago, alarmak soilik."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Ez molestatu\" aukera desaktibatuta dago."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Ez molestatu\" aukera desaktibatuta dago."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ez molestatu"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Lehentasunezkoak soilik"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmak soilik"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Etenaldirik gabe"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Isiltasun osoa"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetootha (<xliff:g id="NUMBER">%d</xliff:g> gailu)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetootha desaktibatuta"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Bilatu"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Lerratu gora hau egiteko: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Lerratu ezkerrera hau egiteko: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Etenaldirik ez, ezta alarmaren bat bada ere."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Soinuek eta dardarek ez zaituzte eragotziko, zehazten dituzun alarmek, abisuek, gertaerek eta deitzaileek izan ezik."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Soinuek eta dardarek ez zaituzte eragotziko, zehazten dituzun alarmek, abisuek, gertaerek eta deitzaileek izan ezik."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Pertsonalizatu"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Etenaldirik gabe"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Lehentasun-etenaldiak soilik"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Alarmak soilik"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Hurrengo alarma: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Hurrengo alarma: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Ez duzu entzungo alarma ordu honetan: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Soinu eta dardara GUZTIAK blokeatzen dira, besteak beste, alarmak, musika, bideoak eta jokoak. Telefono-deiak egiteko aukera izaten jarraituko duzu."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Horren premiazkoak ez diren jakinarazpenak daude behean"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Irekitzeko, ukitu berriro"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Desblokeatzeko, pasatu hatza gorantz"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Telefonoa irekitzeko, pasatu hatza eskuinera."</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Kamera irekitzeko, pasatu hatza ezkerrera."</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Etenaldirik gabe"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Isiltasun osoa"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Lehentasunezkoak"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarmak soilik"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Guztiak"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Etenaldirik\ngabe"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Isiltasun\nosoa"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Lehentasunezkoak\nsoilik"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmak\nsoilik"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Kargatzen (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> guztiz kargatu arte)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Desgaitu VPN konexioa"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Deskonektatu VPN sarea"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Gailuaren kudeatzailea:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratzaileak gailua eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webgune seguruak barne. Informazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Laneko profilaren kudeatzailea:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratzaileak gailua eta sareko jarduera kontrola ditzake, mezu elektronikoak, aplikazioak eta webgune seguruak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Gailuaren kudeatzailea:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nLaneko profilaren kudeatzailea:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratzaileak gailua eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webgune seguruak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Aplikazio bati VPN konexio bat konfiguratzeko baimena eman diozu.\n\nAplikazio horrek gailua eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webgune seguruak barne."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Aplikazio bati VPN konexio bat konfiguratzeko baimena eman diozu.\n\nAplikazio horrek gailuko eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webgunek barne."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Gailuaren kudeatzailea:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratzaileak ezarpenak, enpresako sarbidea, aplikazioak, gailuarekin lotutako datuak eta gailuaren kokapenari buruzko informazioa kontrola eta kudea ditzake.\n\nSareko jarduerak (mezu elektronikoak, aplikazioak eta webguneak barne) kontrola ditzakeen VPN batera konektatuta zaude.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Laneko profilaren kudeatzailea:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratzaileak sareko jarduerak (mezu elektronikoak, aplikazioak eta webgune seguruak barne) kontrola ditzake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan.\n\nSareko jarduerak kontrola ditzakeen VPN batera konektatuta zaude, gainera."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Gailuaren kudeatzailea:<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nLaneko profilaren kudeatzailea:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratzaileak gailua eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webgune seguruak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan.\n\nSareko jarduera pertsonalak kontrola ditzakeen VPN batera konektatuta zaude, gainera."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea.\n\nAdministratzaileak sareko jarduerak (mezu elektronikoak, aplikazioak eta webguneak barne) kontrola ditzake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan.\n\nHorrez gain, sareko jarduerak kontrola ditzakeen VPN batera konektatuta zaude."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN konexioa"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduera pertsonalak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nHorrez gain, sarean egiten dituzun jarduera pertsonalak kontrola ditzakeen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> aplikaziora konektatuta zaude."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da gailuaren kudeatzailea.\n\nAdministratzaileak ezarpenak, enpresako sarbidea, aplikazioak, gailuarekin lotutako datuak eta gailuaren kokapenari buruzko informazioa kontrola eta kudea ditzake.\n\n<xliff:g id="APPLICATION">%2$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Gailua blokeatuta egongo da eskuz desblokeatu arte"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Eskuratu jakinarazpenak azkarrago"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ikusi desblokeatu baino lehen"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Ikusi guztiak"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ezkutatu guztiak"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Amaitu"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Pantaila ainguratuta dago"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Horrela, ikusgai mantenduko da aingura kendu arte. Aingura kentzeko, eduki ukituta aldi berean \"Atzera\" eta \"Ikuspegi orokorra\" botoiak."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Horrela, ikusgai mantenduko da, aingura kendu arte. Aingura kentzeko, eduki ukituta \"Ikuspegi orokorra\" botoia."</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 2afe3db..544552b4 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"جستجو"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"دوربین"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"تلفن"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"باز کردن قفل"</string>
     <string name="unlock_label" msgid="8779712358041029439">"بازکردن قفل"</string>
     <string name="phone_label" msgid="2320074140205331708">"باز کردن تلفن"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"باز کردن دوربین"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"انتخاب طرح‌بندی جدید کار"</string>
     <string name="cancel" msgid="6442560571259935130">"لغو"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‏WiMAX دارای دو نوار است."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‏WiMAX دارای سه نوار است."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‏قدرت سیگنال WiMAX کامل است."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"اترنت قطع شد."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"اترنت متصل شد."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"فاقد سیگنال."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"متصل نیست."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"بدون میله."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> نادیده گرفته شد."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"همه برنامه‌های اخیر رد شدند."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> در حال شروع به کار است."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"اعلان ردشد."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"مجموعه اعلان."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"تنظیمات سریع."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"صفحه در حالت قفل."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"تنظیمات"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"نمای کلی."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"تأیید"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"بستن"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"کاربر <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"‏Wi-Fi خاموش شد."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"حالت هواپیما خاموش شد."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"حالت هواپیما روشن شد."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"«مزاحم نشوید» روشن است، فقط اولویت‌دار."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"«مزاحم نشوید» روشن است، وقفه ایجاد نشود."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"حالت «مزاحم نشوید» روشن است، سکوت کامل."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"حالت «مزاحم نشوید» روشن است، فقط هشدارها."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"«مزاحم نشوید» خاموش است."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"«مزاحم نشوید» خاموش شد."</string>
@@ -235,7 +242,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="7309935569360609114">"وقفه ایجاد نشود"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"جستجو"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"لغزاندن به بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"لغزاندن به چپ برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"بدون قطعی. حتی هشدارها قطع نمی‌شوند."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"صداها و لرزش‌هایی به جز هشدارها، یادآوری‌ها، رویدادها و تماس‌گیرنده‌هایی که مشخص می‌کنید، مزاحم شما نمی‌شوند."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"صداها و لرزش‌هایی به جز هشدارها، یادآوری‌ها، رویدادها و تماس‌گیرنده‌هایی که مشخص می‌کنید، مزاحم شما نمی‌شوند."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"سفارشی کردن"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"بدون وقفه"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"فقط وقفه‌های اولویت‌دار"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"فقط هشدارها"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"هشدار بعدی شما در ساعت <xliff:g id="ALARM_TIME">%s</xliff:g> است"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"هشدار بعدی شما <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> است"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"هشدارتان را در ساعت <xliff:g id="ALARM_TIME">%s</xliff:g> نخواهید شنید"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"این کار «همه» صداها و لرزش‌ها از جمله هشدارها، موسیقی، ویدیوها و بازی‌ها را مسدود می‌کند. همچنان می‌توانید تماس تلفنی برقرار کنید."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"اعلان‌های کمتر فوری در زیر"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"برای باز کردن دوباره لمس کنید"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"برای باز کردن قفل سریع به بالا بکشید"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"برای تلفن انگشت را تند به سمت چپ بکشید"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"برای دوربین انگشت را تند به سمت راست بکشید"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"بدون وقفه"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"همه"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"بدون\nوقفه"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"در حال شارژ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"‏غیرفعال کردن VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"‏قطع اتصال VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"مدیریت دستگاه شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nسرپرستتان می‌تواند تنظیمات، دسترسی شرکت، برنامه‌ها داده‌های مرتبط با دستگاهتان و اطلاعات مکان دستگاهتان را کنترل و مدیریت کند. برای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"مدیریت نمایه کارتان توسط: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nسرپرستتان می‌تواند فعالیت شبکه‌تان از جمله ایمیل‌ها، برنامه‌ها و وب‌‌سایت‌های امن را کنترل کند.\n\nبرای دریافت اطلاعات بیشتر با سرپرستتان تماس بگیرید."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"مدیریت دستگاه شما توسط:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nمدیریت نمایه کار شما توسط:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nسرپرستتان می‌تواند فعالیت شبکه و دستگاهتان را کنترل کند از جمله ایمیل‌ها، برنامه‌ها و وب‌سایت‌های ایمن.\n\nبرای کسب اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"‏شما به برنامه‌ای برای تنظیم اتصال VPN اجازه دادید.\n\nاین برنامه می‌تواند دستگاه و فعالیت شبکه‌تان را کنترل کند، از جمله ایمیل‌ها، برنامه‌ها و وب‌سایت‌های ایمن."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"‏شما به برنامه‌ای برای تنظیم اتصال VPN اجازه دادید.\n\n این برنامه می‌تواند دستگاه و فعالیت شبکه‌تان را کنترل کند، از جمله ایمیل‌، برنامه‌ و وب‌سایت‌ها."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"‏دستگاهتان توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت می‌شود.\n\nسرپرستتان می‌تواند تنظیمات، دسترسی شرکت، برنامه‌ها، داده‌های مرتبط با دستگاهتان و اطلاعات مکان دستگاهتان را کنترل و مدیریت کند.\n\nشما به یک VPN وصل هستید که می‌تواند فعالیت شبکه شما را کنترل کند، از جمله ایمیل‌ها، برنامه‌ها و وب‌سایت‌ها.\n\nبرای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"‏نمایه کار شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت می‌شود.\n\nسرپرستتان می‌تواند فعالیت شبکه‌تان از جمله ایمیل‌ها، برنامه‌ها و وب‌‌سایت‌های ایمن را کنترل کند.\n\nبرای دریافت اطلاعات بیشتر با سرپرستتان تماس بگیرید.\n\nهمچنین به یک VPN وصل هستید که می‌تواند فعالیت شبکه شما را کنترل کند."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"‏دستگاهتان توسط <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> مدیریت می‌شود.\nمدیریت نمایه کارتان توسط:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nسرپرستتان می‌تواند فعالیت شبکه‌تان را کنترل کند، از جمله ایمیل‌ها، برنامه‌ها و وب‌سایت‌های ایمن.\n\nبرای کسب اطلاعات بیشتر، با سرپرستتان تماس بگیرید.\n\nشما همچنین به یک VPN متصل شده‌اید که می‌تواند فعالیت شبکه شخصی‌تان را کنترل کند"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"‏نمایه کاری شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت می‌شود.\n\nسرپرستتان می‌تواند فعالیت شبکه‌تان از جمله ایمیل‌، برنامه‌ و وب‌‌سایت‌ها را کنترل کند.\n\nبرای دریافت اطلاعات بیشتر با سرپرستتان تماس بگیرید.\n\nهمچنین به یک VPN وصل هستید که می‌تواند فعالیت شبکه شما را کنترل کند."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"شما به <xliff:g id="APPLICATION">%1$s</xliff:g> وصل شده‌اید، که می‌تواند فعالیت شبکه شما از جمله ایمیل‌، برنامه‌ و وب‌سایت‌ها را کنترل کند."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"شما به <xliff:g id="APPLICATION">%1$s</xliff:g> وصل شده‌اید، که می‌تواند فعالیت شبکه شخصی شما از جمله ایمیل‌، برنامه‌ و وب‌سایت‌ها را کنترل کند."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"نمایه کاری‌تان توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت می‌شود. این به <xliff:g id="APPLICATION">%2$s</xliff:g> وصل است که فعالیت شبکه کاری‌تان از جمله ایمیل، برنامه و وب‌سایت‌ها را کنترل می‌کند.\n\nبرای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"نمایه کاری شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت می‌شود. این به <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> متصل است که می‌تواند فعالیت شبکه کاری‌تان از جمله ایمیل، برنامه و وب‌سایت‌ها را کنترل کند.\n\nشما همچنین به <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> متصل هستید که می‌تواند فعالیت شبکه شخصی‌تان را کنترل کند."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"دستگاهتان توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت می‌شود.\n\nسرپرستتان می‌تواند تنظیمات، دسترسی شرکت، برنامه‌ها، داده‌های مرتبط با دستگاهتان و اطلاعات مکان دستگاهتان را کنترل و مدیریت کند.\n\nشما به <xliff:g id="APPLICATION">%2$s</xliff:g> وصل هستید که می‌تواند فعالیت شبکه شما را کنترل کند، از جمله ایمیل‌، برنامه‌ و وب‌سایت‌ها.\n\nبرای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"دستگاه قفل باقی می‌ماند تا زمانی که قفل آن را به صورت دستی باز کنید"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"دریافت سریع‌تر اعلان‌ها"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"قبل از باز کردن قفل آنها را مشاهده کنید"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"مشاهده همه"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"پنهان کردن همه"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. ‏<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"اکنون به پایان برسد"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"صفحه نمایش پین شد"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"تا زمانی که پین را بردارید، در نما نگه‌داشته می‌شود. برای برداشتن پین، برگشت و نمای کلی را به صورت هم‌زمان لمس کنید و نگه‌دارید."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"تا زمانی که پین را بردارید، در نما نگه‌داشته می‌شود. برای برداشتن پین، نمای کلی را لمس کنید و نگه‌دارید."</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 70890b3..fc5f8dd 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Haku"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Puhelin"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Avaa lukitus"</string>
     <string name="unlock_label" msgid="8779712358041029439">"avaa lukitus"</string>
     <string name="phone_label" msgid="2320074140205331708">"avaa puhelin"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"avaa kamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Valitse uusi tehtävien asettelu"</string>
     <string name="cancel" msgid="6442560571259935130">"Peruuta"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX: kaksi palkkia."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX: kolme palkkia."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Vahva WiMAX-signaali."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet on irrotettu."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet on yhdistetty."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ei signaalia."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Ei yhteyttä."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nolla palkkia."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> hylättiin."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Kaikki viimeisimmät sovellukset on hylätty."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Käynnistetään <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Ilmoitus hylätty."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Ilmoitusalue."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Pika-asetukset."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lukitse näyttö."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Asetukset"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Viimeisimmät."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Vahvista"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Sulje"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Käyttäjä: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi poistettiin käytöstä."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lentokonetila poistettiin käytöstä."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lentokonetila otettiin käyttöön."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Älä häiritse -tila on päällä, vain tärkeät."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Älä häiritse -tila on päällä, ei keskeytyksiä."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Älä häiritse -tila on päällä, täydellinen hiljaisuus."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Älä häiritse -tila on päällä, vain herätykset toistetaan."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Älä häiritse -tila on pois päältä."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Älä häiritse -tila on pois päältä."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Älä häiritse"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Vain tärkeät"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Vain herätykset"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ei häiriöitä"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Täydellinen hiljaisuus"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> laitetta)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth pois käytöstä"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Haku"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Liu\'uta ylös ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Liu\'uta vasemmalle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Ei keskeytyksiä, ei edes herätyksiä."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Äänet ja värinät eivät häiritse sinua, paitsi jos ne ovat hälytyksiä, muistutuksia, tapahtumia tai määrittämiäsi soittajia."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Äänet ja värinät eivät häiritse sinua, paitsi jos ne ovat hälytyksiä, muistutuksia, tapahtumia tai määrittämiäsi soittajia."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Muokkaa"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Ei häiriöitä"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Vain tärkeät häiriöt"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Vain herätykset"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Seuraava hälytysaika on <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Seuraava hälytysaika on <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Et kuule hälytystä klo <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Tämä estää KAIKKI äänet ja värinät, mukaan lukien hälytysten, musiikin, videoiden ja pelien äänet ja värinät. Voit kuitenkin soittaa puheluita."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Vähemmän kiireelliset ilmoitukset ovat alla"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Avaa koskettamalla uudelleen"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Avaa lukitus pyyhkäisemällä ylös"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Avaa puhelin pyyhkäisemällä oikealle"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Avaa kamera pyyhkäisemällä oikealle"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Ei keskeytyksiä"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Täydellinen hiljaisuus"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Vain tärkeät"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Vain herätykset"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Kaikki"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Ei\nkeskeytyksiä"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Täydellinen\nhiljaisuus"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Vain\ntärkeät"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Vain\nherätykset"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ladataan (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kunnes täynnä)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Poista VPN käytöstä"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Katkaise VPN-yhteys"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Tätä laitetta hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla ja hallinnoida asetuksiasi, yrityskäyttöä, sovelluksia, laitteeseesi yhdistettyjä tietoja sekä laitteesi sijaintitietoja. Saat lisätietoja järjestelmänvalvojalta."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla toimiasi verkossa, esimerkiksi sähköpostin, sovellusten ja turvallisten verkkosivustojen käyttöä.\n\nSaat lisätietoja järjestelmänvalvojalta."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Laitetta hallinnoi \n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nTyöprofiiliasi hallinnoi \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla laitteellasi ja verkossa tekemiäsi toimia, esimerkiksi sähköpostin, sovellusten ja turvallisten verkkosivustojen käyttöä.\n\nSaat lisätietoja järjestelmänvalvojalta."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Annoit sovellukselle luvan muodostaa VPN-yhteyden.\n\nTämä sovellus voi tarkkailla laitteellasi ja verkossa tekemiäsi toimia, esimerkiksi sähköpostin, sovellusten ja turvallisten verkkosivustojen käyttöä."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Olet myöntänyt sovellukselle oikeuden VPN-yhteyden muodostamiseen.\n\nSovellus voi valvoa laitettasi ja toimintaasi verkossa, esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Tätä laitetta hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla ja hallinnoida asetuksiasi, yrityskäyttöä, sovelluksia, laitteeseesi yhdistettyjä tietoja sekä laitteesi sijaintitietoja.\n\nKäytät VPN-yhteyttä, joka voi valvoa toimiasi verkossa, esimerkiksi sähköpostin, sovellusten ja verkkosivustojen käyttöä.\n\nSaat lisätietoja järjestelmänvalvojalta."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla toimiasi verkossa, esimerkiksi sähköpostin, sovellusten ja turvallisten verkkosivustojen käyttöä.\n\nSaat lisätietoja järjestelmänvalvojalta.\n\nKäytät myös VPN-yhteyttä, joka voi valvoa toimiasi verkossa."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Laitettasi hallinnoi <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nTyöprofiiliasi hallinnoi \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nJärjestelmänvalvoja voi tarkkailla toimiasi verkossa, esimerkiksi sähköpostin, sovellusten ja turvallisten verkkosivustojen käyttöä.\n\nSaat lisätietoja järjestelmänvalvojalta.\n\nKäytät myös VPN-yhteyttä, joka voi valvoa toimiasi verkossa."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvojasi voi valvoa toimintaasi verkossa. Hän voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisätietoja saat järjestelmänvalvojaltasi.\n\nLisäksi olet muodostanut yhteyden VPN-palveluun, joka voi valvoa toimintaasi verkossa."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisätietoja saat järjestelmänvalvojaltasi."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisäksi olet yhteydessä sovellukseen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Laitettasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvojasi voi valvoa ja hallinnoida laitteesi asetuksia, yrityskäyttöä, sovelluksia, laitteeseesi liittyviä tietoja ja laitteen sijaintitietoja.\n\nOlet yhteydessä sovellukseen <xliff:g id="APPLICATION">%2$s</xliff:g>, joka voi valvoa toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisätietoja saat järjestelmänvalvojaltasi."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Laite pysyy lukittuna, kunnes se avataan käsin"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Näe ilmoitukset nopeammin"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Näytä ennen lukituksen avaamista"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Näytä kaikki"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Piilota kaikki"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Lopeta nyt"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Näyttö on kiinnitetty"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Tämä pitää sen näkyvissä, kunnes poistat kiinnityksen. Kosketa Edellinen- ja Viimeisimmät-kohtaa samanaikaisesti pitkään kiinnityksen poistamiseksi."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Tämä pitää sen näkyvissä, kunnes poistat kiinnityksen. Kosketa Viimeisimmät-kohtaa pitkään kiinnityksen poistamiseksi."</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 3e3a91d..6b40037 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Rechercher"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Appareil photo"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Téléphone"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Déverrouiller"</string>
     <string name="unlock_label" msgid="8779712358041029439">"déverrouiller"</string>
     <string name="phone_label" msgid="2320074140205331708">"Ouvrir le téléphone"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"Ouvrir l\'appareil photo"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Sélectionner un nouveau format de tâche"</string>
     <string name="cancel" msgid="6442560571259935130">"Annuler"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Signal WiMAX : moyen"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Signal WiMAX : bon"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Signal WiMAX : excellent"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet déconnecté."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet connecté."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Aucun signal"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Non connecté"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Aucun signal"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Application \"<xliff:g id="APP">%s</xliff:g>\" ignorée."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toutes les applications récentes ont été supprimées."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Lancement de <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification masquée"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Volet des notifications"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Paramètres rapides"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Écran de verrouillage"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Paramètres"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Aperçu"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmer"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Fermer"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Utilisateur : <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi désactivé"</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Le mode Avion est désactivé."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Le mode Avion est activé."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Mode « Ne pas déranger » activé, interruptions prioritaires uniquement."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Mode « Ne pas déranger » activé, sans interruption."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Mode « Ne pas déranger » activé, aucune interruption"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Mode « Ne pas déranger » activé, alarmes uniquement."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Mode « Ne pas déranger » désactivé."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Le mode « Ne pas déranger » a bien été désactivé."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne pas déranger"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priorités seulement"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmes uniquement"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Aucune interruption"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Aucune interruption"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"BLUETOOTH DÉSACTIVÉ"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Recherche"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Faire glisser le doigt vers le haut : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser votre doigt vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Aucune interruption. Même pas pour les alarmes."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Vous ne serez pas dérangé par les sonneries ni les vibrations, sauf pour les alarmes, les rappels, les événements et les appels des personnes que vous spécifiez."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Vous ne serez pas dérangé par les sonneries ni les vibrations, sauf pour les alarmes, les rappels, les événements et les appels des personnes que vous spécifiez."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personnaliser"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Aucune interruption"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Interruptions prioritaires seulement"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Alarmes uniquement"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Prochaine alarme : <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Prochaine alarme : <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Vous n\'entendrez pas votre alarme à <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Cette option permet de bloquer TOUS les sons et vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux. Vous pourrez quand même faire des appels téléphoniques."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifications moins urgentes affichées ci-dessous"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Touchez à nouveau pour ouvrir"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Glissez vers le haut pour déverrouiller"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Balayez l\'écran vers la droite pour accéder au téléphone"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Balayez l\'écran vers la gauche pour accéder à l\'appareil photo"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Aucune interruption"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Aucune interruption"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Priorités seulement"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarmes uniquement"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Tous"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Aucune\ninterruption"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Aucune\ninterruption"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priorités\nuniquement"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmes\nuniquement"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours... (chargée à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Désactiver le RPV"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le RPV"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les données de localisation de celui-ci. Pour en savoir plus, communiquez avec votre administrateur."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (courriels, applications et sites sécurisés).\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Votre appareil est géré par \n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVotre profil professionnel est géré par \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nVotre administrateur peut contrôler l\'activité de votre appareil et votre activité réseau (courriels, applications et sites sécurisés).\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Vous avez autorisé une application à configurer une connexion RPV.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau (courriels, applications et sites sécurisés)."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Vous avez autorisé une application à configurer une connexion RPV.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau, y compris les courriels, les applications et les sites Web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les données de localisation de celui-ci.\n\nVous êtes connecté à un RPV qui peut contrôler votre activité sur le réseau (courriels, applications et sites Web).\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (courriels, applications et sites sécurisés).\n\nPour en savoir plus, communiquez avec votre administrateur.\n\nVous êtes également connecté à un RPV qui peut contrôler votre activité sur le réseau."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Votre appareil est géré par <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVotre profil professionnel est géré par \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (courriels, applications et sites sécurisés).\n\nPour en savoir plus, communiquez avec votre administrateur.\n\nVous êtes également connecté à un RPV qui peut contrôler votre activité personnelle sur le réseau."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur.\n\nVous êtes également connecté à un RPV qui peut contrôler votre activité sur le réseau."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"RPV"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les courriels, les applications et les sites Web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriel, les applications et les sites Web.\n\nPour en savoir plus, communiquer avec votre administrateur."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les e-mails, les applications et les sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et ses données de localisation.\n\nVous êtes connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les  sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"L\'appareil restera verrouillé jusqu\'à ce que vous le déverrouilliez manuellement"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Voir les notifications plus rapidement"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Tout afficher"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Tout masquer"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Arrêter maintenant"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"L\'écran est épinglé"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez un doigt simultanément sur « Retour » et « Aperçu »."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Aperçu »."</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index aa1f36d..eedaaad 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Rechercher"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Appareil photo"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Téléphoner"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Déverrouiller"</string>
     <string name="unlock_label" msgid="8779712358041029439">"déverrouiller"</string>
     <string name="phone_label" msgid="2320074140205331708">"ouvrir le téléphone"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ouvrir l\'appareil photo"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Sélectionner un nouveau plan de tâche"</string>
     <string name="cancel" msgid="6442560571259935130">"Annuler"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Signal WiMAX : moyen"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Signal WiMAX : bon"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Signal WiMAX : excellent"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet déconnecté"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet connecté"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Aucun signal"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Non connecté"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Aucun signal"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Application \"<xliff:g id="APP">%s</xliff:g>\" ignorée."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toutes les applications récentes ont été supprimées."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Lancement de <xliff:g id="APP">%s</xliff:g>"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> : <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification masquée"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Volet des notifications"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Paramètres rapides"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Écran de verrouillage"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Paramètres"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Aperçu"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmer"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Fermer"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Utilisateur <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi désactivé."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Le mode Avion est désactivé."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Le mode Avion est activé."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Mode \"Ne pas déranger\" activé, interruptions prioritaires uniquement"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Mode \"Ne pas déranger\" activé, sans interruption"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Mode Ne pas déranger activé, aucune interruption"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Mode \"Ne pas déranger\" activé, alarmes uniquement"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Mode \"Ne pas déranger\" désactivé"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Le mode \"Ne pas déranger\" a bien été désactivé."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne pas déranger"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Prioritaires uniquement"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmes uniquement"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Aucune interruption"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Aucune interruption"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth désactivé"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Faites glisser vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Aucune sonnerie, pas même pour les alarmes"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Vous ne serez pas dérangé par les sonneries ni les vibrations, sauf pour les alarmes, les rappels, les événements et les appels des personnes que vous spécifiez."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Vous ne serez pas dérangé par les sonneries ni les vibrations, sauf pour les alarmes, les rappels, les événements et les appels des personnes que vous spécifiez."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personnaliser"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Aucune sonnerie"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Sonneries prioritaires uniquement"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Alarmes uniquement"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Prochaine alarme : <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Prochaine alarme : <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Vous n\'entendrez pas votre alarme à <xliff:g id="ALARM_TIME">%s</xliff:g>."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Cette option permet de bloquer TOUS les sons et vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux. Vous pourrez quand même passer des appels téléphoniques."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifications moins urgentes ci-dessous"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Appuyer à nouveau pour ouvrir"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Faire glisser pour déverrouiller"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Balayer l\'écran vers la droite pour accéder au téléphone"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Balayer l\'écran vers la gauche pour accéder à l\'appareil photo"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Aucune interruption"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Aucune interruption"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Priorit. uniquement"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarmes uniquement"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Toujours"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Aucune\ninterruption"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Aucune\ninterruption"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priorité\nuniquement"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmes\nuniquement"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours… (chargé à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Désactiver le VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les informations de localisation de celui-ci. Pour en savoir plus, contactez votre administrateur."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (e-mails, applications et sites sécurisés).\n\nPour en savoir plus, contactez votre administrateur."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Votre appareil est géré par \n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVotre profil professionnel est géré par \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nVotre administrateur peut contrôler l\'activité de votre appareil et votre activité réseau (e-mails, applications et sites sécurisés).\n\nPour en savoir plus, contactez votre administrateur."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Vous avez autorisé une application à configurer une connexion VPN.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau (e-mails, applications et sites sécurisés)."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Vous avez autorisé une application à configurer une connexion VPN.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau (e-mails, applications et sites Web)."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Votre appareil géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les informations de localisation de celui-ci.\n\nVous êtes connecté à un VPN qui peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (e-mails, applications et sites sécurisés).\n\nPour en savoir plus, contactez votre administrateur.\n\nVous êtes également connecté à un VPN qui peut contrôler votre activité sur le réseau."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Votre appareil est géré par <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVotre profil professionnel est géré par \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (e-mails, applications et sites sécurisés).\n\nPour en savoir plus, contactez votre administrateur.\n\nVous êtes également connecté à un VPN qui peut contrôler votre activité personnelle sur le réseau."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur.\n\nVous êtes également connecté à un VPN qui peut contrôler votre activité sur le réseau."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les e-mails, les applications et les sites Web.\n\nPour en savoir plus, contactez votre administrateur."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les e-mails, les applications et les sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Votre appareil géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les informations de localisation de celui-ci.\n\nVous êtes connecté à <xliff:g id="APPLICATION">%2$s</xliff:g> qui peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"L\'appareil restera verrouillé jusqu\'à ce que vous le déverrouilliez manuellement."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Recevoir les notifications plus vite"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Tout afficher"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Tout masquer"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Arrêter maintenant"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Écran épinglé"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Cet écran est épinglé jusqu\'à annulation de l\'opération. Pour annuler l\'épinglage, appuyez simultanément sur \"Retour\" et \"Aperçu\" de manière prolongée."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Cet écran est épinglé jusqu\'à annulation de l\'opération. Pour annuler l\'épinglage, appuyez de manière prolongée sur \"Aperçu\"."</string>
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml
index 1af91bc..fb3c6d8 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl-rES/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Buscar"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Cámara"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Teléfono"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string>
     <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string>
     <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Seleccionar novo deseño de tarefas"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Dúas barras de WiMAX"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Tres barras de WiMAX"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Sinal completo de WiMAX"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Desconectouse a Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Conectouse a Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Sen sinal"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Non conectada"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Ningunha barra"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Rexeitouse <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Rexeitáronse todas as aplicacións recentes."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificación rexeitada"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Sombra de notificación"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configuración rápida"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Pantalla de bloqueo."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Configuración"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visión xeral."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmar"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Pechar"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Usuario <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi desactivada."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Desactivouse o modo avión."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Activouse o modo avión."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Non molestar activado, só prioridade."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Non molestar activado, sen interrupcións."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Non molestar activado, silencio total."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Non molestar activado, só alarmas."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"A opción Non molestar está desactivada."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Desactivouse a opción Non molestar."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non molestar"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Só prioridade"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Só alarmas"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sen interrupcións"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Silencio total"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Pasa o dedo cara arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Pasa o dedo cara a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Non hai interrupcións nin alarmas."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Non te molestará ningún son nin vibración, agás os procedentes de alarmas, recordatorios, eventos de emisores de chamada especificados."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Non te molestará ningún son nin vibración, agás os procedentes de alarmas, recordatorios, eventos de emisores de chamada especificados."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Sen interrupcións"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Só interrupcións prioritarias"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Só alarmas"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"A túa próxima alarma ten lugar ás <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"A túa próxima alarma ten lugar o <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Non escoitarás a túa alarma ás <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Esta acción bloquea TODOS os sons e vibracións, incluídos os das alarmas, música, vídeos e xogos. Aínda podes facer chamadas de teléfono."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificacións menos urxentes abaixo"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Toca outra vez para abrir o elemento"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Pasa o dedo cara arriba para desbloquear"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Pasa o dedo cara á dereita para acceder ao teléfono"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Pasa o dedo cara á esquerda para abrir a cámara"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Sen interrupcións"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Silencio total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Só prioridade"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Só alarmas"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Todas"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Ningunha\ninterrupción"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silencio\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Só\nprioridade"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Só\nalarmas"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para finalizar a carga)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Desactivar VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"O teu dispositivo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador pode supervisar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co teu dispositivo e a información de localización do teu dispositivo. Para obter máis información, ponte en contacto co teu administrador."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador é capaz de supervisar a actividade da túa rede, incluídos os correos electrónicos, as aplicacións e os sitios web seguros.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"O teu dispositivo está xestionado por:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nO teu perfil de traballo está xestionado por:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nO teu administrador pode supervisar o teu dispositivo e a actividade da rede, incluídos os correos electrónicos, as aplicacións e os sitios web seguros.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Outorgaches permiso a unha aplicación para configurar unha conexión VPN.\n\nEsta aplicación pode controlar a actividade da rede e do dispositivo, incluídos os correos electrónicos, as aplicacións e os sitios web seguros."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Outorgaches permiso a unha aplicación para configurar unha conexión VPN.\n\nEsta aplicación pode supervisar a actividade da rede e do dispositivo, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"O teu dispositivo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador pode supervisar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co teu dispositivo e a información de localización do teu dispositivo.\n\nEstás conectado a unha VPN, que pode supervisar a túa actividade de rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador é capaz de supervisar a actividade da túa rede, incluídos os correos electrónicos, as aplicacións e os sitios web seguros.\n\nPara obter máis información, ponte en contacto co teu administrador.\n\nTamén estás conectado a unha VPN, que pode supervisar a túa actividade na rede."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"O teu dispositivo está xestionado por <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nO teu perfil de traballo está xestionado por:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nO teu administrador pode supervisar a túa actividade da rede, incluídos os correos electrónicos, as aplicacións e os sitios web seguros.\n\nPara obter máis información, ponte en contacto co teu administrador.\n\nTamén estás conectado a unha VPN, que pode supervisar a túa actividade da rede persoal"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador é capaz de supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador.\n\nTamén estás conectado a unha VPN, que pode supervisar a túa actividade na rede."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade persoal na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nTamén estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode supervisar a túa actividade persoal na rede."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"O dispositivo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador pode supervisar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co dispositivo e a información de localización do dispositivo.\n\nEstás conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode supervisar a túa actividade na rede: os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, contacta co teu administrador."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado ata que o desbloquees manualmente"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Recibir notificacións máis rápido"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Consúltaas antes de desbloquear"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver todo"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar todo"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Finalizar agora"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"A pantalla está fixada"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"A pantalla manterase visible ata que anules a fixación. Para facelo, mantén premido Atrás e Visión xeral ao mesmo tempo."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"A pantalla manterase visible ata que anules a fixación. Para facelo, mantén premido Visión xeral."</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index ccf1e3e..e17cb0a 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"खोजें"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"कैमरा"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"फ़ोन"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"अनलॉक करें"</string>
     <string name="unlock_label" msgid="8779712358041029439">"अनलॉक करें"</string>
     <string name="phone_label" msgid="2320074140205331708">"फ़ोन खोलें"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"कैमरा खोलें"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"नया कार्य लेआउट चुनें"</string>
     <string name="cancel" msgid="6442560571259935130">"अभी नहीं"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX दो बार."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX तीन बार."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX सि‍ग्‍नल पूर्ण."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ईथरनेट डिस्‍कनेक्‍ट किया गया."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ईथरनेट कनेक्‍ट किया गया."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"कोई सिग्नल नहीं."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"कनेक्ट नहीं है."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"शून्य बार."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खा़रिज कर दिया गया."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"हाल ही के सभी ऐप्लिकेशन ख़ारिज कर दिए गए."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> प्रारंभ हो रहा है."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"नोटिफिकेशन खारिज की गई."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"नोटिफिकेशन शेड."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"त्वरित सेटिंग."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"लॉक स्क्रीन."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"सेटिंग"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"अवलोकन."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"पुष्टि करें"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"बंद करें"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"उपयोगकर्ता <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"वाई-फ़ाई को बंद किया गया."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"हवाई जहाज़ मोड को बंद किया गया."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"हवाई जहाज़ मोड को चालू किया गया."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"परेशान ना करें चालू, केवल प्राथमिकता."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"परेशान ना करें चालू है, कोई बाधा नहीं."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"परेशान ना करें चालू है, पूरी तरह शांत."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"परेशान ना करें चालू, केवल अलार्म."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"परेशान ना करें बंद."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"परेशान ना करें बंद किया गया."</string>
@@ -235,7 +242,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="7309935569360609114">"कोई मेसज और कॉल को नहीं रोका गया"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"खोजें"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर स्‍लाइड करें."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए बाएं स्‍लाइड करें."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"ऐसा सेट करें की कोई कि अलार्म भी ना हो."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"आपको आपके द्वारा निर्दिष्ट किए गए अलार्म, रिमाइंडर्स, ईवेंट और कॉलर को छोड़कर अन्य ध्वनियों और कंपनों के द्वारा परेशान नहीं किया जाएगा."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"आपको आपके द्वारा निर्दिष्ट किए गए अलार्म, रिमाइंडर्स, ईवेंट और कॉलर को छोड़कर अन्य ध्वनियों और कंपनों के द्वारा परेशान नहीं किया जाएगा."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"कस्टमाइज़ करें"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"कोई अवरोध नहीं"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"केवल प्राथमिकता वाले कल और मैसेज को रोकें"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"केवल अलार्म"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"आपका अगला अलार्म <xliff:g id="ALARM_TIME">%s</xliff:g> पर है"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"आपका अगला अलार्म <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> पर है"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"आपको <xliff:g id="ALARM_TIME">%s</xliff:g> पर अपना अलार्म सुनाई नहीं देगा"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"इससे अलार्म, संगीत, वीडियो और गेम सहित सभी ध्‍वनियां और कंपन अवरुद्ध हो जाते हैं. आप अभी भी फ़ोन काॅल कर सकेंगे."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"कम अत्यावश्यक सूचनाएं नीचे दी गई हैं"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"खोलने के लिए पुन: स्पर्श करें"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"अनलॉक करने के लिए ऊपर स्वाइप करें"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"फ़ोन के लिए दाएं स्वाइप करें"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"कैमरे के लिए बाएं स्वाइप करें"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"कोई बाधा नहीं"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"सभी"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"कोई बाधा\nनहीं"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हो रहा है (पूरा होने में <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> बाकी)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करें"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्‍कनेक्‍ट करें"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"आपका डिवाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक सेटिंग, कॉर्पोरेट ऐक्‍सेस, ऐप्स, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्‍थान जानकारी की निगरानी और उसका प्रबंधन कर सकता है. अधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी करने में सक्षम है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"आपका डिवाइस इनके द्वारा प्रबंधित है:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nआपकी कार्य प्रोफ़ाइल इनके द्वारा प्रबंधित है:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nआपका नियंत्रक ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपके डिवाइस और नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"आपने किसी ऐप को VPN कनेक्‍शन सेट करने की अनुमति दी है.\n\nयह ऐप ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपके डिवाइस और नेटवर्क की गतिविधि की निगरानी कर सकता है."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"आपने किसी ऐप को VPN कनेक्‍शन सेट करने की अनुमति दी है.\n\nयह ऐप ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपके डिवाइस और नेटवर्क की गतिविधि की निगरानी कर सकता है."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"आपका डिवाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक सेटिंग, कॉर्पोरेट ऐक्‍सेस, ऐप्स, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्‍थान जानकारी की निगरानी और उसका प्रबंधन कर सकता है.\n\nआप एक VPN से कनेक्‍ट हैं, जो ईमेल, ऐप्‍स और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी करने में सक्षम है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें.\n\nआप एक ऐसे VPN से भी कनेक्‍ट हैं, जो आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"आपका डिवाइस <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> के द्वारा प्रबंधित है.\nआपकी कार्य प्रोफ़ाइल इनके द्वारा प्रबंधित है:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nआपका नियंत्रक ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी करने में सक्षम है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें.\n\nआप एक VPN से भी कनेक्‍ट हैं, जो आपकी व्‍यक्‍तिगत नेटवर्क गतिविधि की निगरानी कर सकता है"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी करने में सक्षम है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें.\n\nआप एक ऐसे VPN से भी कनेक्‍ट हैं, जो आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्‍स और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्‍स और वेबसाइटों सहित आपकी व्‍यक्‍तिगत नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है. वह <xliff:g id="APPLICATION">%2$s</xliff:g> से कनेक्‍ट है, जो ईमेल, ऐप्‍स और वेबसाइटों सहित आपकी कार्य नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है. वह <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> से कनेक्‍ट है, जो ईमेल, ऐप्‍स और वेबसाइटों सहित आपकी कार्य नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nआप <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> से भी कनेक्‍ट हैं, जो आपकी व्‍यक्‍तिगत नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"आपका डिवाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक सेटिंग, कॉर्पोरेट ऐक्‍सेस, ऐप्स, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्‍थान जानकारी की निगरानी और उसका प्रबंधन कर सकता है.\n\nआप <xliff:g id="APPLICATION">%2$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्‍स और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"जब तक कि आप मैन्‍युअल रूप से अनलॉक नहीं करते तब तक डिवाइस लॉक रहेगा"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"सूचनाएं अधिक तेज़ी से प्राप्त करें"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"आपके द्वारा उन्हें अनलॉक किए जाने से पहले देखें"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"सभी देखें"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"सभी छिपाएं"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"अब समाप्त करें"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"स्‍क्रीन पिन कर दी गई है"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"इससे वह तब तक दृश्‍य में रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए वापस जाएं और अवलोकन करें को एक ही समय पर स्‍पर्श करके रखें."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"इससे वह तब तक दृश्‍य में बना रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए अवलोकन करें को स्‍पर्श करके रखें."</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index c7a6b5e..59d40c3 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -84,9 +84,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Pretraži"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparat"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Otključavanje"</string>
     <string name="unlock_label" msgid="8779712358041029439">"otključavanje"</string>
     <string name="phone_label" msgid="2320074140205331708">"otvaranje telefona"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"otvaranje fotoaparata"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Odaberite novi izgled zadataka"</string>
     <string name="cancel" msgid="6442560571259935130">"Odustani"</string>
@@ -122,6 +126,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX s dva stupca."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX s tri stupca."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Signal WiMAX potpun je."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Prekinuta je veza s ethernetom."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Uspostavljena je veza s ethernetom."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Nema signala."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Nije povezano."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nijedan stupac."</string>
@@ -163,13 +169,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> odbačena je."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Odbačene su sve nedavne aplikacije."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Obavijest je odbačena."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Zaslon obavijesti."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Brze postavke."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Zaključavanje zaslona."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Postavke"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pregled."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Potvrdi"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Zatvaranje"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Korisnik <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi isključen."</string>
@@ -181,7 +188,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Način rada u zrakoplovu isključen."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Način rada u zrakoplovu uključen."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Ne ometaj\" uključeno, samo prioritetno."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Ne ometaj\" uključeno, bez prekida."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Ne ometaj\" uključeno, potpuna tišina."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Ne ometaj\" uključeno, samo za alarme."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Ne ometaj\" isključeno."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Ne ometaj\" isključeno."</string>
@@ -236,7 +243,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne ometaj"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Samo prioritetno"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Samo alarmi"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Bez prekida"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Potpuna tišina"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (broj uređaja: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth isključen"</string>
@@ -303,26 +310,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Kliznite prema gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Kliznite lijevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Bez prekida, čak ni za alarme."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Neće vas prekidati zvukovi i vibracije, osim alarma, podsjetnika, događaja i pozivatelja koje navedete."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Neće vas prekidati zvukovi i vibracije, osim alarma, podsjetnika, događaja i pozivatelja koje navedete."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prilagodi"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Bez prekida"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Samo prioritetni prekidi"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Samo alarmi"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Vaš sljedeći alarm bit će u <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Vaš sljedeći alarm bit će u <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Nećete čuti alarm u <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"To blokira SVE zvukove i vibracije, uključujući alarme, glazbu, videozapise i igre. I dalje ćete moći telefonirati."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Manje hitne obavijesti pri dnu"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Dodirnite ponovo da biste otvorili"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Prijeđite prstom prema gore za otključavanje"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Prijeđite prstom udesno za telefon"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Prijeđite prstom ulijevo za fotoaparat"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Bez prekida"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Potpuna tišina"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Samo prioritetno"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Samo alarmi"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Sve"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Bez\nprekida"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Potpuna\ntišina"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\nprioritetno"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
@@ -364,12 +368,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Onemogući VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Prekini vezu s VPN-om"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati postavke, pristup tvrtki, aplikacije, podatke povezane s vašim uređajem i podatke o lokaciji uređaja, kao i upravljati svim prethodno navedenim. Više informacija možete saznati od administratora."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Vašim radnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati vaše aktivnosti u mreži, uključujući e-poruke, aplikacije i sigurne web-lokacije.\n\nViše informacija možete saznati od administratora."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Vašim uređajem upravlja:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVašim radnim profilom upravlja:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nVaš administrator može nadzirati vaše aktivnosti na uređaju i u mreži, uključujući e-poruke, aplikacije i sigurne web-lokacije.\n\nViše informacija možete saznati od administratora."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Dali ste aplikaciji dopuštenje za uspostavljanje VPN veze.\n\nTa aplikacija može nadzirati vaše aktivnosti na uređaju i u mreži, uključujući e-poruke, aplikacije i sigurne web-lokacije."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Dali ste dopuštenje aplikaciji za postavljanje VPN veze.\n\nTa aplikacija može nadzirati vašu aktivnost na uređaju i mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati postavke, pristup tvrtki, aplikacije, podatke povezane s vašim uređajem i podatke o lokaciji uređaja, kao i upravljati svim prethodno navedenim.\n\nPovezani ste s VPN-om koji može nadzirati vaše aktivnosti u mreži, uključujući e-poruke, aplikacije i web-lokacije.\n\n Više informacija možete saznati od administratora."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Vašim radnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati vašu aktivnost u mreži, uključujući e-poruke, aplikacije i sigurne web-lokacije.\n\n Više informacija možete saznati od administratora.\n\nPovezani ste i s VPN-om, koji može nadzirati vaše aktivnosti u mreži."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVašim radnim profilom upravlja:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nVaš administrator može nadzirati vaše aktivnosti u mreži, uključujući e-poruke, aplikacije i sigurne web-lokacije.\n\nViše informacija možete saznati od administratora.\n\nPovezani ste i s VPN-om, koji može nadzirati vaše osobne aktivnosti u mreži"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se administratoru za više informacija.\n\nPovezani ste i s VPN-om koji može nadzirati vašu aktivnost na mreži."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se svojem administratoru za više informacija."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nPovezani ste i s aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati postavke, poslovni pristup, aplikacije, podatke povezane s uređajem i podatke o lokaciji uređaja te upravljati njima.\n\nPovezani ste s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se svojem administratoru za više informacija."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Uređaj će ostati zaključan dok ga ručno ne otključate"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Primajte obavijesti brže"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Pogledajte ih prije otključavanja"</string>
@@ -378,6 +385,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Pokaži sve"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Sakrij sve"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Prekini sada"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Zaslon je prikvačen"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Istovremeno dodirnite i držite Natrag i Pregled da biste ga otkvačili."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Dodirnite i držite Pregled da biste ga otkvačili."</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 55b522e..f0ca9ce 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Keresés"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Feloldás"</string>
     <string name="unlock_label" msgid="8779712358041029439">"feloldás"</string>
     <string name="phone_label" msgid="2320074140205331708">"telefon megnyitása"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"kamera megnyitása"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Új feladatelrendezés kiválasztása"</string>
     <string name="cancel" msgid="6442560571259935130">"Mégse"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-jel: két sáv."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-jel: három sáv."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-jel: teljes."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet leválasztva."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet csatlakoztatva."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Nincs jel."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Nincs csatlakozva."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nincs sáv."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> eltávolítva."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Az összes alkalmazás eltávolítva a nemrég használtak közül."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"A(z) <xliff:g id="APP">%s</xliff:g> indítása."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Értesítés elvetve."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Értesítési felület."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Gyorsbeállítások."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lezárási képernyő."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Beállítások"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Áttekintés."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Megerősítés"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Bezárás"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Felhasználó: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi kikapcsolva."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Repülős üzemmód kikapcsolva."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Repülős üzemmód bekapcsolva."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"A „Ne zavarjanak” mód bekapcsolva. Csak prioritásos."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"A „Ne zavarjanak” mód bekapcsolva. Nincsenek értesítések."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"„Ne zavarjanak” mód bekapcsolva; teljes némítás."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"A „Ne zavarjanak” mód bekapcsolva. Csak riasztások."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"A „Ne zavarjanak” mód kikapcsolva."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"A „Ne zavarjanak” mód kikapcsolva."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne zavarjanak"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Csak prioritásos"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Csak riasztások"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ne zavarjon"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Teljes némítás"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> eszköz)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth kikapcsolva"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Keresés"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa felfelé."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa balra."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Semmi sem zavarja meg, még a riasztások sem."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Nem fogják zavarni hanghatások és rezgés, kivéve az ébresztéseket, emlékeztetőket, eseményeket és az Ön által megjelölt hívókat."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Nem zavarják majd hanghatások, sem rezgés, kivéve az ébresztéseket, emlékeztetőket, eseményeket és az Ön által megjelölt hívókat."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Személyre szabás"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Ne zavarjon"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Csak prioritást élvező zavaró üzenetek"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Csak riasztások"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"A következő ébresztés ideje: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"A következő ébresztés napja és ideje: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Nem fogja hallani az ébresztést ekkor: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Ez letiltja az ÖSSZES hanghatást és rezgést, beleértve az ébresztések, zeneszámok, videók és játékok hangjait is. Telefonhívást továbbra is fog tudni indítani."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"A kevésbé sürgős értesítések lentebb vannak"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Érintse meg ismét a megnyitáshoz"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Húzza felfelé az ujját a feloldáshoz"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"A telefon eléréséhez csúsztassa ujját jobbra"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"A fényképezőgép eléréséhez csúsztassa ujját balra"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Ne zavarjon"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Teljes némítás"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Csak prioritásos"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Csak riasztások"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Összes"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Nincs\nmegszakítás"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Teljes\nnémítás"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Csak\nprioritás"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Csak\nriasztások"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Töltés (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> a teljes töltöttségig)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN letiltása"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN-kapcsolat bontása"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Az eszközt a következő felügyeli:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nRendszergazdája ellenőrizheti és módosíthatja a beállításokat, vállalati hozzáféréseket, alkalmazásokat, az eszközéhez társított adatokat és eszköze helyadatait. További tájékoztatásért forduljon rendszergazdájához."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Munkaprofilját a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nRendszergazdája (az e-mailekre, alkalmazásokra és a biztonságos webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi tájékoztatásért forduljon rendszergazdájához."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Az eszközt a következő felügyeli:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nA munkaprofilt a következő felügyeli:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nRendszergazdája (az e-mailekre, alkalmazásokra és a biztonságos webhelyekre kiterjedően is) figyelemmel kísérheti tevékenységét eszközén és a hálózaton.\n\nTovábbi tájékoztatásért forduljon rendszergazdájához."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Engedélyezte egy alkalmazásnak, hogy VPN-kapcsolatot létesítsen.\n\nEz az alkalmazás (az e-mailekre, alkalmazásokra és a biztonságos webhelyekre is kiterjedően) figyelemmel kísérheti az Ön eszközét és hálózati tevékenységét."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Engedélyezte egy alkalmazásnak, hogy VPN-kapcsolatot létesítsen.\n\nEz az alkalmazás (az e-mailekre, alkalmazásokra és a webhelyekre is kiterjedően) figyelemmel kísérheti az Ön eszközét és hálózati tevékenységét."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Eszközét a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nRendszergazdája figyelemmel kísérheti és módosíthatja beállításait, vállalati hozzáféréseit, alkalmazásait, az eszközéhez társított adatokat és eszköze helyadatait.\n\n Ön egy VPN-hez is kapcsolódik, amely (az e-mailekre, alkalmazásokra és webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi tájékoztatásért forduljon rendszergazdájához."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Munkaprofilját a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nRendszergazdája (az e-mailekre, alkalmazásokra és a biztonságos webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi tájékoztatásért forduljon rendszergazdájához.\n\nÖn egy VPN-hez is csatlakozik, amely szintén figyelemmel kísérheti hálózati tevékenységét."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Eszközét a következő felügyeli: <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nMunkaprofilját a következő felügyeli:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nRendszergazdája (az e-mailekre, alkalmazásokra és a biztonságos webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi tájékoztatásért forduljon rendszergazdájához.\n\nÖn egy VPN-hez is kapcsolódik, amely szintén figyelemmel kísérheti személyes hálózati tevékenységét."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Munkaprofilját a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nA rendszergazda (az e-mailekre, alkalmazásokra és a webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi információért forduljon a rendszergazdához.\n\nÖn egy VPN-hez is csatlakozik, amely szintén figyelemmel kísérheti hálózati tevékenységét."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Ön a következőhöz csatlakozik: <xliff:g id="APPLICATION">%1$s</xliff:g>, amely figyelheti hálózati tevékenységét, beleértve az e-mailt, az alkalmazásokat és a webhelyeket."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Ön a következőhöz csatlakozik: <xliff:g id="APPLICATION">%1$s</xliff:g>, amely figyelheti személyes hálózati tevékenységét, beleértve az e-mailt, az alkalmazásokat és a webhelyeket."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Munkaprofilját a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ez a következőhöz csatlakozik: <xliff:g id="APPLICATION">%2$s</xliff:g>, amely figyelheti hálózati tevékenységét, beleértve az e-mailt, az alkalmazásokat és a webhelyeket.\n\nTovábbi információért forduljon a rendszergazdához."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Munkaprofilját a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>. A következőhöz csatlakozik: <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, amely figyelheti hálózati tevékenységét, beleértve az e-mailt, az alkalmazásokat és a webhelyeket.\n\nCsatlakozik továbbá a következőhöz: <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, amely szintén figyelemmel kísérheti személyes hálózati tevékenységét."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Eszközét a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nA rendszergazda figyelemmel kísérheti és módosíthatja beállításait, vállalati hozzáféréseit, alkalmazásait, az eszközéhez társított adatokat és eszköze helyadatait.\n\nÖn a következőhöz csatlakozik: <xliff:g id="APPLICATION">%2$s</xliff:g>, amely (az e-mailekre, alkalmazásokra és webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi információért forduljon a rendszergazdához."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Az eszköz addig zárolva marad, amíg kézileg fel nem oldja"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Gyorsabban megkaphatja az értesítéseket"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Már a képernyőzár feloldása előtt megtekintheti őket"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Az összes megjelenítése"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Az összes elrejtése"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Befejezés most"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"A képernyő rögzítve van"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Megjelenítve tartja addig, amíg Ön fel nem oldja fel a rögzítést. A rögzítés feloldásához tartsa egyszerre lenyomva a Vissza és az Áttekintés lehetőséget."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Megjelenítve tartja addig, amíg Ön fel nem oldja a rögzítést. A feloldáshoz tartsa lenyomva az Áttekintés lehetőséget."</string>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index 3fd5003..6162ed4 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Որոնել"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Ֆոտոխցիկ"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Հեռախոս"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Ապակողպել"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ապակողպել"</string>
     <string name="phone_label" msgid="2320074140205331708">"բացել հեռախոսը"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"բացել ֆոտոխցիկը"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Ընտրել առաջադրանքի նոր դասավորություն"</string>
     <string name="cancel" msgid="6442560571259935130">"Չեղարկել"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-ի երկու գիծ:"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-ի երեք գիծ:"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-ի ազդանշանը լիքն է:"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet-ը անջատված է:"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet-ը կապակցված է:"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ազդանշան չկա:"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Միացված չէ:"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Զրո գիծ:"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>-ը անտեսված է:"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Բոլոր վերջին հավելվածները հեռացվել են ցուցակից:"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Մեկնարկել <xliff:g id="APP">%s</xliff:g>-ը:"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Ծանուցումը անտեսվեց:"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Ծանուցումների վահանակ:"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Արագ կարգավորումներ:"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Էկրանի կողպում:"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Կարգավորումներ"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Համատեսք"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Հաստատել"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Փակել"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Օգտվող <xliff:g id="USER">%s</xliff:g>:"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>:"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi-ն անջատվեց:"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Ինքնաթիռային ռեժիմն անջատվեց:"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ինքնաթիռային ռեժիմը միացավ:"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Չխանգարելու ընտրանքը միացված է: Ընդհատել միայն կարևոր ծանուցումների դեպքում:"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Չխանգարելու ընտրանքը միացված է: Չընդհատել:"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Չանհանգստացնել՝ ընդհանուր լուռ վիճակը:"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Չանհանգստացնել՝ միայն զարթուցիչ"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Չխանգարելու ընտրանքն անջատված է:"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Չխանգարելու ընտրանքն անջատվեց:"</string>
@@ -235,7 +242,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="7309935569360609114">"Չընդհատել"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Ընդհանուր լուռ վիճակը"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> սարք)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth-ն անջատված է"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Որոնել"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Սահեցրեք վերև <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Սահեցրեք ձախ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Առանց ընդհատումների՝ ներառյալ զարթուցիչները:"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Ոչ մի ձայն և թրթռում չի անհանգստացնի ձեզ, բացառությամբ ձեր ընտրած զարթուցիչներից, հիշեցումներից, իրադարձություններից և զանգողներից:"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Ոչ մի ձայն և թրթռում չի անհանգստացնի ձեզ, բացառությամբ ձեր ընտրած զարթուցիչներից, հիշեցումներից, իրադարձություններից և զանգողներից:"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Հարմարեցնել"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Առանց ընդհատումների"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Միայն կարևոր ընդհատումներ"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Միայն զարթուցիչ"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Ձեր հաջորդ զարթուցիչի ժամն է՝ <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Ձեր հաջորդ զարթուցիչի օրն է՝ <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Դուք չեք լսի ձեր զարթուցիչը <xliff:g id="ALARM_TIME">%s</xliff:g>-ին:"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Այս գործողությունն արգելափակում է ԲՈԼՈՐ ձայներն ու թրթռումները, այդ թվում նաև զարթուցիչների, երաժշտության, տեսանյութերի և խաղերի ձայները: Սակայն կկարողանաք կատարել հեռախոսազանգեր:"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Պակաս հրատապ ծանուցումները ստորև"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Կրկին հպեք՝ բացելու համար"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Սահեցրեք վերև` ապակողպելու համար"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Հեռախոսի համար սահեցրեք աջ"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Խցիկի համար սահեցրեք ձախ"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Առանց ընդհատումների"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Բոլորը"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Առանց\nընդհատումների"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> մինչև լրիվ լիցքավորումը)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Անջատել VPN-ը"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Անջատել VPN-ը"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Սարքի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ հաշիվը, հավելվածները, սարքի հետ առնչվող և սարքի տեղադրության տվյալները: Լրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել ցանցում ունեցած գործունեությունը, այդ թվում՝ էլեկտրոնային նամակները, հավելվածները և վստահելի կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Սարքի կառավարիչ՝\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>:\nԱշխատանքային պրոֆիլի կառավարիչ՝\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել ձեր սարքի և ցանցի գործունեությունը՝ նամակները, հավելվածները և վստահելի կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Ինչ-որ հավելվածի թույլ եք տվեք հաստատել VPN կապակցում:\n\nԱյդ հավելվածը կարող է վերահսկել ձեր սարքի և ցանցի գործունեությունը, այդ թվում նաև՝ էլեկտրոնային նամակները, հավելվածները և վստահելի կայքերը:"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Ինչ-որ հավելվածի թույլ եք տվել հաստատել VPN կապակցում:\n\nԱյդ հավելվածը կարող է վերահսկել ձեր սարքի և ցանցի գործունեությունը, այդ թվում նաև՝ էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Սարքի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ հաշիվը, հավելվածները, սարքի հետ առնչվող և սարքի տեղադրության տվյալները:\n\nՆաև ունեք VPN կապակցում, ինչը կարող է վերահսկել ձեր ցանցի գործունեությունը, այդ թվում նաև՝ էլեկտրոնային նամակները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Աշխատանքային պրոֆիլի կառավարիչն է՝  <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել ցանցում ունեցած գործունեությունը, այդ թվում՝ էլեկտրոնային նամակները, հավելվածները և վստահելի կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:\n\nՆաև ունեք VPN կապակցում, ինչը կարող է վերահսկել ձեր ցանցում կատարած գործողությունները:"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Սարքի կառավարիչն է՝ <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>:\nԱշխատանքային պրոֆիլի կառավարիչն է՝\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել ցանցում ունեցած գործունեությունը, այդ թվում՝ էլեկտրոնային նամակները, հավելվածները և վստահելի կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:\n\nՆաև ունեք VPN կապակցում, ինչը կարող է վերահսկել ձեր անձնական ցանցում կատարած գործողությունները"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել ցանցում ունեցած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:\n\nՆաև ունեք VPN կապակցում, ինչը կարող է վերահսկել ձեր ցանցում կատարած գործողությունները:"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Դուք կապակցված եք <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին, ինչը կարող է վերահսկել ձեր ցանցի գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Դուք կապակցված եք <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին, ինչը կարող է վերահսկել անձնական ցանցում կատարած ձեր գործողությունները, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>: Այն կապակցված է <xliff:g id="APPLICATION">%2$s</xliff:g> հավելվածին, ինչը կարող է վերահսկել աշխատանքային ցանցում կատարած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>: Այն կապակցված է <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> հավելվածին, ինչը կարող է վերահսկել աշխատանքային ցանցում կատարած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԴուք նույնպես կապակցված եք <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> հավելվածին, ինչը կարող է վերահսկել անձնական ցանցում կատարած ձեր գործողությունները:"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Սարքի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ հաշիվը, հավելվածները, սարքի հետ առնչվող և սարքի տեղադրության տվյալները:\n\nՆաև կապակցված եք <xliff:g id="APPLICATION">%2$s</xliff:g> հավելվածին, ինչը կարող է վերահսկել ձեր ցանցի գործունեությունը, այդ թվում նաև՝ էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Սարքը կմնա արգելափակված՝ մինչև ձեռքով չբացեք"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Ավելի արագ ստացեք ծանուցումները"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Տեսեք դրանք մինչև ապակողպելը"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Տեսնել բոլորը"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Թաքցնել բոլորը"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Ավարտել"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Էկրանն ամրացված է"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար միաժամանակ հպեք և պահեք Համատեսքի և Հետ կոճակները:"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար հպեք և պահեք Համատեսքի կոճակը:"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 088585a..c179b84 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Telusuri"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telepon"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"Voice Bantuan"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Buka kunci"</string>
     <string name="unlock_label" msgid="8779712358041029439">"buka kunci"</string>
     <string name="phone_label" msgid="2320074140205331708">"buka ponsel"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"buka voice bantuan"</string>
     <string name="camera_label" msgid="7261107956054836961">"buka kamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Pilih tata letak tugas baru"</string>
     <string name="cancel" msgid="6442560571259935130">"Batal"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX dua batang."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX tiga batang."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Sinyal WiMAX penuh."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet terputus."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet tersambung."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Tidak ada sinyal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Tidak tersambung."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"0 baris."</string>
@@ -162,13 +166,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> disingkirkan."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Semua aplikasi terbaru telah ditutup."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Memulai <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notifikasi disingkirkan."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bayangan pemberitahuan."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Setelan cepat."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Layar kunci."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Setelan"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ringkasan."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Konfirmasi"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Tutup"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Pengguna <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi dinonaktifkan."</string>
@@ -180,7 +185,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Mode pesawat dinonaktifkan."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Mode pesawat diaktifkan."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Status \"Jangan ganggu\" aktif, hanya untuk prioritas."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Status \"Jangan ganggu\" aktif, tanpa gangguan."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Fitur jangan ganggu aktif, senyap total."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Jangan ganggu aktif, hanya alarm."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Status \"Jangan ganggu\" nonaktif."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Status \"Jangan ganggu\" dinonaktifkan."</string>
@@ -235,7 +240,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Jangan ganggu"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Hanya untuk prioritas"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Hanya alarm"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Tanpa gangguan"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Senyap total"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Perangkat)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Mati"</string>
@@ -302,26 +307,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"Telusuri"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Geser ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Geser ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Tanpa gangguan, termasuk alarm."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Anda tidak akan diganggu oleh suara dan getaran, kecuali dari alarm, pengingat, acara, dan penelepon yang ditentukan."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Anda tidak akan diganggu oleh suara dan getaran, kecuali dari alarm, pengingat, acara, dan penelepon tertentu."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Sesuaikan"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Tidak ada interupsi"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Hanya interupsi prioritas"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Hanya alarm"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Alarm Anda berikutnya pukul <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Alarm Anda berikutnya hari <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Anda tidak akan mendengar alarm pukul <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"SEMUA suara dan getaran, termasuk dari alarm, musik, video, dan game akan diblokir. Anda tetap dapat melakukan panggilan telepon."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifikasi kurang darurat di bawah"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Sentuh lagi untuk membuka"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Gesek ke atas untuk membuka kunci"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Gesek ke kanan untuk menelepon"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Gesek ke kiri untuk kamera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Tanpa gangguan"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"Gesek dari ikon untuk telepon"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"Gesek dari ikon untuk voice bantuan"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"Gesek dari ikon untuk kamera"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"Senyap total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Hanya untuk prioritas"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Hanya alarm"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Semua"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Tidak ada\ngangguan"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Senyap\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Hanya\nprioritas"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Hanya\nalarm"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengisi daya (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string>
@@ -363,12 +362,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Nonaktifkan VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat. Untuk informasi selengkapnya, hubungi administrator."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web aman.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Perangkat dikelola oleh:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfil kerja dikelola oleh:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministrator dapat memantau aktivitas perangkat dan jaringan, termasuk email, aplikasi, dan situs web aman.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Anda memberikan izin kepada aplikasi untuk menyiapkan sambungan VPN.\n\nAplikasi ini dapat memantau aktivitas perangkat dan jaringan, termasuk email, aplikasi, dan situs web aman."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Anda memberikan izin kepada aplikasi untuk menyiapkan sambungan VPN.\n\nAplikasi  ini dapat memantau aktivitas perangkat dan jaringan, termasuk email, aplikasi, dan situs web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat.\n\nAnda tersambung ke VPN yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web aman.\n\nUntuk informasi selengkapnya, hubungi administrator.\n\nAnda juga tersambung ke VPN yang dapat memantau aktivitas jaringan."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfil kerja dikelola oleh:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministrator dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web aman.\n\nUntuk informasi selengkapnya, hubungi administrator.\n\nAnda juga tersambung ke VPN yang dapat memantau aktivitas jaringan"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator.\n\nAnda juga tersambung ke VPN yang dapat memantau aktivitas jaringan."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi, termasuk email, aplikasi, dan situs web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nAnda juga tersambung ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat.\n\nAnda tersambung ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Perangkat akan tetap terkunci hingga Anda membukanya secara manual"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Dapatkan pemberitahuan lebih cepat"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum membuka kunci"</string>
@@ -377,6 +379,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Lihat semua"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Sembunyikan semua"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Akhiri sekarang"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"Luaskan"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Ciutkan"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"Layar dipasangi pin"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh dan tahan tombol Kembali dan Ringkasan secara bersamaan untuk melepas pin."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh dan tahan tombol Ringkasan untuk melepas pin."</string>
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml
index 72b8a0a..6a15a1b 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is-rIS/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Leita"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Myndavél"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Sími"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Taka úr lás"</string>
     <string name="unlock_label" msgid="8779712358041029439">"taka úr lás"</string>
     <string name="phone_label" msgid="2320074140205331708">"opna síma"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"opna myndavél"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Velja nýtt útlit verkefna"</string>
     <string name="cancel" msgid="6442560571259935130">"Hætta við"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX: Tvö strik."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX: Þrjú strik."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Fullur WiMAX-sendistyrkur."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet aftengt."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet tengt."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ekkert merki."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Engin tenging."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Engin strik."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> vísað frá."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Öll nýleg forrit fjarlægð."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Ræsir <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Tilkynningu lokað."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Tilkynningasvæði."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Flýtistillingar."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lásskjár."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Stillingar"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Yfirlit."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Staðfesta"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Loka"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Notandi: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Slökkt á Wi-Fi."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Slökkt á flugstillingu."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Kveikt á flugstillingu."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Kveikt á „Ónáðið ekki“, aðeins forgangur."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Kveikt á „Ónáðið ekki“, engar truflanir."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Kveikt á „Ónáðið ekki“, algjör þögn."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Kveikt á „Ónáðið ekki“, aðeins vekjarar."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Slökkt á „Ónáðið ekki“."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Slökkt á „Ónáðið ekki“."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ónáðið ekki"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Aðeins forgangur"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Aðeins vekjarar"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Engar truflanir"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Algjör þögn"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> tæki)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Slökkt á Bluetooth"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Leita"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Strjúktu upp til að <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Strjúktu til vinstri til að <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Engar truflanir. Ekki einu sinni vekjarar."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Þú verður ekki fyrir truflunum af hljóðmerkjum og titringi, fyrir utan vekjara, áminningar, viðburði og símtöl sem þú leyfir fyrir fram."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Þú verður ekki fyrir truflunum af hljóðmerkjum og titringi, fyrir utan vekjara, áminningar, viðburði og símtöl sem þú leyfir fyrir fram."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Sérsníða"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Engin truflun"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Aðeins forgangstruflanir"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Aðeins vekjarar"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Næsti vekjari er kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Næsti vekjari er <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Ekki mun heyrast í vekjaranum kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Þetta lokar á ÖLL hljóðmerki og titring, þ.m.t. frá vekjurum, tónlist, myndskeiðum og leikjum. Þú getur áfram hringt símtöl."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Minna áríðandi tilkynningar fyrir neðan"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Snertu aftur til að opna"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Strjúktu upp til að opna"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Strjúktu til hægri fyrir síma"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Strjúktu til vinstri fyrir myndavél"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Engar truflanir"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Algjör þögn"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Aðeins forgangur"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Aðeins vekjarar"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Allar"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Engar\ntruflanir"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Algjör\nþögn"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Aðeins\nforgangur"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Aðeins\nvekjarar"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Í hleðslu (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> fram að fullri hleðslu)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Slökkva á VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Aftengja VPN-net"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengd eru tækinu og staðsetningarupplýsingum tækisins. Hafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og öruggum vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Tækinu er stjórnað af:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVinnusniðinu þínu er stjórnað af:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með virkni þinni í tækinu og á netinu, þar á meðal tölvupósti, forritum og öruggum vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Þú veittir forriti heimild til að koma á VPN-tengingu.\n\nÞetta forrit getur fylgst með virkni þinni í tækinu og á netinu, þar á meðal tölvupósti, forritum og öruggum vefsvæðum."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Þú veittir forriti heimild til að koma á VPN-tengingu.\n\nÞetta forrit getur fylgst með virkni þinni í tækinu og á netinu, þar á meðal tölvupósti, forritum og vefsvæðum."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengd eru tækinu og staðsetningarupplýsingum tækisins.\n\nÞú ert með tengingu við VPN-net sem getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og öruggum vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar.\n\nÞú ert einnig með tengingu við VPN-net sem getur fylgst með netnotkun þinni."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVinnusniðinu þínu er stjórnað af:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og öruggum vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar.\n\nÞú ert einnig með tengingu við VPN-net sem getur fylgst með persónulegri netnotkun þinni"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar.\n\nÞú ert einnig með tengingu við VPN-net sem getur fylgst með netnotkun þinni."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nÞú ert einnig með tengingu við <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengd eru tækinu og staðsetningarupplýsingum tækisins.\n\nÞú ert með tengingu við <xliff:g id="APPLICATION">%2$s</xliff:g>, sem getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Tækið verður læst þar til þú opnar það handvirkt"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Fáðu tilkynningar hraðar"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Sjáðu þær áður en þú opnar"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Sjá allt"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Fela allt"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Hætta núna"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skjárinn er festur"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Þetta heldur þessu opnu þangað til þú losar. Haltu bakk- og yfirlitshnöppunum inni á sama tíma til að losa."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Þetta heldur þessu opnu þangað til þú losar. Haltu yfirlitshnappinum inni til að losa."</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 9a00c5b..51b7bcd 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Cerca"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotocamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefono"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Sblocca"</string>
     <string name="unlock_label" msgid="8779712358041029439">"sblocca"</string>
     <string name="phone_label" msgid="2320074140205331708">"apri telefono"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"apri fotocamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Seleziona un nuovo layout per le attività"</string>
     <string name="cancel" msgid="6442560571259935130">"Annulla"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX: due barre."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX: tre barre."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Massimo segnale WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Connessione Ethernet annullata."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Connessione Ethernet stabilita."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Nessun segnale."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Non connesso."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nessuna barra."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> eliminata."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Tutte le applicazioni recenti sono state rimosse."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Avvio di <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notifica eliminata."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Area notifiche."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Impostazioni rapide."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Schermata di blocco."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Impostazioni"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Panoramica."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Conferma"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Chiudi"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Utente <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi disattivato."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modalità aereo disattivata."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modalità aereo attivata."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Non disturbare\" attivo, solo con priorità."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Non disturbare\" attivo, nessuna interruzione."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Opzione \"Non disturbare\" attiva, silenzio totale."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Non disturbare\" attivo, solo sveglie."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Non disturbare\" non attivo."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Non disturbare\" non attivo."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non disturbare"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo con priorità"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Solo sveglie"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Nessuna interruzione"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Silenzio totale"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivi)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth spento"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Ricerca"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"A sinistra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Senza interruzioni. Neanche sveglie."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Non verrai disturbato da suoni e vibrazioni, ad eccezione di sveglie, promemoria, eventi e chiamanti da te specificati."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Non verrai disturbato da suoni e vibrazioni, ad eccezione di sveglie, promemoria, eventi e chiamanti da te specificati."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizza"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Nessuna interruzione"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Solo interruzioni con priorità"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Solo sveglie"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Il tuo prossimo allarme è alle ore <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Il tuo prossimo allarme è il giorno <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Il tuo allarme non suonerà alle <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Verranno bloccati TUTTI i suoni e le vibrazioni, anche di sveglie, musica, video e giochi. Potrai ancora telefonare."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifiche meno urgenti in basso"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Tocca di nuovo per aprire"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Scorri verso l\'alto per sbloccare"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Scorri verso destra per accedere al telefono"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Scorri verso sinistra per accedere alla fotocamera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Nessuna interruzione"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Silenzio totale"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Solo con priorità"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Solo sveglie"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Tutte"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Nessuna\ninterruzione"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silenzio\ntotale"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo con\npriorità"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nsveglie"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"In carica (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Disattiva VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Scollega VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app e dati associati al dispositivo, incluse le informazioni sulla posizione del dispositivo. Per ulteriori informazioni, contatta l\'amministratore."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare la tua attività di rete, inclusi siti web protetti, email e app.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Il tuo dispositivo è gestito da:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nIl tuo profilo di lavoro è gestito da:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nL\'amministratore può monitorare il tuo dispositivo e l\'attività di rete, inclusi siti web protetti, email e app.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Hai autorizzato l\'app a configurare una connessione VPN.\n\nQuesta app può monitorare il tuo dispositivo e l\'attività di rete, inclusi siti web protetti, email e app."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Hai autorizzato l\'app a configurare una connessione VPN.\n\nQuesta app può monitorare il tuo dispositivo e l\'attività di rete, inclusi email, app e siti web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app e dati associati al dispositivo, incluse le informazioni sulla posizione del dispositivo.\n\nSei connesso a una rete VPN da cui è possibile monitorare la tua attività di rete, inclusi siti web, email e app.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare l\'attività di rete, inclusi siti web protetti, email e app.\n\nPer ulteriori informazioni, contatta l\'amministratore.\n\nSei connesso a una rete VPN da cui è possibile monitorare la tua attività di rete."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nIl tuo profilo è gestito da:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nL\'amministratore può monitorare l\'attività di rete, inclusi siti web protetti, email e app.\n\nPer ulteriori informazioni, contatta l\'amministratore.\n\nSei collegato a una rete VPN da cui è possibile monitorare la tua attività di rete."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare l\'attività di rete, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta l\'amministratore.\n\nSei connesso anche a VPN, da cui è possibile monitorare la tua attività di rete."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Sei connesso a <xliff:g id="APPLICATION">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi email, app e siti web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Sei connesso a <xliff:g id="APPLICATION">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete personale, inclusi email, app e siti web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta il tuo amministratore."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nSei connesso anche a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, da cui è possibile monitorare la tua attività di rete personale."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app e dati associati al dispositivo, incluse le informazioni sulla posizione del dispositivo.\n\nSei connesso a <xliff:g id="APPLICATION">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Il dispositivo resterà bloccato fino allo sblocco manuale"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Ricevi notifiche più velocemente"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Visualizza prima di sbloccare"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Mostra tutto"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Nascondi tutto"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Termina adesso"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"La schermata è bloccata"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"La schermata rimane visibile finché la sblocchi. Tocca e tieni premuti contemporaneamente Indietro e Panoramica per sbloccare."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"La schermata rimane visibile finché la sblocchi. Tocca Panoramica e tieni premuto per sbloccare."</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 276c8cd..36eb5a7 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"חפש"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"מצלמה"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"טלפון"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"ביטול נעילה"</string>
     <string name="unlock_label" msgid="8779712358041029439">"בטל את הנעילה"</string>
     <string name="phone_label" msgid="2320074140205331708">"פתח את הטלפון"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"פתח את המצלמה"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"בחר פריסה חדשה להצגת משימות"</string>
     <string name="cancel" msgid="6442560571259935130">"ביטול"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‏שני פסים של WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‏שלושה פסים של WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‏אות ה-WiMAX מלא."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"אתרנט מנותק."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"אתרנט מחובר."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"אין אות."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"לא מחובר."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"אפס פסים."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> נדחה."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"כל האפליקציות האחרונות נסגרו."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"מפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"הודעה נדחתה."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"לוח הודעות."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"הגדרות מהירות."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"מסך נעילה."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"הגדרות"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"סקירה."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"אשר"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"סגור"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"משתמש <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"‏Wifi כבוי."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"מצב טיסה נכבה."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"מצב טיסה הופעל."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'נא לא להפריע\' פועל. הודעות בעדיפות בלבד."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'נא לא להפריע\' פועל. ללא הפרעות."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\'נא לא להפריע\' פועל. שקט מוחלט."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\'נא לא להפריע\' הופעל. התראות בלבד."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'נא לא להפריע\' כבוי."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'נא לא להפריע\' כבוי."</string>
@@ -237,7 +244,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="7309935569360609114">"ללא הפרעות"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"שקט מוחלט"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"‏Bluetooth ‏(<xliff:g id="NUMBER">%d</xliff:g> מכשירים)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"‏Bluetooth מופסק"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"חיפוש"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"הסט למעלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"הסט שמאלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"ללא הפרעות. גם לא התראות."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"צלילים ורטט לא יפריעו לך, פרט להתראות, תזכורות, אירועים ומתקשרים שתציין."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"צלילים ורטט לא יופעלו, פרט להתראות, תזכורות, אירועים ומתקשרים שתציין."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"התאם אישית"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"ללא הפרעות"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"רק הפרעות בעדיפות גבוהה"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"התראות בלבד"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"ההתראה הבאה שלך היא ב-<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"ההתראה הבאה שלך היא ב<xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"לא תשמע את ההתראה שלך ב-<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"פעולה זו חוסמת את כל הצלילים והרטט, כולל התראות, מוזיקה, סרטונים ומשחקים. תוכל עדיין להתקשר."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"הודעות בדחיפות נמוכה יותר בהמשך"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"גע שוב כדי לפתוח"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"החלק מעלה כדי לבטל את הנעילה"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"כדי להפעיל את הטלפון, החלק שמאלה"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"החלק ימינה להפעלת המצלמה"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"ללא הפרעות"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"הכל"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"ללא\nהפרעות"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"טוען (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד לסיום)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"‏השבת VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"‏נתק את ה-VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"המכשיר מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת יכול לעקוב אחר הגדרות, גישה עסקית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר, ולנהל אותם. למידע נוסף, פנה אל מנהל המערכת."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת יכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים מאובטחים.\n\nלמידע נוסף, פנה אל מנהל המערכת."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"המכשיר מנוהל על ידי:\n‏<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>‏.\n‏פרופיל העבודה שלך מנוהל על ידי:\n‏<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>‏.\n‏\n‏מנהל המערכת יכול לעקוב אחר פעילות המכשיר והרשת, כולל הודעות אימייל, אפליקציות ואתרים מאובטחים.\n\nלמידע נוסף, פנה למנהל המערכת."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"‏נתת לאפליקציה הרשאה להגדיר חיבור VPN.‏\n\nהאפליקציה הזאת יכולה לעקוב אחר המכשיר והפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים מאובטחים."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"‏נתת לאפליקציה כלשהי הרשאה להגדיר חיבור ‏VPN‏.\n\nהאפליקציה יכולה לעקוב אחר הפעילות שלך ברשת ובמכשיר, כולל הודעות אימייל, אפליקציות ואתרים."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"‏המכשיר מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת יכול לעקוב אחר הגדרות, גישה עסקית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר, ולנהל אותם.\n\nאתה מחובר ל-VPN שיכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"‏פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת יכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים מאובטחים.\n\nלמידע נוסף, פנה אל מנהל המערכת.\n\nאתה מחובר גם ל-VPN שיכול לעקוב אחר הפעילות שלך ברשת."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"‏המכשיר מנוהל על ידי <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nפרופיל העבודה שלך מנוהל על ידי:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nמנהל המערכת יכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים מאובטחים.\n\nלמידע נוסף, פנה אל מנהל המערכת.\n\nאתה מחובר גם ל-VPN שיכול לעקוב אחר הפעילות האישית שלך ברשת"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"‏פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת שלך יכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך.\n\nאתה מחובר גם לרשת VPN, שיכולה לעקוב אחר הפעילות שלך ברשת."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>. הוא מחובר לאפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת העסקית, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>. הוא מחובר לאפליקציה <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת העסקית, כולל הודעות אימייל, אפליקציות ואתרים.\n\nאתה מחובר גם לאפליקציה <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"המכשיר שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת שלך יכול לעקוב אחר הגדרות, גישה עסקית, אפליקציות, נתונים המשויכים למכשיר שלך ומידע על מיקום המכשיר, ולנהל אותם.\n\nאתה מחובר לאפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"המכשיר יישאר נעול עד שתבטל את נעילתו באופן ידני"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"קבל התראות מהר יותר"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"צפה בהן לפני שתבטל נעילה"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"הצג הכל"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"הסתר הכל"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>‏. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"סיים כעת"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"המסך מוצמד"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"שומר בתצוגה עד לביטול ההצמדה. גע והחזק בו-זמנית ב\'הקודם\' ו\'סקירה\' כדי לבטל הצמדה."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"שומר בתצוגה עד לביטול ההצמדה. גע והחזק בו-זמנית ב\'הקודם\' ו\'סקירה\' כדי לבטל הצמדה."</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 757fa70..62baa69 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"検索"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"カメラ"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"電話"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"ロック解除"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ロック解除"</string>
     <string name="phone_label" msgid="2320074140205331708">"電話を起動"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"カメラを起動"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"新しいタスクレイアウトの選択"</string>
     <string name="cancel" msgid="6442560571259935130">"キャンセル"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX電波状態:レベル2"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX電波状態:レベル3"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX電波状態:フル"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"イーサネット接続を解除しました。"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"イーサネットに接続しました。"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"圏外です。"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"接続されていません。"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"レベル0"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>は削除されました。"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"最近のアプリケーションをすべて消去しました。"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>を開始しています。"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"通知が削除されました。"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知シェード"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"クイック設定"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ロック画面"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"設定"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"最近"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"確認"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"閉じる"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ユーザー: <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-FiをOFFにしました。"</string>
@@ -181,8 +188,8 @@
     <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"機内モードがONです。"</string>
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"機内モードをOFFにしました。"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"機内モードをONにしました。"</string>
-    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"[通知を非表示]はONで、重要な通知のみです。"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"[通知を非表示]はONで、サイレントです。"</string>
+    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"[通知を非表示]はONで、優先する通知のみです。"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"[通知を非表示]はONで、サイレントです。"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"[通知を非表示]はONで、アラームのみです。"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"[通知を非表示]はOFFです。"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"[通知を非表示]をOFFにしました。"</string>
@@ -235,9 +242,9 @@
     <string name="start_dreams" msgid="7219575858348719790">"スクリーンセーバー"</string>
     <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_priority_label" msgid="483232950670692036">"優先する通知のみ"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"アラームのみ"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"サイレント"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"サイレント"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth(端末数<xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth OFF"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"検索します"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"上にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"左にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"サイレント(アラームも鳴りません)"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"アラーム、リマインダー、予定、指定した人からの着信以外で音やバイブレーションに煩わされることはありません。"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"アラーム、リマインダー、予定、指定した人からの着信以外で音やバイブレーションに煩わされることはありません。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"カスタマイズ"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"サイレント"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"重要な通知のみ"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"アラームのみ"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"次のアラームは<xliff:g id="ALARM_TIME">%s</xliff:g>です"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"次のアラームは<xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>です"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g>のアラームは鳴りません"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"アラーム、音楽、動画、ゲームを含むすべての音とバイブレーションがブロックされます。電話をかけることはできます。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"緊急度の低い通知を下に表示"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"開くにはもう一度タップしてください"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"ロック解除するには上にスワイプしてください"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"右にスワイプして電話を表示"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"左にスワイプしてカメラを表示"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"サイレント"</string>
-    <string name="interruption_level_priority" msgid="6426766465363855505">"重要な通知のみ"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"すべて"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"通知\nなし"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中(フル充電まで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPNを無効にする"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPNを切断"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"この端末は<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者は設定、コーポレートアクセス、アプリ、端末に関連付けられたデータ、端末の位置情報を監視、管理できます。詳しくは管理者にお問い合わせください。"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者はあなたのネットワークアクティビティ(メール、アプリ、保護されたウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"この端末は次の組織によって管理されています。\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nあなたのプロフィールは次の組織によって管理されています。\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\n管理者はあなたの端末やネットワークアクティビティ(メール、アプリ、保護されたウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"アプリにVPN接続のセットアップを許可しました。\n\nこのアプリはあなたの端末やネットワークアクティビティ(メール、アプリ、保護されたウェブサイトなど)を監視できます。"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"アプリにVPN接続のセットアップを許可しました。\n\nこのアプリはあなたの端末やネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"この端末は<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者は設定、コーポレートアクセス、アプリ、端末に関連付けられたデータ、端末の位置情報を監視、管理できます。\n\nVPNに接続しているため、VPNもネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者はあなたのネットワークアクティビティ(メール、アプリ、保護されたウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。\n\nVPNにも接続しているため、VPNもネットワークアクティビティを監視できます。"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"この端末は<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>によって管理されています。\nあなたの仕事用プロファイルは次の組織によって管理されています。\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\n管理者はあなたのネットワークアクティビティ(メール、アプリ、保護されたウェブサイトなど)を監視できます\n\n。詳しくは管理者にお問い合わせください。\n\nVPNにも接続しているためVPNも個人的なネットワークアクティビティを監視できます"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者はあなたのネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。\n\nVPNにも接続しているため、VPNもネットワークアクティビティを監視できます。"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"<xliff:g id="APPLICATION">%1$s</xliff:g>に接続しています。このアプリはあなたのネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"<xliff:g id="APPLICATION">%1$s</xliff:g>に接続しています。このアプリはあなたの個人のネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理され、<xliff:g id="APPLICATION">%2$s</xliff:g>に接続しています。このアプリはあなたの仕事のネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理され、<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>に接続しています。このアプリはあなたの仕事のネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>にも接続しているため、このアプリも個人のネットワークアクティビティを監視できます。"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"この端末は<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者は設定、コーポレートアクセス、アプリ、端末に関連付けられたデータ、端末の位置情報を監視、管理できます。\n\n<xliff:g id="APPLICATION">%2$s</xliff:g>に接続しているため、このアプリもネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"手動でロックを解除するまでロックされたままとなります"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"通知をすばやく確認できます"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ロックを解除する前にご確認ください"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"すべて表示"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"すべて非表示"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"今すぐ終了"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"画面が固定されました"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"固定を解除するまで画面が常に表示されるようになります。[戻る]と[最近]を同時に押し続けると固定が解除されます。"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"固定を解除するまで画面が常に表示されるようになります。[最近]を押し続けると固定が解除されます。"</string>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index 0dfa0eb..5fc889e 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"ძიება"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"კამერა"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ტელეფონი"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"ხმოვანი დახმარება"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"განბლოკვა"</string>
     <string name="unlock_label" msgid="8779712358041029439">"განბლოკვა"</string>
     <string name="phone_label" msgid="2320074140205331708">"ტელეფონის გახსნა"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"ხმოვანი დახმარების გახსნა"</string>
     <string name="camera_label" msgid="7261107956054836961">"კამერის გახსნა"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"ახალი ამოცანის განლაგების არჩევა"</string>
     <string name="cancel" msgid="6442560571259935130">"გაუქმება"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-ის ორი ზოლი."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-ის სამი ზოლი."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX სიგნალი სრულია."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet კავშირი შეწყვეტილია."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet დაკავშირებულია."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"სიგნალი არ არის."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"არ არის დაკავშირებული."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"სიგნალი ნულ ზოლზეა."</string>
@@ -162,13 +166,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ამოშლილია სიიდან."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ყველა ბოლო აპლიკაცია გაუქმდა."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> იწყება."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"შეტყობინება წაიშალა."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"შეტყობინებების ფარდა"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"სწრაფი პარამეტრები"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ეკრანის დაბლოკვა."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"პარამეტრები"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"მიმოხილვა"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"დადასტურება"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"დახურვა"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"მომხმარებელი: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi გამორთულია."</string>
@@ -180,7 +185,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"თვითმფრინავის რეჟიმი გამოირთო."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"თვითმფრინავის რეჟიმი ჩაირთო."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ჩართულია რეჟიმი „არ შემაწუხოთ\", მხოლოდ პრიორიტეტები."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ჩართულია რეჟიმი „არ შემაწუხოთ\", შეწყვეტის გარეშე."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"„ნუ შემაწუხებთ“ ჩართულია, სრული სიჩუმე."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"„ნუ შემაწუხებთ“ ჩართულია, მხოლოდ გაფრთხილებები."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"„არ შემაწუხოთ“ გამორთულია"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"„არ შემაწუხოთ\" რეჟიმი გამორთულია."</string>
@@ -235,7 +240,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="7309935569360609114">"შეფერხებების გაეშე"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"სრული სიჩუმე"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> მოწყობილობა)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth გამორთულია"</string>
@@ -302,26 +307,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"ძიება"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"გაასრიალეთ ზემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"გაასრიალეთ მარცხნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"წყვეტების გარეშე. მაღვიძარების შემთხვევაშიც კი."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"თქვენ მიერ მითითებული მაღვიძარების, შეხსენებების, ღონისძიებებისა და ზარების გარდა, არავითარი ხმა და ვიბრაცია არ შეგაწუხებთ."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"თქვენ მიერ მითითებული გაფრთხილებების, შეხსენებების, ღონისძიებებისა და აბონენტების გარდა, არავითარი ხმა და ვიბრაცია არ შეგაწუხებთ."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"მორგება"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"შეწყვეტების გარეშე"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"მხოლოდ პრიორიტეტული შეწყვეტები"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"მხოლოდ გაფრთხილებები"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"თქვენი შემდეგი მაღვიძარაა <xliff:g id="ALARM_TIME">%s</xliff:g>-ზე"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"თქვენი შემდეგი მაღვიძარაა <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"თქვენს მაღვიძარას <xliff:g id="ALARM_TIME">%s</xliff:g>-ზე ვერ გაიგონებთ"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"ეს ბლოკავს ყველა ხმაურს და ვიბრაციას, მათ შორის, გაფრთხილებებით, მუსიკით, ვიდეოებით და თამაშებით შექმნილს. მიუხედავად ამისა, თქვენ შეძლებთ სატელეფონო ზარების განხორციელებას."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ქვემოთ მითითებულია ნაკლებად სასწრაფო შეტყობინებები"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"შეეხეთ ისევ გასახსნელად"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"გაასრიალეთ ზევით განსაბლოკად"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"გადაფურცლეთ მარჯვნივ ტელეფონისთვის"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"კამერისთვის მარცხენა შენაცვლება"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"შეფერხებების გარეშე"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"ტელეფონისთვის გადაფურცლეთ ხატულადან"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"ხმოვანი დახმარებისთვის გადაფურცლეთ ხატულადან"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"კამერისთვის გადაფურცლეთ ხატულადან"</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_all" msgid="1330581184930945764">"ყველა"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"არ არის\nშეფერხებები"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>-ის შეცვლა დასრულებამდე)"</string>
@@ -363,12 +362,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN-ის გაუქმება"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN-ის გათიშვა"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"თქვენ მოწყობილობას მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია ამ მოწყობილობასთან ასოცირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, მათ შორის, ქსელის აქტივობისა და თქვენი მოწყობილობის მდებარეობის ინფორმაციის მონიტორინგი და მართვა. დამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"თქვენ სამუშაო პროფილს მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპების და უსაფრთხო ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"თქვენ მოწყობილობას მართავს:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nთქვენ სამუშაო პროფილს მართავს:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია თქვენი მოწყობილობისა და ქსელის აქტივობის, მათ შორის, ელფოსტის, აპების და უსაფრთხო ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"თქვენ მიეცით ნებართვა აპს, რათა დააყენოს VPN კავშირი.\n\nამ აპს შეუძლია თქვენი მოწყობილობის და ქსელის აქტივობის, მათ შორის, ელფოსტების, აპების და უსაფრთხო საიტების  მონიტორინგი."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"თქვენ მიეცით ნებართვა აპს, დააყენოს VPN კავშირი.\n\nამ აპს შეუძლია თქვენი მოწყობილობის და ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების, მონიტორინგი."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"თქვენ მოწყობილობას მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია ამ მოწყობილობასთან ასოცირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, და ასევე თქვენი მოწყობილობის მდებარეობის ინფორმაციის მონიტორინგი და მართვა.\n\nთქვენ ასევე დაკავშირებული ხართ VPN-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპების და ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"თქვენ სამუშაო პროფილს მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპების და უსაფრთხო ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს.\n\nთქვენ ასევე დაკავშირებული ხართ VPN-თან, რომელსაც შეუძლია თქვენი პირადი ქსელის აქტივობის მონიტორინგი."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"თქვენ მოწყობილობას მართავს <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nთქვენ სამუშაო პროფილს მართავს:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპების და უსაფრთხო ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს.\n\nთქვენ ასევე დაკავშირებული ხართ VPN-თან, რომელსაც შეუძლია თქვენი პირადი ქსელის აქტივობის მონიტორინგი"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"თქვენს სამუშაო პროფილს მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია თქვენი ქსელის აქტივობის მონიტორინგი, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების.\n\nდამატებითი ინფორმაციისთვის, დაუკავშირდით თქვენს ადმინისტრატორს.\n\nთქვენ ასევე დაკავშირებული ხართ VPN-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის მონიტორინგი."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"თქვენ დაუკავშირდით <xliff:g id="APPLICATION">%1$s</xliff:g>-ს, რომელსაც შეუძლია თქვენი ქსელის აქტივობის მონიტორინგი, მათ შორის ელფოსტის, აპების და ვებ-საიტების."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"თქვენ დაუკავშირდით <xliff:g id="APPLICATION">%1$s</xliff:g>-ს, რომელსაც შეუძლია თქვენი პირადი ქსელის აქტივობის მონიტორინგი, მათ შორის ელფოსტის, აპების და ვებ-საიტების."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"თქვენს სამუშაო პროფილს მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>. ის დაკავშირებულია <xliff:g id="APPLICATION">%2$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი სამსახურის ქსელის აქტივობის მონიტორინგი, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების.\n\nდამატებითი ინფორმაციისთვის მიმართეთ თქვენს ადმინისტრატორს."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"თქვენს სამუშაო პროფილს მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>. ის დაკავშირებულია <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი სამსახურის ქსელის აქტივობის მონიტორინგი, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების.\n\nთქვენ ასევე დაკავშირებული ხართ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი პირადი ქსელის აქტივობის მონიტორინგი."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"თქვენს მოწყობილობას მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nადმინისტრატორს შეუძლია თქვენი მოწყობილობასთან ასოცირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, და ასევე მოწყობილობის მდებარეობის ინფორმაციის მონიტორინგი და მართვა.\n\nთქვენ დაკავშირებული ხართ <xliff:g id="APPLICATION">%2$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისათვის, დაუკავშირდით თქვენს ადმინისტრატორს."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"მოწყობილობის დარჩება ჩაკეტილი, სანამ ხელით არ გახსნით"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"შეტყობინებების უფრო სწრაფად მიღება"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"იხილეთ განბლოკვამდე"</string>
@@ -377,6 +379,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"ყველას ჩვენება"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"ყველას დამალვა"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"გამორთვა"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"გავრცობა"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"ჩაკეცვა"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"ეკრანი ჩამაგრებულია"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ამით ის ხედში დარჩება, სანამ ჩამაგრებას არ გააუქმებთ. ჩამაგრების გასაუქმებლად შეეხეთ და დააყოვნეთ „დაბრუნება“-ზე და „მიმოხილვა“-ზე ერთდროულად."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"ამით ის ხედში დარჩება, სანამ ჩამაგრებას არ გააუქმებთ. ჩამაგრების გასაუქმებლად შეეხეთ და დააყოვნეთ „მიმოხილვა“-ზე."</string>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml
index a5cd9ed..cb9c7ab 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Іздеу"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Телефон"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Бекітпесін ашу"</string>
     <string name="unlock_label" msgid="8779712358041029439">"бекітпесін ашу"</string>
     <string name="phone_label" msgid="2320074140205331708">"телефонды ашу"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"камераны ашу"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Жаңа тапсырма пішімін таңдау"</string>
     <string name="cancel" msgid="6442560571259935130">"Бас тарту"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX екі жолақ."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX үш жолақ."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX сигналы толық."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet ажыратылған."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet қосылған."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Сигнал жоқ."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Жалғанбаған."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Нөл жолақ."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> алынып тасталған."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Барлық жақындағы қабылданбаған қолданбалар."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> іске қосылуда."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Хабар алынып тасталды."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Хабарландыру тақтасы"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Жылдам параметрлер."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Бекіту экраны."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Параметрлер"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Шолу."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Растау"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Жабу"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Пайдаланушы <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi өшірілді."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Ұшақ режимі өшірілді."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ұшақ режимі қосылды."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Мазаламау режимі қосулы, тек басымдық"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Мазаламау режимі қосулы, үзілістерсіз"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Мазаламау режимі қосулы, толық тыныштық."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Кедергі жасамаңыз, тек дабылдар."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Мазаламау режимі өшірулі"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Мазаламау режимі өшірілді."</string>
@@ -235,7 +242,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="7309935569360609114">"Үзулерсіз"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Толық тыныштық"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> құрылғылары)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth өшірулі"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Іздеу"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үшін жоғары сырғыту."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үшін солға сырғыту."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Үзілулер болмайды. Тіпті дабылдар да."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Дабылдар, еске салғыштар, оқиғалар мен өзіңіз көрсеткен контактілердің қоңырауларынан басқа дыбыстар мен дірілдер мазаламайтын болады."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Дабылдар, еске салғыштар, оқиғалар мен өзіңіз көрсеткен контактілердің қоңырауларынан басқа дыбыстар мен дірілдер мазаламайтын болады."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Реттеу"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Үзулерсіз"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Тек басым үзулер"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Тек дабылдар"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Келесі дабыл — <xliff:g id="ALARM_TIME">%s</xliff:g> уақытында"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Келесі дабыл — <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> уақытында дабылды естімейсіз"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Дабыл, музыка, бейнелер мен ойындарды қоса алғанда, барлық дыбыстар мен дірілдер тыйылатын болады. Қоңырау шала беруіңізге болады."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Шұғылдығы азырақ хабарландырулар төменде"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Ашу үшін қайтадан түртіңіз"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Бекітпесін ашу үшін жанаңыз"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Телефон үшін оңға жанаңыз"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Камера үшін солға жанаңыз"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Кедергілерсіз"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Барлығы"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Кедергілер\nжоқ"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарядталуда (толғанша <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN функциясын өшіру"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN желісін ажырату"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Құрылғыңызды басқаратын:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nСіздің әкімшіңіз параметрлерді, корпоративтік мүмкіндікті, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғыңыздың орналасуы туралы ақпаратты қадағалай алады. Қосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Сіздің жұмыс профиліңізді басқаратын:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nСіздің әкімшіңіз электрондық пошта, қолданбалар және қауіпсіз сайттармен қоса, желідегі әрекеттеріңізді қадағалай алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Құрылғыңызды басқаратын:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nЖұмыс профиліңізді басқаратын:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nСіздің әкімшіңіз электрондық пошта, қолданбалар және қауіпсіз сайттарды қосқанда, құрылғыңызды және желілік белсенділікті қадағалай алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Сіз қолданбаға VPN байланысын орнатуға рұқсат бердіңіз.\n\nБұл қолданба электрондық пошта, қолданбалар және қауіпсіз сайттарды қосқанда, құрылғыны және желідегі әрекеттеріңізді қадағалай алады."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Қолданбаға VPN байланысын орнату рұқсатын бердіңіз.\n\nБұл қолданба құрылғыңызды және желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алады."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Құрылғыңызды басқаратын:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nСіздің әкімшіңіз параметрлерді, корпоративтік мүмкіндікті, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғыңыздың орналасуы туралы ақпаратты қадағалай алады.\n\nСіз электрондық пошта, қолданбалар және сайттарды қосқандағы желілік әрекеттеріңізді бақылай алатын VPN желісіне қосылдыңыз.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Сіздің жұмыс профиліңізді басқаратын:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nСіздің әкімшіңіз электрондық пошта, қолданбалар және қауіпсіз сайттармен қоса, желідегі әрекеттеріңізді қадағалай алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз.\n\nСіз сондай-ақ желідегі әрекеттеріңізді бақылай алатын VPN желісіне қосылдыңыз."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Құрылғыңызды басқаратын:<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nЖұмыс профиліңізді басқаратын:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nСіздің әкімшіңіз электрондық пошта, қолданбалар және қауіпсіз сайттарды қосқанда, құрылғыңызды және желідегі әрекеттеріңізді қадағалай алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз.\n\nСіз сондай-ақ сіздің жеке желілік әрекеттеріңізді бақылай алатын VPN желісіне қосылдыңыз"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады.\n\nӘкімші желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз.\n\nСондай-ақ сіз желідегі белсенділігіңізді бақылай алатын VPN желісіне қосылғансыз."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Сіз желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасына қосылғансыз."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Сіз жеке желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасына қосылғансыз."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады. Ол жұмыс кезінде желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%2$s</xliff:g> қолданбасына қосылған.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады. Ол желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> қолданбасына қосылған.\n\nСондай-ақ сіз желідегі жеке белсенділігіңізді бақылай алатын <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> қолданбасына қосылғансыз."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Құрылғыңызды <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады.\n\nӘкімші параметрлерді, корпоративтік рұқсатты, қолданбаларды, құрылғыңызбен байланысты деректерді және құрылғының орны туралы ақпаратты бақылай және басқара алады.\n\nСіз желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және евб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%2$s</xliff:g> қолданбасына қосылғансыз.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Қолмен бекітпесін ашқанша құрылғы бекітілген күйде қалады"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Хабарландыруларды тезірек алу"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Бекітпесін ашу алдында оларды көру"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Барлығын көру"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Барлығын жасыру"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Қазір өшіру"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Экран түйрелді"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Бұл сіз оны босатқанша оны көрсетіп тұрады. Босату үшін «Кері» және «Шолу» түймелерін бір уақытта басып тұрыңыз."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Бұл сіз оны босатқанша оны көрсетіп тұрады. Босату үшін «Шолу» түймесін бір уақытта басып тұрыңыз."</string>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 3fb8c2e..9c7bdaa 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"ស្វែងរក"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ម៉ាស៊ីន​ថត"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ទូរស័ព្ទ"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"ដោះ​​សោ"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ដោះ​សោ"</string>
     <string name="phone_label" msgid="2320074140205331708">"បើក​ទូរស័ព្ទ"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"បើក​ម៉ាស៊ីន​ថត"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"ជ្រើសប្លង់ភារកិច្ចថ្មី"</string>
     <string name="cancel" msgid="6442560571259935130">"បោះ​បង់​"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX ពីរ​កាំ។"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX បី​កាំ។"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"សញ្ញា WiMAX ពេញ។"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"បានផ្តាច់អ៊ីសឺរណិត។"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"បានភ្ជាប់អ៊ីសឺរណិត។"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"គ្មាន​សញ្ញា។"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"មិន​បាន​តភ្ជាប់​។"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"សូន្យ​កាំ។"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> បដិសេធ។"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"កម្មវិធីថ្មីៗទាំងអស់ត្រូវបានបោះបង់។"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"ចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ។"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"បាន​បដិសេធ​ការ​ជូនដំណឹង"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ពណ៌​ការ​ជូន​ដំណឹង"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ការ​កំណត់​រហ័ស។"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ចាក់​សោ​អេក្រង់។"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ការកំណត់"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ទិដ្ឋភាព​។"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"បញ្ជាក់"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"បិទ"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"អ្នក​ប្រើ <xliff:g id="USER">%s</xliff:g> ។"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"បាន​បិទ​វ៉ាយហ្វាយ។"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"បាន​បិទ​របៀប​ជិះ​យន្តហោះ។"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"បាន​បើក​របៀប​ជិះ​យន្តហោះ។"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"បានបើកមុខងារកុំរំខាន (អាទិភាពប៉ុណ្ណោះ)។"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"បានបើកមុខងារកុំរំខាន សូមកុំរំខាន"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"មុខងារកុំរំខានបានបើក ស្ងៀមស្ងាត់ទាំងស្រុង។"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"មុខងារកុំរំខានបានបើក សម្លេងរោទិ៍ប៉ុណ្ណោះ។"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"បានបិទមុខងារកុំរំខាន។"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"បានបិទមុខងារកុំរំខាន។"</string>
@@ -235,7 +242,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="7309935569360609114">"សូមកុំរំខាន"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"ស្វែងរក"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"រុញ​ឡើង​លើ​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"រុញ​ទៅ​ឆ្វេង​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"គ្មាន​ការ​ផ្អាក។ គ្មាន​ការ​ជូនដំណឹង​ពី​ព្រឹត្តិការណ៍។"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"អ្នកនឹងមិនរំខានដោយសម្លេង និងរំញ័រឡើយ លើកលែងតែសម្លេងរោទិ៍ ការរំលឹក ព្រឹត្តិការណ៍ និងអ្នកហៅដែលអ្នកបញ្ជាក់។"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"អ្នកនឹងមិនរំខានដោយសម្លេង និងរំញ័រឡើយ លើកលែងតែសម្លេងរោទិ៍ ការរំលឹក ព្រឹត្តិការណ៍ និងអ្នកហៅដែលអ្នកបានបញ្ជាក់ប៉ុណ្ណោះ។"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ប្ដូរតាមបំណង"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"គ្មាន​ការ​ផ្អាក"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"តែ​ការ​ផ្អាក​អាទិភាព​ប៉ុណ្ណោះ"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"សំឡេងរោទ៍ប៉ុណ្ណោះ"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"ការ​ជូនដំណឹង​បន្ទាប់​របស់​អ្នក​គឺនៅម៉ោង <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"ការ​ជូនដំណឹង​បន្ទាប់​របស់​អ្នក​គឺ​នៅ <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"អ្នកនឹងមិនឮការជូន​ដំណឹងរបស់អ្នកនៅម៉ោង <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"វារារាំងសំឡេង និងរំញ័រទាំងអស់ ដោយរួមបញ្ចូលទាំងសំឡេងរោទិ៍ តន្ត្រី វីដេអូ និងហ្គេម។ អ្នកនឹងនៅតែអាចធ្វើការហៅទូរស័ព្ទបានដដែល។"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ការ​ជូន​ដំណឹង​​មិន​សូវ​បន្ទាន់​ខាង​ក្រោម"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"ប៉ះ​ម្ដង​ទៀត​ដើម្បី​បើក"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"អូស​ឡើង​លើ ដើម្បី​ដោះ​សោ"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"អូស​ទៅ​ស្ដាំ​ដើម្បី​បើក​​ទូរស័ព្ទ"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"អូស​ទៅ​ឆ្វេង​​ដើម្បី​ប្រើ​​ម៉ាស៊ីន​ថត"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"គ្មានការរំខាន"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"ទាំងអស់"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"មិនមានការរំខា\nទេ"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"កំពុង​បញ្ចូល​ថ្ម (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើប​ពេញ)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"បិទ VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"ផ្ដាច់ VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ឧបករណ៍របស់អ្នកត្រូវបានគ្រប់គ្រងដោយ៖ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើល និងគ្រប់គ្រងការកំណត់ ការចូលដំណើរការជាក្រុម កម្មវិធី ទិន្នន័យដែលជាប់ទាក់ទងនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងនៃឧបករណ៍របស់អ្នក។ សម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"ប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>។\n\nអ្នកគ្រប់គ្រងរបស់អ្នកមានលទ្ធភាពអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រមានសុវត្ថិភាព។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"ឧបករណ៍របស់អ្នកត្រូវបានគ្រប់គ្រងដោយ៖\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ៖\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើលឧបករណ៍របស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រមានសុវត្ថិភាព។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"អ្នកបានអនុញ្ញាតឲ្យកម្មវិធីដំឡើងការភ្ជាប់ VPN។\n\nកម្មវិធីនេះអាចឃ្លាំមើលសកម្មភាពបណ្តាញ និងឧបករណ៍របស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រមានសុវត្ថិភាព។"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"អ្នកបានអនុញ្ញាតឲ្យកម្មវិធីរដំឡើងការភ្ជាប់ VPN ។\n\nកម្មវិធីនេះអាចឃ្លាំមើលឧបករណ៍ និងសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ឧបករណ៍របស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើល និងគ្រប់គ្រងការកំណត់ ការចូលដំណើរការជាក្រុម កម្មវិធី ទិន្នន័យដែលជាប់ទាក់ទងនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងនៃឧបករណ៍របស់អ្នក។\n\nអ្នកត្រូវបានភ្ជាប់ជាមួយ VPN ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"ប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកមានលទ្ធភាពអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រមានសុវត្ថិភាព។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។\n\nអ្នកក៏ត្រូវបានភ្ជាប់ជាមួួយ VPN ផងដែរ ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក។"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"ឧបករណ៍នេះត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ៖\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើលឧបករណ៍របស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រមានសុវត្ថិភាព។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។\n\nអ្នកក៏ត្រូវបានភ្ជាប់ជាមួយ VPN ផងដែរ ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញផ្ទាល់ខ្លួនរបស់អ្នក"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកមានលទ្ធភាពអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។\n\nអ្នកក៏ត្រូវបានភ្ជាប់ជាមួួយ VPN ផងដែរ ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក។"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"អ្នកត្រូវបានតភ្ជាប់ទៅ <xliff:g id="APPLICATION">%1$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"អ្នកត្រូវបានតភ្ជាប់ទៅ <xliff:g id="APPLICATION">%1$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"ប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>។ វាត្រូវបានតភ្ជាប់ទៅនឹង <xliff:g id="APPLICATION">%2$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រប់របស់អ្នក។"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"ប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>។ វាត្រូវបានតភ្ជាប់ទៅនឹង <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nអ្នកក៏ត្រូវបានតភ្ជាប់ផងដែរទៅនឹង <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញផ្ទាល់ខ្លួនរបស់អ្នក។"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ឧបករណ៍របស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកអាចឃ្លាំមើល និងគ្រប់គ្រងការកំណត់ ការចូលប្រើជាក្រុម កម្មវិធី ទិន្នន័យដែលជាប់ទាក់ទងនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងនៃឧបករណ៍របស់អ្នក។\n\nអ្នកត្រូវបានភ្ជាប់ជាមួយ <xliff:g id="APPLICATION">%2$s</xliff:g> ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ឧបករណ៍​នឹង​ចាក់​សោ​រហូត​ដល់​អ្នក​ដោះ​សោ​ដោយ​ដៃ"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"ទទួល​បាន​ការ​ជូន​ដំណឹង​កាន់តែ​លឿន"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ឃើញ​ពួកវា​មុន​ពេល​ដោះ​សោ"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"មើលទាំងអស់"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"លាក់ទាំងអស់"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"បញ្ចប់ឥឡូវនេះ"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"អេក្រង់​ត្រូវ​បាន​ភ្ជាប់"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"រក្សាទុក​វា​ក្នុង​ទិដ្ឋភាព​រហូត​ដល់​អ្នក​ផ្ដាច់។ ប៉ះ ហើយ​សង្កត់​ថយក្រោយ និង​ទិដ្ឋភាព​នៅ​ពេល​តែ​មួយ​ដើម្បី​ផ្ដាច់។"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"វា​រក្សាទុក​ក្នុង​ទិដ្ឋភាព​រហូត​ដល់​អ្នក​ផ្ដាច់។ ប៉ះ និង​សង្កត់​ទិដ្ឋភាព​ដើម្បី​ផ្ដាច់។"</string>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index 5c26c70..3c12cde 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"ಹುಡುಕು"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ಕ್ಯಾಮರಾ"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ಫೋನ್"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"ಅನ್‌ಲಾಕ್"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ಅನ್‌ಲಾಕ್ ಮಾಡು"</string>
     <string name="phone_label" msgid="2320074140205331708">"ಫೋನ್ ತೆರೆಯಿರಿ"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ಕ್ಯಾಮರಾ ತೆರೆಯಿರಿ"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"ಹೊಸ ಕಾರ್ಯ ವಿನ್ಯಾಸವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="cancel" msgid="6442560571259935130">"ರದ್ದುಮಾಡು"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX ಎರಡು ಪಟ್ಟಿಗಳು."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX ಮೂರು ಪಟ್ಟಿಗಳು."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX ಸಿಗ್ನಲ್‌ ಪೂರ್ತಿ ಇದೆ."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ಇಥರ್ನೆಟ್ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ಇಥರ್ನೆಟ್ ಸಂಪರ್ಕಗೊಳಿಸಲಾಗಿದೆ."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"ಸಂಕೇತವಿಲ್ಲ."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"ಸಂಪರ್ಕಗೊಂಡಿಲ್ಲ."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"ಶೂನ್ಯ ಪಟ್ಟಿಗಳು."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"ಅಧಿಸೂಚನೆ ವಜಾಗೊಂಡಿದೆ."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ಅಧಿಸೂಚನೆಯ ಛಾಯೆ."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‍ಗಳು."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ಲಾಕ್‌ ಪರದೆ."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ಸಮಗ್ರ ನೋಟ."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"ದೃಢೀಕರಿಸು"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"ಮುಚ್ಚು"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ಬಳಕೆದಾರ <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ವೈಫೈ ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್ ಅನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್ ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್, ಆದ್ಯತೆ ಮಾತ್ರ."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ, ಯಾವುದೇ ಅಡಚಣೆಗಳಿಲ್ಲ."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ, ಒಟ್ಟು ನಿಶ್ಯಬ್ಧ."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ಅಲಾರಮ್‌‌ಗಳಿಗೆ ಮಾತ್ರ ಅಡಚಣೆ ಮಾಡಬೇಡಿ."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆಫ್ ಆಗಿದೆ."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ತೊಂದರೆ ಮಾಡಬೇಡಿ ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string>
@@ -235,7 +242,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="7309935569360609114">"ಯಾವುದೇ ಅಡಚಣೆಗಳಿಲ್ಲ"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"ಹುಡುಕಿ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ಗಾಗಿ ಮೇಲಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ಗಾಗಿ ಎಡಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"ಅಲಾರಂಗಳನ್ನು ಸೇರಿದಂತೆ ಯಾವುದೇ ಅಡಚಣೆಗಳಿಲ್ಲ."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"ಅಲಾರಮ್‌ಗಳು, ಜ್ಞಾಪನೆಗಳು, ಈವೆಂಟ್‌ಗಳು ಮತ್ತು ನೀವು ಸೂಚಿಸುವ ಕರೆದಾರರನ್ನು ಹೊರತುಪಡಿಸಿ, ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳಿಂದ ನಿಮಗೆ ತೊಂದರೆ ಆಗುವುದಿಲ್ಲ."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"ಅಲಾರಮ್‌ಗಳು, ಜ್ಞಾಪನೆಗಳು, ಈವೆಂಟ್‌ಗಳು ಮತ್ತು ನೀವು ಸೂಚಿಸುವ ಕರೆದಾರರನ್ನು ಹೊರತುಪಡಿಸಿ, ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳಿಂದ ನಿಮಗೆ ತೊಂದರೆ ಆಗುವುದಿಲ್ಲ."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ಕಸ್ಟಮೈಸ್ ಮಾಡು"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"ಯಾವುದೇ ಅಡಚಣೆಗಳಿಲ್ಲ"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"ಆದ್ಯತೆಯ ಅಡಚಣೆಗಳು ಮಾತ್ರ"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"ಅಲಾರಮ್‌ಗಳು ಮಾತ್ರ"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"ನಿಮ್ಮ ಮುಂದಿನ ಅಲಾರಂ <xliff:g id="ALARM_TIME">%s</xliff:g> ಗೆ ಆಗಿದೆ"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"ನಿಮ್ಮ ಮುಂದಿನ ಅಲಾರಮ್ <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> ಆಗಿದೆ"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> ಗೆ ನೀವು ನಿಮ್ಮ ಅಲಾರಂ ಆಲಿಸುವುದಿಲ್ಲ"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಗೇಮ್‌ಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ಕೆಳಗೆ ಕಡಿಮೆ ಅವಸರದ ಅಧಿಸೂಚನೆಗಳು"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"ತೆರೆಯಲು ಮತ್ತೊಮ್ಮೆ ಸ್ಪರ್ಶಿಸಿ"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು ಸ್ವೈಪ್‌ ಮಾಡಿ"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ಫೋನ್‌ಗಾಗಿ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"ಕ್ಯಾಮರಾಗಾಗಿ ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"ಯಾವುದೇ ಅಡಚಣೆಗಳಿಲ್ಲ"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"ಎಲ್ಲ"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"ಯಾವುದೇ\nಅಡಚಣೆಗಳಿಲ್ಲ"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ ( ಪೂರ್ತಿ ಆಗುವವರೆಗೆ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN ಸಂಪರ್ಕಕಡಿತಗೊಳಿಸಿ"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಅವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹಾಗೂ ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಮತ್ತು ನಿರ್ವಹಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಅವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಸುರಕ್ಷಿತ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ಇವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಇವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಸುರಕ್ಷಿತ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"ನೀವು VPN ಸಂಪರ್ಕ ಹೊಂದಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡಿರುವಿರಿ.\n\nಈ ಅಪ್ಲಿಕೇಶನ್ ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಸುರಕ್ಷಿತ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"ನೀವು VPN ಸಂಪರ್ಕ ಹೊಂದಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡಿರುವಿರಿ.\n\nಈ ಅಪ್ಲಿಕೇಶನ್ ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಅವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹಾಗೂ ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nನೀವು VPN ಗೆ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವಿರಿ, ಅದು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಅವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಸುರಕ್ಷಿತ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.\n\nನೀವು VPN ಗೆ ಸಹ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವಿರಿ, ಅದು ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> ಅವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.\nನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಇವರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಸುರಕ್ಷಿತ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.\n\nನೀವು VPN ಗೆ ಸಹ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವಿರಿ, ಅದು ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ನಿಮ್ಮ ಪ್ರೊಫೈಲ್‌ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.\n\nನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ VPN ಗೆ ಕೂಡಾ ನೀವು ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"ನೀವು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"ನೀವು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್‌ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ. ಇದು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ಕೆಲಸದ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್‌ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ. ಇದು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ಕೆಲಸದ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿದೆ.\n\nನೀವು ಕೂಡಾ ವೈಯಕ್ತಿಕ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿರುವಿರಿ."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹಾಗೂ ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿರುವಿರಿ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ನೀವಾಗಿಯೇ ಅನ್‌ಲಾಕ್‌ ಮಾಡುವವರೆಗೆ ಸಾಧನವು ಲಾಕ್‌ ಆಗಿಯೇ ಇರುತ್ತದೆ"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"ವೇಗವಾಗಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ನೀವು ಅನ್‌ಲಾಕ್‌ ಮಾಡುವ ಮೊದಲೇ ಅವುಗಳನ್ನು ನೋಡಿ"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"ಎಲ್ಲವನ್ನೂ ನೋಡಿ"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"ಎಲ್ಲ ಮರೆಮಾಡಿ"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"ಈಗಲೇ ಅಂತ್ಯಗೊಳಿಸು"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"ಪರದೆಯನ್ನು ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ನೀವು ಅನ್‌ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಅನ್‌ಪಿನ್ ಮಾಡಲು ಒಂದೇ ಸಮಯದಲ್ಲಿ ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ ಹಾಗೂ ಅವಲೋಕಿಸಿ."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"ನೀವು ಅನ್‌ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಅನ್‌ಪಿನ್ ಮಾಡಲು ಅವಲೋಕನವನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ."</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index b768acc..dc717ec 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"검색"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"카메라"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"전화"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"잠금 해제"</string>
     <string name="unlock_label" msgid="8779712358041029439">"잠금 해제"</string>
     <string name="phone_label" msgid="2320074140205331708">"휴대전화 열기"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"카메라 열기"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"새 작업 레이아웃 선택"</string>
     <string name="cancel" msgid="6442560571259935130">"취소"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX 신호 막대가 두 개입니다."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX 신호 막대가 세 개입니다."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX 신호가 강합니다."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"이더넷에서 연결 해제되었습니다."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"이더넷에 연결되었습니다."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"신호가 없습니다."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"연결되지 않았습니다."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"신호 막대가 없습니다."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>이(가) 제거되었습니다."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"최근 사용한 애플리케이션을 모두 닫았습니다."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>을(를) 시작하는 중입니다."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"알림이 제거되었습니다."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"알림 세부정보"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"빠른 설정"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"화면을 잠급니다."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"설정"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"최근 사용"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"확인"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"닫기"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"사용자 <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi가 사용 중지되었습니다."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"비행기 모드가 사용 중지되었습니다."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"비행기 모드를 사용합니다."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"알림 일시중지 사용, 중요 알림만 수신"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"알림 일시중지 사용, 방해 금지"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"알림 일시중지 사용, 모두 차단"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"알림 일시중지 사용, 알람만 수신"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"알림 일시중지 사용 중지"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"알림 일시중지가 사용 중지되었습니다."</string>
@@ -235,7 +242,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="7309935569360609114">"방해 금지"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"검색"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 왼쪽으로 슬라이드"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"어떤 방해도 받지 않습니다. 알람도 울리지 않습니다."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"지정한 알람, 알림, 이벤트, 발신자를 제외하고 소리와 진동을 끕니다."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"지정한 알람, 알림, 이벤트, 발신자를 제외하고 소리와 진동을 끕니다."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"맞춤설정"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"모든 알림 차단"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"최우선 알림만 수신"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"알람만 수신"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"다음 알람 시각: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"다음 알람 일시: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g>에 알람을 들을 수 없습니다."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"알람, 음악, 동영상, 게임을 포함하여 모든 소리와 진동을 끕니다. 전화는 걸 수 있습니다."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"아래에 덜 급한 알림 표시"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"다시 터치하여 열기"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"위로 스와이프하여 잠금 해제"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"전화 기능을 사용하려면 오른쪽으로 스와이프하세요."</string>
-    <string name="camera_hint" msgid="5241441720959174226">"카메라를 사용하려면 왼쪽으로 스와이프하세요."</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"방해 금지"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"모두 수신"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"방해\n금지"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN 사용 중지"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN 연결 해제"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"이 기기는 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 관련된 데이터, 기기의 위치 정보를 모니터링하고 관리할 수 있습니다. 자세한 내용은 관리자에게 문의하세요."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 이메일, 앱, 보안 웹사이트를 포함한 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"기기 관리자:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\n직장 프로필 관리자:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\n관리자는 이메일, 앱, 보안 웹사이트를 비롯한 네트워크 활동과 기기를 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"VPN 연결을 설정할 수 있는 권한을 앱에 부여했습니다.\n\n이 앱에서 이메일, 앱, 보안 웹사이트 등의 네트워크 활동과 기기를 모니터링할 수 있습니다."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"VPN 연결을 설정할 수 있는 권한을 앱에 부여했습니다.\n\n이 앱에서 이메일, 앱, 웹사이트와 같은 내 네트워크 활동과 기기를 모니터링할 수 있습니다."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"이 기기는 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 관련된 데이터, 기기의 위치 정보를 모니터링하고 관리할 수 있습니다.\n\nVPN에 연결되어 있으므로 VPN 업체에서 이메일, 앱, 웹사이트를 비롯한 내 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 이메일, 앱, 보안 웹사이트를 포함한 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요.\n\n또한 현재 VPN에 연결되어 있으므로 VPN 업체에서도 내 네트워크 활동을 모니터링할 수 있습니다."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"기기 관리자: <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>. \n직장 프로필 관리자:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\n관리자는 이메일, 앱, 보안 웹사이트를 비롯한 내 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요.\n\n또한 현재 VPN에 연결되어 있으므로 VPN 업체에서도 내 네트워크 활동을 모니터링할 수 있습니다."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 이메일, 앱, 웹사이트와 같은 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요.\n\n또한 VPN에 연결되어 있으며 여기에서 내 네트워크 활동을 모니터링할 수 있습니다."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"<xliff:g id="APPLICATION">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"<xliff:g id="APPLICATION">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 개인 네트워크 활동을 모니터링할 수 있습니다."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다. 이는 <xliff:g id="APPLICATION">%2$s</xliff:g>에 연결되어 있으며 여기에서 이메일, 앱, 웹사이트와 같은 직장 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다. 이는 <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>에 연결되어 있으며 여기에서 이메일, 앱, 웹사이트와 같은 직장 네트워크 활동을 모니터링할 수 있습니다.\n\n또한 <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>에 연결되어 있으며, 여기에서 내 개인 네트워크 활동을 모니터링할 수 있습니다."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 기기를 관리합니다.\n\n관리자는 설정, 기업 액세스, 앱, 기기와 연결된 데이터, 기기의 위치 정보를 모니터링하고 관리할 수 있습니다.\n\n<xliff:g id="APPLICATION">%2$s</xliff:g>에 연결되어 있으며 여기에서 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"수동으로 잠금 해제할 때까지 기기가 잠금 상태로 유지됩니다."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"알림을 더욱 빠르게 받기"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"잠금 해제하기 전에 알림을 봅니다."</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"모두 보기"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"모두 숨기기"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"지금 종료"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"화면 고정됨"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"고정 해제하기 전까지 계속 표시됩니다. 고정 해제하려면 뒤로와 최근 사용을 동시에 길게 터치합니다."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"고정 해제하기 전까지 계속 표시됩니다. 고정 해제하려면 최근 사용을 길게 터치합니다."</string>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml
index 6de153a..c695314 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky-rKG/strings.xml
@@ -107,9 +107,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Издөө"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Телефон"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Кулпусун ачуу"</string>
     <string name="unlock_label" msgid="8779712358041029439">"кулпуну ачуу"</string>
     <string name="phone_label" msgid="2320074140205331708">"телефонду ачуу"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"камераны ачуу"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Жаңы тапшырманын планын тандаңыз"</string>
     <!-- no translation found for cancel (6442560571259935130) -->
@@ -146,6 +150,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX эки таякча."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX үч таякча."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX сигналы толук."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet ажырады."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet туташты."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Сигнал жок."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Туташуу жок."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Таякча жок."</string>
@@ -187,13 +193,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> жок болду."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Акыркы колдонмолордун баары көз жаздымда калтырылды."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> иштеп баштоодо."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Эскертме жок кылынды."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Эскертмелер көшөгөсү."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Тез тууралоолор."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Кулпуланган экран."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Жөндөөлөр"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Көз жүгүртүү."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Ырастоо"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Жабуу"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Колдонуучу <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi өчүрүлдү."</string>
@@ -205,7 +212,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Учак режими өчүрүлдү."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Учак режими күйгүзүлдү."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Тынчымды алба деген күйүк, артыкчылыктуулар гана."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Тынчымды алба деген күйүк, үзгүлтүккө учуратуулар жок."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Тынчымды албагыла, жымжырт болсун."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Тынчымды алба деген күйүк, ойготкучтар гана."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Тынчымды алба деген өчүк."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Тынчымды алба деген өчүрүлдү."</string>
@@ -260,7 +267,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="7309935569360609114">"Үзгүлтүксүз"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Тымтырс"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> түзмөк)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth өчүк"</string>
@@ -327,26 +334,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Издөө"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үчүн жогору жылмыштырыңыз."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үчүн солго жылмыштырыңыз."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Үзгүлтүктөр жок. Ойготкучтар дагы жок."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Ойготкучтар, эстеткичтер, окуялар жана сиз көрсөткөн чалуучулардан башка үндөр менен титирөөлөр тынчыңызды албайт."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Көрсөтүлгөн эскертүүлөрдөн, эскерткичтерден, окуялардан жана чалуучулардан тышкары башка үндөр жана дирилдөөлөр тынчыңызды албайт."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Ыңгайлаштыруу"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Үзгүлтүксүз"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Артыкчылыктуу үзгүлтүктөр гана"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Ойготкучтар гана"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Кийинки үн ишараты саат <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Кийинки үн ишараты <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Саат <xliff:g id="ALARM_TIME">%s</xliff:g> үн ишаратын укпайсыз."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү сыяктуу нерселердин баары өчүрүлөт. Бирок телефон чала бересиз."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Анчейин шашылыш эмес эскертмелер төмөндө"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Ачуу үчүн кайра тийиңиз"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Кулпуну ачуу үчүн серпип коюңуз"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Телефонду колдонуу үчүн оңго серпип коюңуз"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Камераны ачуу үчүн солго серпип коюңуз"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Үзгүлтүксүз"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Бардыгы"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Үзгүтүк\nжок"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Кубатталууда (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> толгонго чейин)"</string>
@@ -388,12 +392,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN\'ди өчүрүү"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN\'ди ажыратуу"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Түзмөгүңүздү <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат. Көбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуздун тармактагы аракетиңизди, анын ичинде электрондук почталар, колдонмолор жана коопсуз вебсайттарды, көзөмөлдөө мүмкүнчүлүгү бар.\n\nКөбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Түзмөгүңүздү төмөнкү башкарат:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nЖумуш профилиңизди төмөнкү башкарат:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистраторуңуз түзмөгүңүз жана тармактагы аракетиңизди, анын ичинде электрондук почталар, колдонмолор жана коопсуз вебсайттарды, көзөмөлдөй алат.\n\nКөбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Колдонмого VPN туташуу орнотуусуна уруксат бердиңиз.\n\nБул колдонмо түзмөгүңүздү жана тармактагы аракетиңизди, анын ичинде электрондук почталар, колдонмолор жана коопсуз вебсайттарды көзөмөлдөй алат."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Колдонмого VPN туташуусун орнотууга уруксат бердиңиз.\n\nБул колдонмо түзмөгүңүздү жана электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей алат."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Түзмөгүңүздү <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, түзмөгүңүзгө байланыштуу дайындарды жана түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат.\n\nСиз тармактагы жеке аракетиңизди көзөмөлдөй турган VPN\'ге туташкансыз.\n\nКөбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуздун тармактагы аракетиңизди, анын ичинде электрондук почталар, колдонмолор жана коопсуз вебсайттарды, көзөмөлдөө мүмкүнчүлүгү бар.\n\nКөбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз.\n\nСиз тармактагы жеке аракетиңизди көзөмөлдөй турган VPN\'ге да туташкансыз."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Түзмөгүңүздү <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> башкарат.\nЖумуш профилиңизди төмөнкү башкарат:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистраторуңуздун тармактагы аракетиңизди, анын ичинде электрондук почталар, колдонмолор жана коопсуз вебсайттарды, көзөмөлдөө мүмкүнчүлүгү бар.\n\nКөбүрөөк маалымат үчүн, администраторуңузга кайрылыңыз.\n\nСиз тармактагы жеке аракетиңизди көзөмөлдөй турган VPN\'ге да туташкансыз"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей алат.\n\nКөбүрөөк маалымат алуу үчүн, администраторуңузга кайрылыңыз.\n\nМындан тышкары, тармактагы аракеттериңизди тескей турган VPN\'ге да туташып турасыз."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактык аракеттерди тескей турган <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы жеке аракеттериңизди тескей турган <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат. Ал электрондук почта, колдонмолор жана вебсайттар сыяктуу жумуш тармагыңыздагы аракеттерди тескей турган <xliff:g id="APPLICATION">%2$s</xliff:g> менен туташкан.\n\n Көбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат. Ал электрондук почта, колдонмолор жана вебсайттар сыяктуу жумуш тармагыңыздагы аракеттерди тескей турган <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> менен туташкан.\n\n Мындан тышкары, тармактагы жеке аракеттериңизди тескеген <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> колдонмосуна туташып турасыз."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Түзмөгүңүздү <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\nАдминистраторуңуз түзмөгүңүздөгү жөндөөлөрдү, корпоративдик мүмкүнчүлүктү, колдонмолорду, дайындарды, ошону менен катар жайгашкан жер дайындарын башкарып, тийиштүү маалыматты карай алат.\n\nСиз электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тармактагы аракетиңизди тескей турган APPLICATION колдонмосуна туташып турасыз.\n<xliff:g id="APPLICATION">%2$s</xliff:g>Көбүрөөк маалымат алуу үчүн, администраторуңузга кайрылыңыз.\n\n"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Түзмөктүн кулпусу кол менен ачылмайынча кулпуланган бойдон алат"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Эскертмелерди тезирээк алуу"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Аларды кулпудан чыгараардан мурун көрүңүз"</string>
@@ -402,6 +409,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Бардыгын көрүү"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Баарын жашыруу"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Азыр бүтүрүү"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Экран кадалган"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Бул бошотулмайынча көрүнө берет. Бошотуу үчүн, бир убакта Артка жана Карап чыгууну коё бербей басып туруңуз."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Бул бошотулмайынча көрүнө берет. Бошотуу үчүн, Карап чыгууну коё бербей басып туруңуз."</string>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index 91684fc..dcae291 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"ຊອກຫາ"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ກ້ອງ"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ໂທລະສັບ"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"ປົດລັອກ"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ປົດລັອກ"</string>
     <string name="phone_label" msgid="2320074140205331708">"​ເປີດ​​ແປ້ນ​ໂທ​ລະ​ສັບ"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ເປີດ​ກ້ອງ"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"ເລືອກ​ແຜນ​ຜັງ​ໜ້າ​ວຽກ​ໃໝ່"</string>
     <string name="cancel" msgid="6442560571259935130">"ຍົກເລີກ"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX ສອງຂີດ."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX ສາມຂີດ."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"ສັນ​ຍານ WiMAX ເຕັມ."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ອີ​ເທີ​ເນັດ​ຕັດ​ເຊື່ອມ​ຕໍ່​ແລ້ວ."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ອີ​ເທີ​ເນັດ​ເຊື່ອມ​ຕໍ່​ແລ້ວ."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"ບໍ່ມີສັນຍານ."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"ບໍ່ໄດ້ເຊື່ອມຕໍ່."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"ບໍ່ມີຈັກຂີດ."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"ປິດ <xliff:g id="APP">%s</xliff:g> ແລ້ວ."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ທຸກ​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ບໍ່​ດົນ​ມາ​ນີ້​ຖືກ​ປ່ອຍ​ໄປ."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"ກຳ​ລັງ​ເປີດ <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"ປິດການແຈ້ງເຕືອນແລ້ວ."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ໜ້າຈໍແຈ້ງເຕືອນ."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ການຕັ້ງຄ່າດ່ວນ."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ລັອກ​ໜ້າ​ຈໍ."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ການ​ຕັ້ງ​ຄ່າ"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"​ພາບ​ຮວມ."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"ຢືນຢັນ"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"ປິດ"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ຜູ່ໃຊ້ <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ປິດ Wi-Fi ແລ້ວ."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ປິດ​ໂໝດ​ຢູ່​ໃນ​ຍົນ​ແລ້ວ."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ເປີດ​ໂໝດ​ຢູ່​ໃນ​ຍົນ​ແລ້ວ."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ຫ້າມ​ລະ​ກວນ​ເປີດ​ຢູ່, ບຸ​ລິ​ມະ​ສິດ​ເທົ່າ​ນັ້ນ."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ຫ້າມ​ລະ​ກວນ​ເປີດ​ຢູ່, ບໍ່​ມີ​ການ​ຂັດ​ຈັງ​ຫວະ."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ຫ້າມ​ລົບ​ກວນ​ເປີດ​ຢູ່, ຄວາມ​ງຽບ​ທັງ​ໝົດ."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ຫ້າມ​ລົບ​ກວນ​ເປີດ​ຢູ່, ໂມງ​ປຸກ​ເທົ່າ​ນັ້ນ."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ຫ້າມ​ລົບ​ກວນປິດຢູ່."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ຢ່າ​ລົບ​ກວນ​ປິດ​ແລ້ວ."</string>
@@ -235,7 +242,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="7309935569360609114">"ບໍ່​ມີ​ການ​ລົບກວນ"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"ຄວາມງຽບ​ທັງ​ໝົດ"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ອຸປະກອນ)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth ປິດ"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"ຊອກຫາ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"ເລື່ອນຂຶ້ນເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"ເລື່ອນໄປທາງຊ້າຍເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"ບໍ່​ມີ​ການ​ລົບ​ກວນ. ບໍ່​ວ່າ​ຈະ​ເປັນ​​ໂມງ​ປຸກ​ກໍ​ຕາມ."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"ທ່ານ​ຈະ​ບໍ່​ຖືກ​ລົບ​ກວນ​ຈາກ​ສຽງ ແລະ​ການ​ສັ່ນ, ຍົກ​ເວັ້ນ​ຈາກ​ໂມງ​ປຸກ, ການ​ເຕືອນ, ເຫດ​ການ, ແລະ​ຜູ້​ໂທ​ທີ່​ທ່ານ​ລະ​ບຸ."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"ທ່ານ​ຈະ​ບໍ່​ຖືກ​ລົບ​ກວນ​ຈາກ​ສຽງ ແລະ​ການ​ສັ່ນ, ຍົກ​ເວັ້ນ​ຈາກ​ໂມງ​ປຸກ, ການ​ເຕືອນ, ເຫດ​ການ, ແລະ​ຜູ້​ໂທ​ທີ່​ທ່ານ​ລະ​ບຸ."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ປັບແຕ່ງ"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"ບໍ່​ມີ​ການ​ລົບກວນ"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"ສະເພາະ​ເລື່ອງ​ສຳຄັນ​ເທົ່ານັນ"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"ໂມງ​ປຸກ​ເທົ່າ​ນັ້ນ"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"ໂມງ​ປຸກ​ຖັດ​ໄປ​ຂອງ​ທ່ານ​ແມ່ນ <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"ໂມງ​ປຸກ​ຖັດ​ໄປ​ຂອງ​ທ່ານ​ແມ່ນ <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"ທ່ານ​ຈະ​ບໍ່​ໄດ້​ຍິນ​ສຽງ​ໂມງ​ປຸກ​ໃນ​ເວ​ລາ <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"ອັນ​ນີ້ບ​ລັອກ​ທຸກ​ສຽງ ແລະ​ການ​ສັ່ນ, ລວມ​ທັງ​ຈາກ​ໂມງ​ປຸກ, ເພງ, ວິ​ດີ​ໂອ, ແລະ​ເກມ. ທ່ານ​ຍັງ​ຈະ​ສາ​ມາດ​ໂທ​ລະ​ສັບ​ໄດ້."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ການ​ແຈ້ງເຕືອນ​ທີ່​ສຳຄັນ​ໜ້ອຍ​ກວ່າ​ຢູ່​ດ້ານ​ລຸ່ມ"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"​ແຕະ​ອີກ​ເທື່ອ​ນຶ່ງ​ເພື່ອ​ເປີດ"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"ເລື່ອນ​ຂຶ້ນ​ເພື່ອ​ປົດ​ລັອກ"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ປັດ​ຂວາ​ເພື່ອ​ໃຊ້​ໂທ​ລະ​ສັບ"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"ປັດ​ຊ້າຍ​ເພື່ອ​ໃຊ້​ກ້ອງ"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"ບໍ່​ມີ​ການ​ລົບກວນ"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"ທັງໝົດ"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"ບໍ່​ມີ\nລົບ​ກວນ"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"ກຳ​ລັງ​ສາກ​ໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າ​ຈ​ະ​ເຕັມ)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"ປິດ​ການ​ໃຊ້ VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"ຕັດ​ການ​ເຊື່ອມ​ຕໍ່ VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g> . \n\n ຜູ້​ຄວບ​ຄຸມຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມ​ກວດ​ກາ ​ແລະ​ການ​ຄຸ້ມ​ຄອງ​ການຕັ້ງ​ຄ່າ, ແອັບ​ການ​ເຂົ້າ​ຫາ​ບໍ​ລິ​ສັດ, ຂໍ້​ມູນ​ທີ່​ກ່ຽວ​ຂ້ອງ​ກັບ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ, ແລະ​ຂໍ້​ມູນທີ່​ຕັ້ງ​ຂອງອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​. ສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​, ຕິດ​ຕໍ່​ຜູ້ຄວບ​ຄຸມຂອງ​ທ່ານ​."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"ໂປ​ຣ​ໄຟ​ລ໌​ວຽກ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້​ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ໄດ້​ ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌​ທີ່​ປອດ​ໄພ.\n\nສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ​: \n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g> . \n ໂປຣ​ໄຟລ໌​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ​: \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g> . \n\n ຜູ້​ຄວບ​ຄຸມຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມ​ກວດ​ກາອຸ​ປະ​ກອນ​ ແລະກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​, ລວມ​ທັງແອັບ​ອີ​ເມວ ແລະ​ເວັບ​ໄຊ​ທ໌​ທີ່​ປອດ​ໄພ. \n\n ສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"ທ່ານ​ໃຫ້​ສິດ​ອະ​ນຸ​ຍາດ​ກັບແອັບ​ເພື່ອ​ຕັ້ງ​ຄ່າ​ການ​ເຊື່ອມ​ຕໍ່ VPN.\n\nແອັບ​ນີ້​ສາ​ມາດ​ຕິດ​ຕາມອຸ​ປະ​ກອນ ແລະ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ໄດ້​ ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌​ທີ່​ປອດ​ໄພ"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"ທ່ານ​ໃຫ້​ສິດ​ອະ​ນຸ​ຍາດ​ກັບແອັບ​ເພື່ອ​ຕັ້ງ​ຄ່າ​ການ​ເຊື່ອມ​ຕໍ່ VPN ແລ້ວ.\n\nແອັບ​ນີ້​ສາ​ມາດ​ຕິດ​ຕາມອຸ​ປະ​ກອນ ແລະການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ໄດ້​ , ລວມ​ທັງ​ອີ​ເມວ, ແອັບ ແລະ​ເວັບ​ໄຊ​ທ໌."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້​ຄວບ​ຄຸມຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມ​ກວດ​ກາ ​ແລະ​ການ​ຄຸ້ມ​ຄອງ​ການຕັ້ງ​ຄ່າ, ແອັບ​ການ​ເຂົ້າ​ຫາ​ບໍ​ລິ​ສັດ, ຂໍ້​ມູນ​ທີ່​ກ່ຽວ​ຂ້ອງ​ກັບ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ, ແລະ​ຂໍ້​ມູນທີ່​ຕັ້ງ​ຂອງອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​.\n\nທ່ານ​ຍັງ​ເຊື່ອມ​ຕໍ່​ກັບ VPN, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ, ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌.\n\nສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"ໂປ​ຣ​ໄຟ​ລ໌​ວຽກ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ໄດ້​ ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌​ທີ່​ປອດ​ໄພ.\n\nສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​.\n\nທ່ານ​ຍັງ​ເຊື່ອມ​ຕໍ່​ກັບ VPN, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​​ຂອງ​ທ່ານ."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nໂປ​ຣ​ໄຟ​ລ໌​ວຽກ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\nຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ໄດ້​ ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌​ທີ່​ປອດ​ໄພ\n.\n\nສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​.\n\nທ່ານ​ຍັງ​ເຊື່ອມ​ຕໍ່​ກັບ VPN, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​ສ່ວນ​ຕົວ​ຂອງ​ທ່ານ"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ໂປ​ຣ​ໄຟ​ລ໌​ວຽກ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ໄດ້​ ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌​.\n\nສຳ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ.\n\nທ່ານ​ຍັງ​ເຊື່ອມ​ຕໍ່​ກັບ VPN, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ກິດ​ຈະ​ກຳ​ເຄືອ​ຂ່າຍ​​ຂອງ​ທ່ານ."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"ທ່ານ​ສາ​ມາດ​ເຊື່ອມ​ຕໍ່​ກັບ <xliff:g id="APPLICATION">%1$s</xliff:g> ໄດ້, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ໄດ້ ລວມ​ທັງ​ອີ​ເມວ, ແອັບ ແລະ​ເວັບ​ໄຊ​ທ໌."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"ທ່ານ​ເຊື່ອມ​ຕໍ່​ກັບ <xliff:g id="APPLICATION">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ສ່ວນ​ຕົວ​ຂອງ​ທ່ານ​ໄດ້, ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>. ມັນ​ເຊື່ອມ​ຕໍ່​ກັບ <xliff:g id="APPLICATION">%2$s</xliff:g> ແລ້ວ, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ສ່ວນ​ຕົວ​ຂອງ​ທ່ານ, ລວມ​ທັງ​ອີ​ເມວ, ແອັບ ແລະ​ເວັບ​ໄຊ​ທ໌.\nສຳ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ\n."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"ໂປ​ຣ​ໄຟ​ລ໌​ວຽກ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>. ມັນ​ເຊື່ອມ​ຕໍ່​ກັບ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ແລ້ວ, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ສ່ວນ​ຕົວ​ຂອງ​ທ່ານ, ລວມ​ທັງ​ອີ​ເມວ, ແອັບ ແລະ​ເວັບ​ໄຊ​ທ໌.\nທ່ານ​ຍັງ​ເຊື່ອມ​ຕໍ່​ກັບ\n <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ນຳ​ອີກ, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມ​ການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ສ່ວນ​ຕົວ​ຂອງ​ທ່ານໄດ້."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ​ຖືກ​ຄຸ້ມ​ຄອງ​ໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້​ຄວບ​ຄຸມຂອງ​ທ່ານ​ສາ​ມາດ​ຕິດ​ຕາມ​ກວດ​ກາ ​ແລະ​ການ​ຄຸ້ມ​ຄອງ​ການຕັ້ງ​ຄ່າ, ແອັບ​ການ​ເຂົ້າ​ຫາ​ບໍ​ລິ​ສັດ, ຂໍ້​ມູນ​ທີ່​ກ່ຽວ​ຂ້ອງ​ກັບ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ, ແລະ​ຂໍ້​ມູນທີ່​ຕັ້ງ​ຂອງອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ.\n\nທ່ານ​ເຊື່ອມ​ຕໍ່​ກັບ <xliff:g id="APPLICATION">%2$s</xliff:g> ແລ້ວ, ເຊິ່ງ​ສາ​ມາດ​ຕິດ​ຕາມການ​ເຄື່ອນ​ໄຫວ​ເຄືອ​ຂ່າຍ​ຂອງ​ທ່ານ, ລວມ​ທັງ​ອີ​ເມວ, ແອັບ, ແລະ​ເວັບ​ໄຊ​ທ໌.\n\nສຳ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ, ຕິດ​ຕໍ່​ຜູ້​ຄວບ​ຄຸມ​ຂອງ​ທ່ານ."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"ຮັບເອົາການ​ແຈ້ງເຕືອນ​ໄວຂຶ້ນ"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ເບິ່ງພວກ​ມັນກ່ອນ​ທ່ານຈະ​ປົດລັອກ"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"ເບິ່ງ​ທັງ​ໝົດ"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"ເຊື່ອງທັງ​ຫມົດ"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"ຢຸດດຽວນີ້"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"ປັກ​ໝຸດໜ້າ​ຈໍ​ແລ້ວ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ມັນ​ຈະ​ຮັກ​ສາ​ໜ້າ​ຈໍ​ໄວ້​ໃນ​ມຸມມອງ​ຂອງ​ທ່ານ​ຈົນ​ກວ່າ​ທ່ານ​ຈະ​ຖອດ​ໝຸດ. ​ແຕະ​ປຸ່ມ ກັບ​ຄືນ ແລະ ພາບ​ຮວມ​ ຄ້າງ​ໄວ້​ພ້ອມ​ກັນ​ເພື່ອ​ຖອດ​ໝຸດ."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"ມັນ​ຈະ​ຮັກ​ສາ​ໜ້າ​ຈໍ​ໄວ້​ໃນ​ມຸມມອງ​ຂອງ​ທ່ານ​ຈົນ​ກວ່າ​ທ່ານ​ຈະ​ຖອດ​ໝຸດ. ​ແຕະ​ປຸ່ມ ພາບ​ຮວມ​ ຄ້າງ​ໄວ້​ເພື່ອ​ຖອດ​ໝຸດ."</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index fdde3b5..31dd582 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Ieškoti"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparatas"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefonas"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Atrakinti"</string>
     <string name="unlock_label" msgid="8779712358041029439">"atrakinti"</string>
     <string name="phone_label" msgid="2320074140205331708">"atidaryti telefoną"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"atidaryti fotoaparatą"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Pasirinkti naują užduoties išdėstymą"</string>
     <string name="cancel" msgid="6442560571259935130">"Atšaukti"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Dvi „WiMAX“ signalo juostos."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Trys „WiMAX“ signalo juostos."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"„WiMAX“ signalas stiprus."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Atsijungta nuo eterneto."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Prijungta prie eterneto."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Nėra signalo."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Neprijungta."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nė vienos juostos."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Atsisakyta programos „<xliff:g id="APP">%s</xliff:g>“."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Atsisakyta visų naujausių programų."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Paleidžiama <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"„<xliff:g id="APP">%1$s</xliff:g>“ <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Pranešimo atsisakyta."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Pranešimų gaubtas."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Spartieji nustatymai."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Užrakinimo ekranas."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Nustatymai"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Apžvalga."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Patvirtinti"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Uždaryti"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Naudotojas <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"„Wi-Fi“ ryšys išjungtas."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lėktuvo režimas išjungtas."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lėktuvo režimas įjungtas."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Funkcija „Netrukdyti“ įjungta. Tik prioritetiniai įvykiai."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Funkcija „Netrukdyti“ įjungta. Jokių pertraukčių."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Įjungta funkcija „Netrukdyti“, visiška tyla."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Funkcija „Netrukdyti“ įjungta. Leidžiami tik signalai."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Funkcija „Netrukdyti“ išjungta."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Funkcija „Netrukdyti“ išjungta."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Netrukdyti"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Tik prioritetiniai įvykiai"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Tik signalai"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Jokių pertraukčių"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Visiška tyla"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"„Bluetooth“ (<xliff:g id="NUMBER">%d</xliff:g> įreng.)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"„Bluetooth“ išjungta"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Paieška"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slyskite aukštyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slyskite į kairę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Nėra trikdžių. Nėra net įspėjimų."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Jūsų netrikdys garsai ir vibravimas, išskyrus nurodytų signalų, priminimų, įvykių ir skambintojų garsus."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Jūsų netrikdys garsai ir vibravimas, išskyrus nurodytų signalų, priminimų, įvykių ir skambintojų garsus ir vibravimą."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tinkinti"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Jokių pertraukčių"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Tik prioritetinės pertrauktys"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Tik signalai"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Kito signalo laikas: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Kito signalo laikas: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> signalo negirdėsite"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Taip bus užblokuoti VISI garsai ir vibravimas, įskaitant signalų, muzikos, vaizdo įrašų ir žaidimų garsus ir vibravimą. Vis tiek galėsite skambinti telefonu."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mažiau skubūs pranešimai toliau"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Palieskite dar kartą, kad atidarytumėte"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Perbraukite aukštyn, kad atrakintumėte"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Perbraukite į dešinę, kad galėtumėte skambinti"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Perbraukite į kairę, kad būtų įjungtas fotoaparatas"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Jokių pertraukčių"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Visiška tyla"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Tik prioritetiniai"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Tik signalai"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Visi"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Neleidžiama\ntrukdyti"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Visiška\ntyla"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tik\nprioritetiniai"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tik\nsignalai"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Išjungti VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Atjungti VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės informacijos pasiekiamumo nustatymus, programas, su įrenginiu susietus duomenis ir įrenginio vietovės informaciją. Daugiau informacijos galite gauti susisiekę su administratoriumi."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Jūsų darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir saugias svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Jūsų įrenginį tvarko:\n„<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>“.\nJūsų darbo profilį tvarko:\n„<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>“.\n\nAdministratorius gali stebėti įrenginio ir tinklo veiklą, įskaitant el. laiškus, programas ir saugias svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Suteikėte programai leidimą užmegzti VPN ryšį.\n\nŠi programa gali stebėti įrenginio ir tinklo veiklą, įskaitant el. laiškus, programas ir saugias svetaines."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Suteikėte programai leidimą nustatyti VPN ryšį.\n\nŠi programa gali stebėti įrenginio ir tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės informacijos pasiekiamumo nustatymus, programas, su įrenginiu susietus duomenis ir įrenginio vietos informaciją.\n\nEsate prisijungę prie VPN, kuris gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Jūsų darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir saugias svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi.\n\nBe to, esate prisijungę prie VPN, kuris gali stebėti tinklo veiklą."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>“.\nJūsų darbo profilį tvarko:\n„<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>“.\n\nAdministratorius gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir saugias svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi.\n\nBe to, esate prisijungę prie VPN, kuris gali stebėti asmeninę tinklo veiklą"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jūsų darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi.\n\nBe to, esate prisijungę prie VPN, kuris gali stebėti tinklo veiklą."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti asmeninio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Jūsų darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION">%2$s</xliff:g>“, kuri gali stebėti darbo tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Jūsų darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>“, kuri gali stebėti darbo tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nTaip pat esate prisijungę prie programos „<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>“, kuri gali stebėti asmeninio tinklo veiklą."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės informacijos pasiekiamumo nustatymus, programas, su įrenginiu susietus duomenis ir įrenginio vietovės informaciją.\n\nEsate prisijungę prie programos „<xliff:g id="APPLICATION">%2$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Įrenginys liks užrakintas, kol neatrakinsite jo neautomatiniu būdu"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Greičiau gaukite pranešimus"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Peržiūrėti prieš atrakinant"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Žr. viską"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Slėpti viską"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Baigti dabar"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Ekranas prisegtas"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Tai bus rodoma, kol atsegsite. Kad atsegtumėte, tuo pačiu metu palieskite ir laikykite „Atgal“ ir „Apžvalga“."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Tai bus rodoma, kol atsegsite. Kad atsegtumėte, palieskite ir laikykite „Apžvalga“."</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 297dadc..7a2679f 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -84,9 +84,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Meklēt"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Tālruņa numurs"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Atbloķēt"</string>
     <string name="unlock_label" msgid="8779712358041029439">"atbloķēt"</string>
     <string name="phone_label" msgid="2320074140205331708">"atvērt tālruni"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"atvērt kameru"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Atlasiet jaunu uzdevumu izkārtojumu"</string>
     <string name="cancel" msgid="6442560571259935130">"Atcelt"</string>
@@ -122,6 +126,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX divas joslas."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX trīs joslas."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signāls pilns."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Pārtraukts savienojums ar tīklu Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Izveidots savienojums ar tīklu Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Nav signāla."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Savienojums nav izveidots."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nulle joslu"</string>
@@ -163,13 +169,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Lietotne <xliff:g id="APP">%s</xliff:g> vairs netiek rādīta."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Visas nesen izmantotās lietojumprogrammas tika noņemtas."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Notiek lietotnes <xliff:g id="APP">%s</xliff:g> palaišana."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Paziņojums netiek rādīts."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Paziņojumu panelis"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Ātrie iestatījumi"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Bloķēšanas ekrāns."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Iestatījumi"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pārskats."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Apstiprināt"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Aizvērt"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Lietotājs: <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi ir izslēgts."</string>
@@ -181,7 +188,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lidojuma režīms ir izslēgts."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lidojuma režīms ir ieslēgts."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Statuss Netraucēt ir ieslēgts, izvēlēts iestatījums Tikai prioritārie."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Statuss Netraucēt ir ieslēgts, izvēlēts iestatījums Bez pārtraukumiem."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Ieslēgts režīms “Netraucēt”, pilnīgs klusums."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Ieslēgts režīms “Netraucēt”, atļauti tikai signāli."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Statuss Netraucēt ir izslēgts."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Statuss Netraucēt tika izslēgts."</string>
@@ -236,7 +243,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Netraucēt"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Tikai prioritārie"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Tikai signāli"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Bez pārtraukumiem"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Pilnīgs klusums"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ierīce(-es))"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth savienojums ir izslēgts."</string>
@@ -303,26 +310,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Meklēt"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Velciet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Velciet pa kreisi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Bez traucējumiem. Pat bez brīdinājumiem"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Jūs netraucēs skaņas un vibrosignāli, ja vien tie nebūs modinātāji, atgādinājumi, pasākumi vai konkrēti zvanītāji, kurus būsiet norādījis."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Jūs netraucēs skaņas un vibrosignāli, ja vien tie nebūs modinātāji, atgādinājumi, pasākumi vai konkrēti zvanītāji, kurus būsiet norādījis."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Pielāgot"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Nepārtraukt"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Tikai prioritārie pārtraukumi"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Tikai signāli"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Jūsu nākamā signāla laiks: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Jūsu nākamā signāla datums un laiks: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Jūs nedzirdēsiet iestatīto signālu: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Tiks bloķētas VISAS skaņas un vibrosignāli, tostarp modinātāja, mūzikas, videoklipu un spēļu skaņas un signāli. Jūs joprojām varēsiet veikt tālruņa zvanus."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mazāk steidzami paziņojumi tiek rādīti tālāk"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Pieskarieties vēlreiz, lai atvērtu."</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Velciet uz augšu, lai atbloķētu"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Lai lietotu tālruni, velciet pa labi."</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Lai lietotu kameru, velciet pa kreisi."</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Bez pārtraukumiem"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Pilnīgs klusums"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Tikai prioritārie"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Tikai signāli"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Visi"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Nepārtraukt\n"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Pilnīgs\nklusums"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tikai\nprioritārie"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tikai\nsignāli"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Notiek uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string>
@@ -364,12 +368,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Atspējot VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Atvienot VPN tīklu"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes un datus, kas ir saistīti ar šo ierīci, kā arī informāciju par jūsu ierīces atrašanās vietu. Lai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pastu, lietotnes un drošās vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Jūsu ierīci pārvalda:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nJūsu darba profilu pārvalda:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nJūsu administrators var pārraudzīt jūsu ierīcē un tīklā veiktās darbības, tostarp e-pastu, lietotnes un drošās vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Jūs piešķīrāt lietotnei atļauju izveidot savienojumu ar VPN tīklu.\n\nŠī lietotne var pārraudzīt jūsu ierīcē un tīklā veiktās darbības, tostarp e-pastu, lietotnes un drošās vietnes."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Jūs piešķīrāt lietotnei atļauju izveidot savienojumu ar VPN tīklu.\n\nŠī lietotne var pārraudzīt jūsu ierīcē un tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes un datus, kas ir saistīti ar šo ierīci, kā arī informāciju par jūsu ierīces atrašanās vietu.\n\nIerīcē ir izveidots savienojums ar VPN tīklu, kurā var tikt pārraudzītas jūsu tīklā veiktās darbības, tostarp e-pasts, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pastu, lietotnes un drošās vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru.\n\nIerīcē ir arī izveidots savienojums ar VPN tīklu, kurā var tikt pārraudzītas jūsu tīklā veiktās darbības."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nJūsu darba profilu pārvalda:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nJūsu administrators var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pastu, lietotnes un drošās vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru.\n\nIerīcē ir arī izveidots savienojums ar VPN tīklu, kurā var tikt pārraudzītas jūsu tīklā veiktās darbības."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru.\n\nIerīcē ir arī izveidots savienojums ar VPN tīklu, kurā var tikt pārraudzītas jūsu tīklā veiktās darbības."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION">%2$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nIr piesaistīta arī lietojumprogramma <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes un datus, kas ir saistīti ar šo ierīci, kā arī informāciju par jūsu ierīces atrašanās vietu.\n\nIr piesaistīta lietojumprogramma <xliff:g id="APPLICATION">%2$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Ierīce būs bloķēta, līdz to manuāli atbloķēsiet."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Saņemiet paziņojumus ātrāk"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Skatiet tos pirms atbloķēšanas."</string>
@@ -378,6 +385,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Skatīt visus"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Slēpt visus"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Izslēgt"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Ekrāns ir piesprausts"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Šādi tas būs redzams līdz brīdim, kad to atspraudīsiet. Lai atspraustu, vienlaikus pieskarieties vienumiem “Atpakaļ” un “Pārskats” un turiet tos nospiestus."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Šādi tas būs redzams līdz brīdim, kad to atspraudīsiet. Lai atspraustu, pieskarieties vienumam “Pārskats” un turiet to nospiestu."</string>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml
index e151729..b8df531 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk-rMK/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Пребарај"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Фотоапарат"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Телефон"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Отклучување"</string>
     <string name="unlock_label" msgid="8779712358041029439">"отклучи"</string>
     <string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"отвори камера"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Изберете нов распоред на задача"</string>
     <string name="cancel" msgid="6442560571259935130">"Откажи"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX две цртички."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX три цртички."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Полн сигнал на WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Етернетот е исклучен."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Етернетот е поврзан."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Нема сигнал."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Не е поврзана"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Нула цртички."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> е отфрлена."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Сите неодамнешни апликации се отфрлени."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Се стартува <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Известувањето е отфрлено."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Панел за известување"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Брзи подесувања."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заклучи екран."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Поставки"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Краток преглед."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Потврди"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Затвори"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Корисник <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi е исклученo."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Авионскиот режим е исклучен."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Авионскиот режим е вклучен."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"„Не вознемирувај“ е вклучено, само приоритетни."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"„Не вознемирувај“ е вклучено, без прекини."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"„Не вознемирувај“ е вклучено, целосна тишина."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"„Не вознемирувај“ е вклучено, само аларми."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"„Не вознемирувај“ е исклучено."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"„Не вознемирувај“ е исклучено."</string>
@@ -237,7 +244,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="7309935569360609114">"Без прекини"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Целосна тишина"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> уреди)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth е исклучен"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Пребарај"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Лизгај нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Лизгај налево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Без прекини. Дури и без аларми."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Нема да ви пречат звуци и вибрации, освен од аларми, потсетници, настани и повикувачи што ќе ги наведете."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Нема да ви пречат звуци и вибрации, освен од аларми, потсетници, настани и повикувачи што ќе ги наведете."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Приспособи"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Без прекини"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Само приоритетни прекини"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Само аларми"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Следниот аларм е во <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Следниот аларм е <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Нема да го слушнете алармот во <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Ова ги блокира СИТЕ звуци и вибрации, вклучувајќи ги и оние од алармите, музиката, видеата и игрите. Сѐ уште ќе може да воспоставувате телефонски повици."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Долу се помалку итни известувања"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Допрете повторно за да отворите"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Повлечете за да се отклучи"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Повлечете надесно за телефон"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Повлечете налево за камера"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Без прекини"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Сѐ"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Нема\nпрекини"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Се полни (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> додека не се наполни)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Оневозможи ВПН"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Исклучи ВПН"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Со вашиот уред управува <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВашиот администратор може да ги следи и да управува со поставките, корпоративните пристапи, апликациите, податоците поврзани со вашиот уред и информациите за локација на уредот. За повеќе информации, контактирајте со администраторот."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Со вашиот уред управува <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВашиот администратор е во можност да ја следи вашата мрежна активност, вклучувајќи е-пошта, апликации и безбедни веб-локации.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Со вашиот уред управува:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nСо вашиот работен профил управува:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nВашиот администратор може да ги следи вашиот уред и мрежната активност, вклучувајќи ги е-поштата, апликациите и безбедните веб-локации.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Дозволивте апликацијата да постави VPN-конекција.\n\nАпликацијава може да го следи уредот и мрежната активност, вклучувајќи е-пошта, апликации и безбедни веб-локации."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Дозволивте апликацијата да постави поврзување преку ВПН.\n\nАпликацијата може да го следи уредот и активноста на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Со вашиот уред управува <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВашиот администратор може да ги следи и да управува со поставките, корпоративните пристапи, апликациите, податоците поврзани со вашиот уред и информациите за локација на уредот.\n\nПоврзани сте со VPN што може да ја следи вашата мрежна активност, вклучувајќи е-пошта, апликации и веб-локации.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Со вашиот уред управува <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВашиот администратор е во можност да ја следи вашата мрежна активност, вклучувајќи е-пошта, апликации и безбедни веб-локации.\n\nЗа повеќе информации, контактирајте со администраторот.\n\nИсто така, поврзани сте со VPN што може да ја следи мрежната активност."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Со овој уред управува <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nСо вашиот работен профил управува:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nВашиот администратор е во можност да ја следи вашата мрежна активност, вклучувајќи е-пошта, апликации и безбедни веб-локации.\n\nЗа повеќе информации, контактирајте со вашиот администратор.\n\nИсто така, поврзани сте со VPN што може да ја следи личната мрежна активност."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил.\n\nАдминистратор е во можност да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nЗа повеќе информации, контактирајте со администраторот.\n\nИсто така, поврзани сте на ВПН, којашто може да ја следи вашата активност на мрежата."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"ВПН"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Поврзани сте на <xliff:g id="APPLICATION">%1$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Поврзани сте на <xliff:g id="APPLICATION">%1$s</xliff:g>, којашто може да ја следи вашата лична активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил. Истиот е поврзан на <xliff:g id="APPLICATION">%2$s</xliff:g>, којашто може да ја следи вашата работна активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\n.За повеќе информации, контактирајте со администраторот."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил. Истиот е поврзан на <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, којашто може да ја следи вашата работна активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nВие исто така сте поврзани на <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, којашто може да ја следи вашата лична активност на мрежата."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот уред.\n\nВашиот администратор може да ги следи и да управува со параметрите, корпоративниот пристап, апликациите, податоците поврзани со уредот и информациите за локацијата на уредот.\n\nПоврзани сте на <xliff:g id="APPLICATION">%2$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Уредот ќе остане заклучен додека рачно не го отклучите"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Добивајте известувања побрзо"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Видете ги пред да отклучите"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Види ги сите"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Сокриј ги сите"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Заврши сега"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Екранот е прикачен"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ќе се гледа сè додека не го откачите. Допрете и држете Назад и Краток преглед истовремено за откачување."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ќе се гледа сè додека не го откачите. Допрете и држете Краток преглед за откачување."</string>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index 86f65ddc..615b1e2 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"തിരയൽ"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ക്യാമറ"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ഫോണ്‍"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"അണ്‍ലോക്ക് ചെയ്യുക"</string>
     <string name="unlock_label" msgid="8779712358041029439">"അൺലോക്കുചെയ്യുക"</string>
     <string name="phone_label" msgid="2320074140205331708">"ഫോൺ തുറക്കുക"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ക്യാമറ തുറക്കുക"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"പുതിയ ടാസ്‌ക് ലേഔട്ട് തിരഞ്ഞെടുക്കുക"</string>
     <string name="cancel" msgid="6442560571259935130">"റദ്ദാക്കുക"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX രണ്ട് ബാറുകൾ."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX മൂന്ന് ബാറുകൾ."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX മികച്ച സിഗ്‌നൽ."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ഇതർനെറ്റ് വിച്ഛേദിച്ചു."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ഇതർനെറ്റ് കണക്റ്റുചെയ്‌തു."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"സിഗ്‌നൽ ഇല്ല."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"കണക്റ്റുചെയ്‌തിട്ടില്ല."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"ബാറുകളൊന്നുമില്ല."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> നിരസിച്ചു."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"അടുത്തിടെയുള്ള എല്ലാ അപ്ലിക്കേഷനും നിരസിച്ചു."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ആരംഭിക്കുന്നു."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"അറിയിപ്പ് നിരസിച്ചു."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"അറിയിപ്പ് ഷെയ്‌ഡ്."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ദ്രുത ക്രമീകരണങ്ങൾ."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ലോക്ക് സ്‌ക്രീൻ."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ക്രമീകരണങ്ങൾ"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"കാഴ്ച."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"സ്ഥിരീകരിക്കുക"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"അടയ്‌ക്കുക"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ഉപയോക്താവ് <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"വൈഫൈ ഓഫാക്കി."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ഫ്ലൈറ്റ് മോഡ് ഓഫാക്കി."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ഫ്ലൈറ്റ് മോഡ് ഓണാക്കി."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓണാണ്, മുൻഗണന മാത്രം."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓണാണ്, തടസ്സങ്ങളൊന്നുമില്ല."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\'ശല്യപ്പെടുത്തരുത്\' ഓണാണ്, പൂർണ്ണ നിശബ്‌ദത."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\'ശല്യപ്പെടുത്തരുത്\' ഓണാണ്, അലാറം മാത്രം."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ശല്ല്യപ്പെടുത്തരുത് എന്നത് ഓഫാണ്."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓഫാക്കി."</string>
@@ -235,7 +242,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="7309935569360609114">"തടസ്സങ്ങളൊന്നുമില്ല"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"തിരയൽ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> എന്നതിനായി മുകളിലേയ്‌ക്ക് സ്ലൈഡുചെയ്യുക."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> എന്നതിനായി ഇടത്തേയ്‌ക്ക് സ്ലൈഡുചെയ്യുക."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"തടസ്സങ്ങളൊന്നുമില്ല. അലാറങ്ങൾ പോലുമില്ല."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"നിങ്ങൾ വ്യക്തമാക്കിയിട്ടുള്ള അലാറങ്ങൾ, ഓർമ്മപ്പെടുത്തലുകൾ, ഇവന്റുകൾ, കോളർമാർ എന്നിവ ഒഴികെയുള്ള ശബ്‌ദങ്ങളോ വൈബ്രേഷനുകളോ കാരണം നിങ്ങൾക്ക് ശല്യമുണ്ടാകില്ല."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"നിങ്ങൾ വ്യക്തമാക്കിയിട്ടുള്ള അലാറങ്ങൾ, ഓർമ്മപ്പെടുത്തലുകൾ, ഇവന്റുകൾ, കോളർമാർ എന്നിവ ഒഴികെയുള്ള ശബ്‌ദങ്ങളോ വൈബ്രേഷനുകളോ കാരണം നിങ്ങൾക്ക് ശല്യമുണ്ടാകില്ല."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ഇഷ്‌ടാനുസൃതമാക്കുക"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"തടസ്സങ്ങളൊന്നുമില്ല"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"മുൻഗണനാ തടസ്സങ്ങൾ മാത്രം"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"അലാറങ്ങൾ മാത്രം"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"നിങ്ങളുടെ അടുത്ത അലാറം <xliff:g id="ALARM_TIME">%s</xliff:g>-നാണ്"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"നിങ്ങളുടെ അടുത്ത അലാറം <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>-നാണ്"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"നിങ്ങൾ <xliff:g id="ALARM_TIME">%s</xliff:g>-ന് അലാറം കേൾക്കില്ല"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"ഇത് അലാറങ്ങൾ, സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയിൽ നിന്നുൾപ്പെടെ എല്ലാ ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളും തടയുന്നു. നിങ്ങൾക്ക് തുടർന്നും ഫോൺ വിളിക്കാനാകും."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ആവശ്യം കുറഞ്ഞ അറിയിപ്പുകൾ ചുവടെ നൽകിയിരിക്കുന്നു"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"തുറക്കുന്നതിന് വീണ്ടും സ്‌പർശിക്കുക"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"അൺലോക്കുചെയ്യുന്നതിന് മുകളിലേക്ക് സ്വൈപ്പുചെയ്യുക"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ഫോണിനായി വലതുവശത്ത് സ്വൈപ്പുചെയ്യുക"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"ക്യാമറയ്‌ക്കായി ഇടതുവശത്ത് സ്വൈപ്പുചെയ്യുക"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"തടസ്സങ്ങളൊന്നുമില്ല"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"എല്ലാം"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"തടസ്സങ്ങൾ\nഒന്നുമില്ല"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"ചാർജ്ജുചെയ്യുന്നു (പൂർണ്ണമാകുന്നതിന്, <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN പ്രവർത്തനരഹിതമാക്കുക"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN വിച്‌ഛേദിക്കുക"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്ട്രേറ്റർക്ക്, ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണവും കോർപ്പറേറ്റ് ആക്സസ്സും അപ്ലിക്കേഷനുകളും വിവരവും ഒപ്പം ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിച്ച് നിയന്ത്രിക്കാനാകും. കൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്ട്രേറ്റർക്ക് ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് ഇതാണ്:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nനിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് ഇതാണ്:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്ട്രേറ്റർക്ക് ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെ, ഉപകരണത്തിന്റെയും നെറ്റ്‌വർക്കിന്റെയും പ്രവർത്തനം നിരീക്ഷിക്കാനാകും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"VPN കണക്ഷൻ സജ്ജീകരിക്കാൻ നിങ്ങൾ ഒരു അപ്ലിക്കേഷന് അനുമതി നൽകി.\n\nഈ അപ്ലിക്കേഷന് നിങ്ങളുടെ ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെ, ഉപകരണത്തിന്റെയും നെറ്റ്‌വർക്കിന്റെയും പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"VPN കണക്ഷൻ സജ്ജീകരിക്കാൻ നിങ്ങൾ ഒരു അപ്ലിക്കേഷന് അനുമതി നൽകി.\n\nഈ അപ്ലിക്കേഷന് നിങ്ങളുടെ ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെ, ഉപകരണത്തിന്റെയും നെറ്റ്‌വർക്കിന്റെയും പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്ട്രേറ്റർക്ക്, ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണവും കോർപ്പറേറ്റ് ആക്സസ്സും അപ്ലിക്കേഷനുകളും വിവരവും ഒപ്പം ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിച്ച് നിയന്ത്രിക്കാനാകും.\n\nഇമെയിലുകളും അപ്ലിക്കേഷനുകളും വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു VPN-ലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്ട്രേറ്റർക്ക് ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.\n\nനിങ്ങളുടെ നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു VPN-ലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> ആണ്.\nനിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് ഇതാണ്:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്ട്രേറ്റർക്ക് ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെ, നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.\n\nനിങ്ങളുടെ വ്യക്തിഗത നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു VPN-ലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്ട്രേറ്റർക്ക് ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.\n\nനിങ്ങളുടെ നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു VPN-ലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"നിങ്ങൾ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, അപ്ലിക്കേഷനുകൾ, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"നിങ്ങൾ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, അപ്ലിക്കേഷനുകൾ, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്. അത് <xliff:g id="APPLICATION">%2$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു, ഇതിന് ഇമെയിലുകൾ, അപ്ലിക്കേഷനുകൾ, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ ഔദ്യോഗിക നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്. അത് <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു, ഇതിന് ഇമെയിലുകൾ, അപ്ലിക്കേഷനുകൾ, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ ഔദ്യോഗിക നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും.\n\nനിങ്ങൾ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> എന്നതിലേക്കും കണക്റ്റുചെയ്‌തിരിക്കുന്നു, അതിന് നിങ്ങളുടെ സ്വകാര്യ നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർക്ക്, ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണവും കോർപ്പറേറ്റ് ആക്‌സസ്സും അപ്ലിക്കേഷനുകളും വിവരവും ഒപ്പം ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിച്ച് നിയന്ത്രിക്കാനാകും.\n\nഇമെയിലുകളും അപ്ലിക്കേഷനുകളും വെബ്‌സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്‌വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു <xliff:g id="APPLICATION">%2$s</xliff:g> എന്നതിലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"നിങ്ങൾ സ്വമേധയാ അൺലോക്കുചെയ്യുന്നതുവരെ ഉപകരണം ലോക്കുചെയ്‌തതായി തുടരും"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"അറിയിപ്പുകൾ വേഗത്തിൽ സ്വീകരിക്കുക"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"അൺലോക്കുചെയ്യുന്നതിന് മുമ്പ് അവ കാണുക"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"എല്ലാം കാണുക"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"എല്ലാം മറയ്ക്കുക"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"ഇപ്പോള്‍ അവസാനിപ്പിക്കുക"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"സ്‌ക്രീൻ പിൻ ചെയ്‌തു"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തുന്നു. അൺപിൻ ചെയ്യാൻ \'മടങ്ങുക\', \'ചുരുക്കവിവരണം\' എന്നിവ ഒരേ സമയം സ്‌പർശിച്ച് പിടിക്കുക."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തുന്നു. അൺപിൻ ചെയ്യുന്നതിന് \'ചുരുക്കവിവരണം\' സ്‌പർശിച്ചുപിടിക്കുക."</string>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index 52cdfc9..e2bfc8d 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -81,9 +81,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Хайх"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Камер"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Утас"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Тайлах"</string>
     <string name="unlock_label" msgid="8779712358041029439">"тайлах"</string>
     <string name="phone_label" msgid="2320074140205331708">"утас нээх"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"камер нээх"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Шинэ ажиллах талбарыг сонгоно уу"</string>
     <string name="cancel" msgid="6442560571259935130">"Цуцлах"</string>
@@ -119,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX хоёр баганатай."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX гурван баганатай."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX дохио дүүрэн."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet саллаа."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet холбогдсон."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Дохио байхгүй."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Холбогдоогүй."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Тэг баганатай."</string>
@@ -160,13 +166,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> байхгүй."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Хамгийн сүүлийн бүх програмыг арилгасан байна."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж байна."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Мэдэгдэл хаагдсан."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Мэдэгдлийн хураангуй самбар"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Шуурхай тохиргоо."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Дэлгэц түгжих."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Тохиргоо"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Тойм"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Баталгаажуулах"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Хаах"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Хэрэглэгч <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi унтраасан."</string>
@@ -178,7 +185,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Нислэгийн горимыг унтраасан."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Нислэгийн горимыг асаасан."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Бүү саад болно уу.Зөвхөн чухал зүйлст."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Бүү саад болно уу. Аливаа саад учруулахгүй байна уу."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Дуугүй байх. Бүү саад бол."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Бүү саад бол, зөвхөн сэрүүлгийг асаа."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Бүү саад бол."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Идэвхгүй болгох үйлдэлд бүү саад бол."</string>
@@ -233,7 +240,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="7309935569360609114">"Аливаа саад байхгүй байх"</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>
@@ -300,26 +307,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Хайх"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-г гулсуулах."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх зүүнлүү гулсуулах."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Тасалдал байхгүй. Сэрүүлэг ч байхгүй."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Танд сэрүүлгэ, сануулга, үйл явдлын сануулга, таны сануулсан дуудлага зэргээс бусад дуу чимээ, чичиргээ танд садаа болохгүй."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Танд сэрүүлгэ, сануулга, үйл явдлын сануулга, таны сануулсан дуудлага зэргээс бусад дуу чимээ, чичиргээ танд садаа болохгүй."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Тохируулах"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Ямар ч тасалдалгүй"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Зөвхөн нэн тэргүүний тасалдалд"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Зөвхөн сэрүүлэг"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Таны дараагийн сэрүүлгийн цаг <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Таны дараагийн сэрүүлгийн цаг <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Та <xliff:g id="ALARM_TIME">%s</xliff:g>-д өөрийн сэрүүлгээ сонсохгүй"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Энэ нь сануулга, хөгжим, видео, тоглоом зэргийг оруулаад зэрэг БҮХ дуу, чичиргээг блоклодог. Та дуудлага хийх боломжтой хэвээр л байна."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Яаралтай биш мэдэгдлүүдийг доор"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Нээхийн тулд дахин хүрнэ үү"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Түгжээг тайлах бол шудрана уу"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Утас гаргахын тулд баруун шударна уу"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Камер гаргахын тулд зүүн шударна уу"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Аливаа саад байхгүй байх"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Бүгд"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Ямар ч\nтасалдал байхгүй"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -361,12 +365,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN идэвхгүйжүүлэх"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN таслах"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Таны төхөөрөмж удирдагч <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nТаны админ таны төхөөрөмжтэй холбоотой тохиргоо, байгууллагын хандалт, мэдээлэл болон байршлын мэдээллийг удирдан, хяналт тавих боломжтой."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Таны ажлын профайлыг удирдагч <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nТаны админ имэйл, апп, аюулгүй вэбсайт гэх мэт төхөөрөмж, сүлжээний үйл ажиллагааг хянадаг.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Таны төхөөрөмж удирдагч:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nТаны ажлын профайлыг удирдагч:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nТаны админ имэйл, апп, аюулгүй вэбсайт гэх мэт төхөөрөмж, сүлжээний үйл ажиллагааг хянадаг.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Та апп-д VPN холболт хийхийг зөвшөөрсөн байна.\n\nЭнэхүү апп нь имэйл, апп, аюулгүй вэбсайт гэх мэт төхөөрөмж, сүлжээний үйл ажиллагааг хянах боломжтой."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Та апп-д VPN холболт хийхийг зөвшөөрсөн байна.\n\n Энэхүү апп нь таны имэйл, апп, аюулгүй вэбсайт зэрэг төхөөрөмж болон сүлжээний үйл ажиллагааг хянах боломжтой."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Таны төхөөрөмжийн удирдагч <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nТаны админ таны төхөөрөмжтэй холбоотой тохиргоо, байгууллагын хандалт, мэдээлэл болон байршлын мэдээллийг удирдан, хяналт тавих боломжтой.\n\nТа таны имэйл, апп, вэб сайтын үйл ажиллагааг хянах VPN-д холбогдсон байна.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Таны ажлын профайлыг удирдагч <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nТаны админ имэйл, апп, аюулгүй вэбсайт гэх мэт төхөөрөмж, сүлжээний үйл ажиллагааг хянадаг.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу.\n\nМөн та таны хувийн сүлжээний үйл ажиллагааг хянах VPN-д холбогдсон байна."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Таны төхөөрөмжийг удирдагч <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nТаны ажлын профайлыг удирдагч:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nТаны админ имэйл, апп, аюулгүй вэбсайт гэх мэт төхөөрөмж, сүлжээний үйл ажиллагааг хянадаг.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу.\n\nМөн та таны хувийн сүлжээний үйл ажиллагааг хянах VPN-д холбогдсон байна"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Таны ажлын профайлыг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг.\n\nАдмин нь таны имэйл,апп болон вэбсайт зэрэг сүлжээний үйл ажиллагааг хянадаг. \n\n Дэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу. \n\nМөн та VPN-д холбогдсон бөгөөд ингэснээр өөрийн сүлжээний үйл ажиллагааг хянах боломжтой байна."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Та <xliff:g id="APPLICATION">%1$s</xliff:g>-д холбогдсон бөгөөд ингэснээр имэйл, апп, аюулгүй вебсайт зэрэг сүлжээний үйл ажиллагаагаа хянах боломжтой."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Та <xliff:g id="APPLICATION">%1$s</xliff:g>-д холбогдсон бөгөөд ингэснээр имэйл, апп, аюулгүй вебсайт зэрэг сүлжээний үйл ажиллагаагаа хянах боломжтой."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Таны ажлын профайлыг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг. Энэ нь <xliff:g id="APPLICATION">%2$s</xliff:g>-тай холбогдсон бөгөөд таны имэйл, апп, аюулгүй вебсайт зэрэг сүлжээний үйл ажиллагаагаа хянах боломжтой.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Таны ажлын профайлы <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг. Энэ нь <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>-тай холбогдсон бөгөөд таны имэйл, апп, аюулгүй вебсайт зэрэг сүлжээний үйл ажиллагаагаа хянах боломжтой.\n\nМөн та <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>-д холбогдсон бөгөөд ингэснээр сүлжээний хувийн үйл ажиллагааг хянаж чадна."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Таны төхөөрөмжийг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг.\n\n Танай админ төхөөрөмж, төхөөрөмжийн байршилтай холбоотой өгөгдлийг холбох, тохиргоог өөрчлөх болон хяналт тавих боломжтой.\n\nТа <xliff:g id="APPLICATION">%2$s</xliff:g>-тай холбогдсон бөгөөд ингэснээр таны имэйл,апп, аюулгүй вебсайт зэрэг сүлжээний үйл ажиллагаагаа хянах боломжтой.\n\n Дэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Таныг гараар онгойлгох хүртэл төхөөрөмж түгжээтэй байх болно"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Мэдэгдлийг хурдан авах"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Түгжээг тайлахын өмнө үзнэ үү"</string>
@@ -375,6 +382,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Бүгдийг харах"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Бүгдийг нуух"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Одоо дуусгах"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Дэлгэц эхэнд байрлуулагдсан"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Таныг эхэнд нээхийг болиулах хүртэл харагдана. Хүрээд, Back дээр удаан дараад хаахдаа Overview-ийг дар"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Таныг эхэнд нээхийг болиулах хүртэл харагдана. Хаахын тулд хүрээдOverview-ийг дар"</string>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml
index e8baf4f..b3ea98f 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr-rIN/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"शोधा"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"कॅमेरा"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"फोन"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"अनलॉक करा"</string>
     <string name="unlock_label" msgid="8779712358041029439">"अनलॉक करा"</string>
     <string name="phone_label" msgid="2320074140205331708">"फोन उघडा"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"कॅमेरा उघडा"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"नवीन कार्य लेआउट निवडा"</string>
     <string name="cancel" msgid="6442560571259935130">"रद्द करा"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX दोन बार."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX तीन बार."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX सिग्नल पूर्ण."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"इथरनेट डिस्कनेक्ट केले."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"इथरनेट कनेक्ट केले."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"सिग्नल नाही."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"कनेक्ट केले नाही."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"शून्य बार."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> डिसमिस केला."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"अलीकडील सर्व अनुप्रयोग डिसमिस झाले."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करीत आहे."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना डिसमिस केल्या."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना शेड."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"द्रुत सेटिंग्ज."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"लॉक स्क्रीन."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"सेटिंग्ज"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"विहंगावलोकन."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"पुष्टीकरण करा"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"बंद करा"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"वापरकर्ता <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi बंद झाले."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"विमान मोड बंद केला."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"विमान मोड चालू केला."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"व्यत्यय आणू नका चालू, केवळ प्राधान्य."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"व्यत्यय आणू नका चालू, कोणताही व्यत्यय नाही."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"व्यत्यय आणू नका चालू, संपूर्ण शांतता."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"व्यत्यय आणू नका चालू, केवळ अलार्म."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"व्यत्यय आणू नका बंद."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"व्यत्यय आणू नका बंद करा"</string>
@@ -235,7 +242,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="7309935569360609114">"कोणतेही व्यत्यय नाही"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"शोध"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> साठी वर स्लाइड करा."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> साठी डावीकडे स्लाइड करा."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"कोणतेही व्यत्यय नाहीत. अगदी अलार्मचे देखील नाहीत."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"आपण निर्दिष्‍ट करता ते अलार्म, स्मरणपत्रे, इव्हेंट आणि कॉलर व्यतिरिक्त आपल्याला आवाज आणि कंपनांमुळे व्यत्यय येणार नाही."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"आपण निर्दिष्‍ट करता ते अलार्म, स्मरणपत्रे, इव्हेंट आणि कॉलर व्यतिरिक्त, आपल्याला आवाज आणि कंपनांमुळे व्यत्यय येणार नाही."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"सानुकूलित करा"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"कोणतेही व्यत्यय नाही"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"केवळ प्राधान्य दिलेले व्‍यत्यय"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"केवळ अलार्म"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"आपला पुढील अलार्म <xliff:g id="ALARM_TIME">%s</xliff:g> वाजता आहे"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"आपला पुढील अलार्म <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> आहे"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"आपण आपला अलार्म <xliff:g id="ALARM_TIME">%s</xliff:g> वाजता ऐकणार नाही"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"हे अलार्म, संगीत, व्हिडिओ आणि गेम यासह, सर्व आवाज आणि कंपने अवरोधित करते. आपण तरीही फोन कॉल करण्यात सक्षम व्हाल."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"खाली कमी तातडीच्या सूचना"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"उघडण्यासाठी पुन्हा स्पर्श करा"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"अनलॉक करण्यासाठी स्वाइप करा"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"फोन साठी उजवीकडे स्वाइप करा"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"कॅमेर्‍यासाठी डावीकडे स्वाइप करा"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"कोणतेही व्यत्यय नाहीत"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"सर्व"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"कोणतेही व्यत्यय\nनाही"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण होईपर्यंत) चार्ज होत आहे"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करा"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्कनेक्ट करा"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"आपले डिव्हाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केलेले आहे.\n\nआपला प्रशासक आपल्या डिव्हाइसशी संबंधित सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू शकतो. अधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"आपला कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केलेला आहे.\n\nआपला प्रशासक आपल्या ईमेल, अॅप्स आणि सुरक्षित वेबसाइटसह आपल्या नेटवर्क क्रियाकलापांचे परीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"आपले डिव्हाइस याद्वारे व्यवस्थापित केले आहे:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nआपला प्रोफाईल याद्वारे व्यवस्थापित केला आहे:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nआपला प्रशासक ईमेल, अॅप्स आणि सुरक्षित वेबसाइटसह, आपल्या डिव्हाइसचे आणि नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"आपण VPN कनेक्शन सेट करण्यासाठी एखाद्या अॅपला परवानगी दिली आहे.\n\nहा अॅप ईमेल, अॅप्स आणि सुरक्षित वेबसाइट यासह, आपल्या डिव्हाइस आणि नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"आपण VPN कनेक्शन सेट करण्यासाठी अ‍ॅपला परवानगी दिली.\n\nहा अ‍ॅप ईमेल, अ‍ॅप्स आणि वेबसाइटसह, आपल्या डिव्हाइस आणि नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"आपले डिव्हाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केलेले आहे.\n\nआपला प्रशासक आपल्या डिव्हाइसशी संबंधित सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू शकतो. अधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण एका VPN शी देखील कनेक्ट केलेले आहे जो आपल्या ईमेल, अॅप्स आणि वेबसाइटसह आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे देखील परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"आपला कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केलेला आहे.\n\nआपला प्रशासक आपल्या ईमेल, अॅप्स आणि सुरक्षित वेबसाइटसह आपल्या नेटवर्क क्रियाकलापांचे परीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण एका VPN शी देखील कनेक्ट केलेले आहे जो आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"आपले डिव्हाइस <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> द्वारे व्यवस्थापित केलेले आहे.\nआपला कार्य प्रोफाईल याद्वारे व्यवस्थापित केलेला आहे: \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nआपला प्रशासक आपल्या ईमेल, अॅप्स आणि सुरक्षित वेबसाइटसह आपल्या नेटवर्क क्रियाकलापांचे परीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण एका VPN शी देखील कनेक्ट केलेले आहे जो आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे देखील परीक्षण करू शकतो."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे.\n\nआपला प्रशासक ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण एका VPN शी देखील कनेक्ट केले आहे, जो आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जो ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जो ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे. ते <xliff:g id="APPLICATION">%2$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या कार्य नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्‍या प्रशासकाशी संपर्क साधा."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे. ते <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> शी कनेक्ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या कार्य नेटवर्क क्रियाकलापाचे परीक्षण करू शकते.\n\nआपण <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> शी देखील कनेक्‍ट केले आहे, जे आपल्‍या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"आपले डिव्हाइस <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे.\n\nआपला प्रशासक आपल्या डिव्हाइसशी संबद्ध सेटिंग्ज, कॉर्पोरेट प्रवेश, अ‍ॅप्स, डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू शकतो आणि व्‍यवस्थापित करू शकतो.\n\nआपण <xliff:g id="APPLICATION">%2$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"आपण व्यक्तिचलितपणे अनलॉक करेपर्यंत डिव्हाइस लॉक केलेले राहील"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"सूचना अधिक जलद मिळवा"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"आपण अनलॉक करण्‍यापूर्वी त्यांना पहा"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"सर्व पहा"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"सर्व लपवा"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"आता समाप्त करा"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"स्क्रीन पिन केलेली आहे"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"हे आपण अनपिन करेपर्यंत दृश्यामध्ये ते ठेवते. अनपिन करण्यासाठी एकाच वेळी परत आणि अलीकडील ला स्पर्श करा आणि धरून ठेवा आणि विहंगावलोकन करा."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"हे आपण अनपिन करेपर्यंत दृश्यामध्ये ते ठेवते. अनपिन करण्यासाठी स्पर्श करा आणि धरून ठेवा."</string>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index e1b56c8..2a84991 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Cari"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Buka kunci"</string>
     <string name="unlock_label" msgid="8779712358041029439">"buka kunci"</string>
     <string name="phone_label" msgid="2320074140205331708">"buka telefon"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"buka kamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Pilih reka letak tugas baharu"</string>
     <string name="cancel" msgid="6442560571259935130">"Batal"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX dua bar."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX tiga bar."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Isyarat WiMAX penuh."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet diputuskan sambungan."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet disambungkan."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Tiada isyarat."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Tidak disambungkan."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Tiada bar."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ditolak."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Semua aplikasi terbaharu diketepikan."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Memulakan <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Pemberitahuan diketepikan."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bidai pemberitahuan."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tetapan pantas."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Kunci skrin."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Tetapan"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Ikhtisar."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Sahkan"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Tutup"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Pengguna <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi dimatikan."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Mod pesawat dimatikan."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Mod pesawat dihidupkan."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Jangan ganggu dihidupkan, perkara penting sahaja."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Jangan ganggu dihidupkan, tiada gangguan."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Jangan ganggu dihidupkan, senyap sepenuhnya."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Jangan ganggu dihidupkan, penggera sahaja."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Jangan ganggu dimatikan."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Jangan ganggu dimatikan."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Jangan ganggu"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Keutamaan sahaja"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Penggera sahaja"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Tiada gangguan"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Senyap sepenuhnya"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Peranti)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Dimatikan"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Tiada gangguan, walau penggera sekalipun."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Anda tidak akan diganggu oleh bunyi dan getaran kecuali daripada penggera, peringatan, acara dan pemanggil yang anda tentukan."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Anda tidak akan diganggu oleh bunyi dan getaran kecuali daripada penggera, peringatan, acara dan pemanggil yang anda tentukan."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Peribadikan"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Tiada gangguan"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Gangguan keutamaan sahaja"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Penggera sahaja"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Penggera anda yang seterusnya pada <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Penggera anda yang seterusnya pada <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Anda tdk akan mdgr penggera anda pd <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Mesej ini menyekat SEMUA bunyi dan getaran, termasuk daripada penggera, muzik, video dan permainan. Anda masih boleh membuat panggilan telefon."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Pemberitahuan kurang penting di bawah"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Sentuh sekali lagi untuk membuka"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Leret ke atas untuk membuka kunci"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Leret ke kanan untuk telefon"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Leret ke kiri untuk kamera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Tiada gangguan"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Senyap sepenuhnya"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Keutamaan sahaja"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Penggera sahaja"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Semua"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Tiada\ngangguan"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Senyap\nsepenuhnya"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Keutamaan\nsahaja"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Penggera\nsahaja"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengecas (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Lumpuhkan VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti serta maklumat lokasi peranti anda. Untuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web selamat.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Peranti anda diurus oleh:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfil kerja anda diurus oleh:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nPentadbir anda boleh memantau aktiviti peranti dan rangkaian anda, termasuk e-mel, apl dan tapak web selamat.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Anda telah memberikan kebenaran kepada apl untuk menyediakan sambungan VPN.\n\nApl ini boleh memantau aktiviti peranti dan rangkaian anda, termasuk e-mel, apl dan tapak web selamat."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Anda memberikan kebenaran kepada apl untuk menyediakan sambungan VPN.\n\nApl ini boleh memantau aktiviti peranti dan rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti serta maklumat lokasi peranti anda.\n\nAnda disambungkan ke VPN, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web selamat.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda.\n\nAnda turut disambungkan ke VPN, yang boleh memantau aktiviti rangkaian anda."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfil kerja anda diurus oleh:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nPentadbir anda boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web selamat.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda.\n\nAnda turut disambungkan ke VPN, yang boleh memantau aktiviti rangkaian peribadi anda"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda.\n\nAnda turut disambungkan ke VPN, yang boleh memantau aktiviti rangkaian anda."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda, termasuk e-mel, apl dan tapak web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil disambungkan ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian kerja anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil disambungkan ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nAnda turut disambungkan ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti anda serta maklumat lokasi peranti anda.\n\nAnda disambungkan ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Peranti akan kekal terkunci sehingga anda membuka kunci secara manual"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Dapatkan pemberitahuan lebih cepat"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum anda membuka kunci"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Lihat semua"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Sembunyikan semua"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Tamatkan sekarang"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skrin telah disemat"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ini akan memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh dan tahan Kembali dan Gambaran Keseluruhan pada masa yang sama untuk menyahsemat."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ini akan memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh dan tahan Gambaran Keseluruhan untuk menyahsemat."</string>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index 331d5d0..4e77360 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"ရှာဖွေရန်"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ကင်မရာ"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ဖုန်း"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"သော့ဖွင့်ရန်"</string>
     <string name="unlock_label" msgid="8779712358041029439">"သော့ဖွင့်ရန်"</string>
     <string name="phone_label" msgid="2320074140205331708">"ဖုန်းကို ဖွင့်ရန်"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"ကင်မရာ ဖွင့်ရန်"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"အလုပ်သစ်စီစဥ်မှုကို ရွေးပါ။"</string>
     <string name="cancel" msgid="6442560571259935130">"ထားတော့"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"ဝိုင်မက်စ် ၂ ဘားရှိ"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"ဝိုင်မက်စ် ၃ ဘား"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"ဝိုင်မက်စ် အပြည့်ရှိ"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet နှင့်ချိတ်ဆက်မှုပြတ်တောက်"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet ချိတ်ဆက်ထား။"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"အချက်ပြမှု မရှိပါ"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"ချိတ်ဆက်မထားပါ"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"၀ ဘား"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ထုတ်ထားသည်။"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"မကြာသေးမီက အပလီကေးရှင်းများအားလုံး ဖယ်ထုတ်ပြီးပါပြီ။"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>ကို စတင်နေသည်။"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g><xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"အကြောင်းကြားချက်ကိုဖယ်ရှားပြီး"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"အ​ကြောင်းကြားစာအကွက်"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"အမြန်လုပ် အပြင်အဆင်"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"မျက်နှာပြင် သော့ပိတ်ရန်"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ဆက်တင်များ"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ခြုံကြည့်မှု။"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"အတည်ပြုရန်"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"ပိတ်ရန်"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"သုံးစွဲသူ <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>။"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ကြိုးမဲ့ ပိတ်ထား။"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"လေယာဉ် မုဒ်ကို ပိတ်ထားလိုက်ပြီ။"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"လေယာဉ် မုဒ်ကို ဖွင့်ထားလိုက်ပြီ။"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"မနှောင့်ယှက်ပါနှင့် ဖွင့်ထားသည်၊ ဦးစားပေးများသာ။"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"မနှောင့်ယှက်ပါနှင့် ဖွင့်ထားသည်၊ အနှောင့်အယှက်များ မရှိပါ။"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"လုံးဝ တိတ်ဆိတ်နေစဉ်၊ မနှောင့်ယှက်ပါနှင့်။"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"အနှောင့်ယှက်ရ ဖွင့်ထားသည်။ နှိုးစက်များသာ။"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"မနှောင့်ယှက်ပါနှင့် ကိုပိတ်ထားသည်။"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"မနှောင့်ယှက်ပါနှင့် ကိုပိတ်ထားသည်။"</string>
@@ -235,7 +242,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="7309935569360609114">"ကြားဖြတ်ဝင်မှု ခွင့်မပြုရန်"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"ရှာဖွေရန်"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> အတွက် အပေါ်ကို ပွတ်ဆွဲပါ"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> အတွက် ဖယ်ဘက်ကို ပွတ်ဆွဲပါ"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"ကြားဖြတ်ဝင်မှုများ မရှိခဲ့။ နှိုးစက်ပင် မရှိခဲ့။"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"နှိုးစက်များ၊ အသိပေးချက်များ၊ ဖြစ်ရပ်များ၊ နှင့်သင်သတ်မှတ်ထားသည့် ခေါ်ဆိုသူများမှ လွဲ၍ အသံများနှင့် တုန်ခါမှုများသင့်ကို နှောက်ယှက်တော့မည် မဟုတ်ပါ။"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"နှိုးစက်များ၊ အသိပေးချက်များ၊ ဖြစ်ရပ်များ နှင့် သင်သတ်မှတ်ထားသည့် ခေါ်ဆိုသူများမှ လွဲ၍ အသံများနှင့် တုန်ခါမှုများသည် သင့်အား နှောင့်ယှက်မည် မဟုတ်ပါ။"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"စိတ်ကြိုက် ပြုလုပ်ရန်"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"ကြားဖြတ်ဝင်မှု ခွင့်မပြုရန်"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"ဦးစားပေး ကြားဖြတ်ဝင်မှုများ သာလျှင်"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"နှိုးစက်များသာ"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"သင်၏ နောက် နှိုးစက်၏ အချိန်မှာ<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"သင်၏ နောက် နှိုးစက်မှာ <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"သင်သည် သင်၏ <xliff:g id="ALARM_TIME">%s</xliff:g> နှိုးစက်ကို ကြားရမည် မဟုတ်"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"ဤအရာမှ နှိုးစက်၊ ဂီတ၊ ဗွီဒီယိုများနှင့် ဂိမ်းများ အပါအဝင်၊ အသံအားလုံးနှင့် တုန်ခါမှုများအား တားဆီးပေးသည်။ ဖုန်းခေါ်ဆိုမှုများ ပြုလုပ်နိုင်ဆဲဖြစ်မည်။"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"အရေးပါမှု နည်းသည့် အကြောင်းကြားချက်များ အောက်မှာ"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"ဖွင့်ရန် ထပ်ပြီး ထိပါ"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"သော့ဖွင့်ရန် အပေါ်သို့ ပွတ်ဆွဲပါ"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ဖုန်း အတွက် ညာသို့ ပွတ်ဆွဲပါ"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"ကင်မရာ အတွက် ဘယ်သို့ ပွတ်ဆွဲပါ"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"ကြားဖြတ်ဝင်မှု ခွင့်မပြုရန်"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"အားလုံး"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">\n"ကြားဝင်မှု မရှိပါ"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> အပြည့် အထိ) အားသွင်းနေ"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN ကို ပိတ်ထားရန်"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN ကို အဆက်ဖြတ်ရန်"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"သင့်စက်ကိရိယာကို<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nမှစီမံခန့်ခွဲထားပါသည်။သင့်စီမံခန့်ခွဲသူသည် ကြိုတင်ပြင်ဆင်မှုများ၊စုပေါင်းဝင်ရောက်ခွင့်၊အက်ပလီကေးရှင်းများ၊သင့်စက်ကိရိယာနှင့်ဆက်နွယ်နေသောအချက်အလက်နှင့်သင့်စက်ကိရိယာ ရဲ့နေရာအချက်အလက်များကိုကြီးကြပ်စောင့်ကြည့်နိုင်ပါသည်။အသေးစိတ်သိရှိလိုပါကသင်၏စီမံခန့်ခွဲသူကိုဆက်သွယ်ပါ။"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"သင့်အလုပ်ပရိုဖိုင်းကို<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n \nမှစီမံခန့်ခွဲထားပါသည်။သင်၏စီမံခန့်ခွဲသူသည်အီးမေးလ်များ၊အက်ပလီကေးရှင်းများနှင့်၀က်ဘ်ဆိုက်များလုံခြုံမှုအပါအဝင် သင့်ကွန်ယက်လုပ်ဆောင်ချက်ကိုစောင့်ကြည့်နိုင်ပါသည်။\n \nအသေး စိတ်သိရှိလိုပါကသင်၏စီမံခန့်ခွဲသူကိုဆက်သွယ်ပါ။"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"သင့်စက်ကိရိယာကို\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nမှစီမံခန့်ခွဲထားပါသည်။သင့် ပရိုဖိုင်ကို\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g> \n\nမှစီမံခန့်ခွဲပါသည်။ သင်၏စီမံခန့်ခွဲသူသည် အီးမေးလ်များ၊ အက်ပလီကေးရှင်းများ နှင့်  ဝက်ဘ်ဆိုက်များလုံခြုံမှု အပါအဝင် သင့် စက်ကိရိယာ နှင့်အင်တာနက်ကွန်ယက်လုပ်ဆောင်မှုများကို စောင့်ကြပ်နိုင်သည်။\n\nအသေးစိတ်သိလိုပါက သင်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"သင်သည် VPN ချိတ်ဆက်မှုကိုလုပ်ဆောင်ရန်အက်ပလီကေးရှင်းအားခွင့်ပြုပေးခဲ့သည်။\n\n ဒီအက်ပလီကေးရှင်းသည် အီးမေးလ်များ၊အက်ပလီကေးရှင်းများနှင့်ဝက်ဘ်ဆိုဒ်များလုံခြုံမှုအပါအဝင် သင့်စက်ကိရိယာနှင့် ကွန်ယက်ရဲ့လုပ်ဆောင် ချက်ကိုစောင့်ကြည့်နိုင်ပါသည်။"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"သင်သည် အပ်ဖ်အား VPN ချိတ်ဆက်မှုကို တည်ဆောက်ရန် ခွင့်ပြုခဲ့သည်။ \n\n ဤအပ်ဖ်သည် အီးမေးလ်များ၊ အပ်ဖ်များနှင့် ဝက်ဘ်ဆိုက်များအပါအဝင် သင့်စက်ပစ္စည်းနှင့် ကွန်ရပ်လှုပ်ရှားမှုကို စောင့်ကြည့်နိုင်သည်။"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"သင့်စက်ကိရိယာကို<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n \n မှစီမံခန့်ခွဲထားပါသည်။သင့်စီမံခန့်ခွဲသူသည် ကြိုတင်ပြင်ဆင်မှုများ၊စုပေါင်းဝင်ရောက်ခွင့်၊အက်ပလီကေးရှင်းများ၊သင့်စက်ကိရိယာနှင့်ဆက်နွယ်နေသောအချက်အလက်နှင့်သင့်စက်ကိရိယာ ရဲ့နေရာအချက်အလက်များကိုကြီးကြပ်စောင့်ကြည့်နိုင်ပါသည်။ \n\n အီးမေးလ်များ၊အက်ပလီကေးရှင်းများနှင့် ဝက်ဘ်ဆိုက်များအပါအဝင်သင့်ကွန်ယက်လုပ်ဆောင်ချက်ကိုစောင့်ကြည့်နိုင်သည့် VPN ကိုချိတ်ဆက်ထားပြီဖြစ် သည်။\n\n အသေးစိတ်သိရှိလိုပါကသင်၏စီမံခန့်ခွဲသူကိုဆက်သွယ်ပါ။"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"သင့်အလုပ်ပရိုဖိုင်းကို<xliff:g id="ORGANIZATION">%1$s</xliff:g> \n \n မှစီမံခန့်ခွဲထားပါသည်။သင်၏စီမံခန့်ခွဲသူသည်အီးမေးလ်များ၊အက်ပလီကေးရှင်းများ နှင့်ဝက်ဘ်ဆိုဒ်များလုံခြုံမှုအပါအဝင်သင့်ကွန်ယက်လုပ်ဆောင်ချက်ကိုစောင့်ကြည့်နိုင်ပါသည်။\n\n အသေး စိတ်သိရှိလိုပါကသင့်ရဲ့စီမံခန့်ခွဲသူကိုဆက်သွယ်ပါ။\n\n သင်သည်သင့်ကွန်ယက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် VPN ကိုချိတ်ဆက်ထားပြီဖြစ်သည်။"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"သင့်စက်ကိရိယာကို<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\n မှစီမံခန့်ခွဲထားပါသည်။သင့်အလုပ်ပရိုဖိုင်းကို\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nမှစီမံခန့်ခွဲထားပါ သည်။သင့်၏စီမံခန့်ခွဲသူသည်အီးမေးလ်များ၊အက်ပလီကေးရှင်းများ နှင့်ဝက်ဘ်ဆိုဒ်လုံခြုံမှုအပါအဝင် သင့်ကွန်ယက် လုပ်ဆောင်ချက်ကိုစောင့်ကြည့်နိုင်ပါသည်။\n\n အသေးစိတ်သိရှိလိုပါကသင့်ရဲ့စီမံခန့်ခွဲသူကိုဆက်သွယ်ပါ။\n\nသင်သည်သင်၏ပုဂ္ဂိုလ်ရေးဆိုင်ရာကွန်ယက်လုပ်ဆောင်ချက်ကိုစောင့်ကြည့်နိုင်သည့် VPN ကိုချိတ်ဆက်ထားပြီဖြစ်သည်။"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"သင့်အလုပ်ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g>မှ စီမံခန့်ခွဲပါသည်။ \n\nသင့်စီမံခန့်ခွဲသူသည် အီးမေးလ်များ၊ အပ်ဖ်များ၊ နှင့် ဝက်ဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လှုပ်ရှားမှုကို စောင့်ကြည့်နိုင်သည်။ \n\nပိုမိုသော သတင်းအချက်အလက်အတွက်၊ သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။ \n\nသင်သည် VPN သို့လည်းဆက်သွယ်ထားပြီး၊ ၎င်းသည် သင့်ကွန်ရက်လှုပ်ရှားမှုကို စောင့်ကြည့်နိုင်ပါသည်။"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"သင်သည် <xliff:g id="APPLICATION">%1$s</xliff:g> သို့ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးလ်များ၊ အပ်ဖ်များနှင့် ဝက်ဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက် လှုပ်ရှားမှုများကို စောင့်ကြည့်နိုင်သည်။"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"သင်သည် <xliff:g id="APPLICATION">%1$s</xliff:g> သို့ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးလ်များ၊ အပ်ဖ်များနှင့် ဝက်ဘ်ဆိုက်များအပါအဝင် သင့်ကိုယ်ရေးကိုယ်တာကွန်ရပ် လှုပ်ရှားမှုကို စောင့်ကြည့်နိုင်သည်။"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"သင့်အလုပ်ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g>မှ စီမံခန့်ခွဲပါသည်။ ၎င်းသည်<xliff:g id="APPLICATION">%2$s</xliff:g>သို့ချိတ်ဆက်ထားပြီး၊ အီးမေးလ်များ၊ အပ်ဖ်များနှင့် ဝက်ဘ်ဆိုက်များအပါအဝင် သင့်အလုပ်ကွန်ရက်ကို စောင့်ကြည့်နိုင်သည်။ \n\nပိုမိုသောသတင်းအချက်အလက်အတွက်၊ သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"သင့်အလုပ် ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g> မှစီမံခန့်ခွဲပါသည်။ ၎င်းသည် <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> သို့ချိတ်ဆက်ထားပြီး၊ အီးမေးလ်များ၊ အပ်ဖ်များနှင့် ဝက်ဘ်ဆိုက်များအပါအဝင် သင့်အလုပ်ကွန်ရက်လှုပ်ရှားမှုကို စောင့်ကြည့်နိုင်သည်။ \n\n သင်သည် <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> သို့လည်းချိတ်ဆက်ထားပြီး၊ ၎င်းသည် သင့်ကိုယ်ရေးကိုယ်တာကွန်ရက်လုပ်ရှားမှုကို စောင့်ကြည့်နိုင်သည်။"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"သင့်စက်ကိရိယာကို <xliff:g id="ORGANIZATION">%1$s</xliff:g> မှစီမံခန့်ခွဲပါသည်။ \n\n သင်စီမံခန့်ခွဲသူသည် ကြိုတင်ပြင်ဆင်မှုများ၊ စုပေါင်းဝင်ရောက်ခွင့်၊ အပ်ဖ်များ၊ သင့်ကိရိယာနှင့် သက်ဆိုင်သော ဒေတာ၊ နှင့် သင့်ကိရိယာ၏ တည်နေရာအချိက်အလက်များကို စောင့်ကြည့်ပြီး စီမံခန့်ခွဲနိုင်သည်။ \n\nသင်သည် <xliff:g id="APPLICATION">%2$s</xliff:g> သို့ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးလ်းများ၊ အပ်ဖ်များ၊ နှင့် ဝက်ဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လှုပ်ရှားမှုကို စောင့်ကြည့်နိုင်သည်။ \n\nပိုမိုသော သတင်းအချက်အလက်အတွက်၊ သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"သင်က လက်ဖြင့် သော့မဖွင့်မချင်း ကိရိယာမှာ သော့ပိတ်လျက် ရှိနေမည်"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"အကြောင်းကြားချက်များ မြန်မြန်ရရန်"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"မဖွင့်ခင် ၎င်းတို့ကို ကြည့်ပါ"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"အားလုံးကို ကြည့်ရန်"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"အားလုံး ဝှက်ထားရန်"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>။ <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"ယခု အဆုံးသတ်ရန်"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"မျက်နှာပြင် ပင်ထိုးပြီးပါပြီ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"သင်ပင်ဖြုတ်သည့် တိုင်အောင် ၎င်းအား မြင်ကွင်းတွင် ထားရှိပါမည်။ ပင်ဖြုတ်ရန် အနောက်နှင့် ခြုံငုံကြည့်ခြင်းကို ဖိ၍ နှိပ်ထားနိုင်သည်။"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"သင်ပင်ဖြုတ်သည့် တိုင်အောင် ၎င်းအား မြင်ကွင်းတွင် ထားရှိပါမည်။ ပင်ဖြုတ်ရန် ခြုံငုံကြည့်ခြင်းကို ဖိ၍ နှိပ်ထားနိုင်သည်။"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index b8fd029..675fc39 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Søk"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefonnummer"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Lås opp"</string>
     <string name="unlock_label" msgid="8779712358041029439">"lås opp"</string>
     <string name="phone_label" msgid="2320074140205331708">"åpne telefonen"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"åpne kamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Velg en ny utforming for oppgaver"</string>
     <string name="cancel" msgid="6442560571259935130">"Avbryt"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX – to stolper."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX – tre stolper."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Fullt WiMAX-signal."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet er frakoblet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet er tilkoblet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ikke noe signal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Ikke tilkoblet."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Ingen stolper."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> avvist."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle nylig brukte apper er avvist."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starter <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Varselet ble skjult."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Varselskygge."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hurtiginnstillinger."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Låseskjerm."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Innstillinger"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Oversikt."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Bekreft"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Lukk"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Bruker: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi er slått av."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flymodus er slått av."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flymodus er slått på."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"«Ikke forstyrr» er på – bare prioritert."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"«Ikke forstyrr» er på – ingen avbrytelser."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Ikke forstyrr er slått på, full stillhet."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Ikke forstyrr er på – bare alarmer."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"«Ikke forstyrr» er av."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"«Ikke forstyrr» er slått av."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"«Ikke forstyrr»"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Bare prioritet"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Bare alarmer"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ingen forstyrrelser"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Total stillhet"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth er slått av"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Søk"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Dra opp for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Dra til venstre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Ingen forstyrrelser, ikke engang alarmer."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Du blir ikke forstyrret av lyder og vibrasjoner, bortsett fra alarmer, påminnelser, aktiviteter og oppringere du angir."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Du blir ikke forstyrret av lyder og vibrasjoner, bortsett fra alarmer, påminnelser, aktiviteter og oppringere du angir."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tilpass"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Ingen forstyrrelser"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Bare prioriterte forstyrrelser"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Bare alarmer"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Den neste alarmen din er stilt inn kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Den neste alarmen din er stilt inn <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Du kommer ikke til å høre alarmen kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Dette blokkerer ALLE lyder og vibrasjoner, inkludert fra alarmer, musikk, videoer og spill. Du kan fremdeles ringe."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre presserende varsler nedenfor"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Trykk på nytt for å åpne"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Sveip oppover for å låse opp"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Sveip mot høyre for å åpne telefonen"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Sveip mot venstre for å åpne kameraet"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Ingen forstyrrelser"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Total stillhet"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Bare prioritet"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Bare alarmer"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Ingen\nforstyrrelser"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nstillhet"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Bare\nPrioritet"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Bare\nalarmer"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Lader (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Deaktiver VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Koble fra VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Enheten din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data tilknyttet enheten din og enhetens posisjonsinformasjon. Hvis du vil har mer informasjon, kan du ta kontakt med administratoren."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Arbeidsprofilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke nettverksaktiviteten din, inkludert e-post, apper og sikre nettsteder.\n\nHvis du vil ha mer informasjon, kan du ta kontakt med administratoren."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Enheten din administreres av:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nArbeidsprofilen din administreres av:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratoren din kan overvåke enheten og nettverksaktiviteten din, inkludert e-post, apper og sikre nettsteder.\n\nHvis du vil ha mer informasjon, kan du ta kontakt med administratoren."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Du ga en app tillatelse til å konfigurere en VPN-tilkobling.\n\nDenne appen kan overvåke enheten og nettverksaktiviteten din, inkludert e-post, apper og sikre nettsteder."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Du ga en app tillatelse til å konfigurere en VPN-tilkobling.\n\nDenne appen kan overvåke enheten og nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Enheten din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nAdministratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data tilknyttet enheten din og enhetens posisjonsinformasjon.\n\nDu er koblet til et VPN, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nHvis du vil ha mer informasjon, kan du ta kontakt med administratoren."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Arbeidsprofilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nAdministratoren din kan overvåke nettverksaktiviteten din, inkludert e-post, apper og sikre nettsteder.\n\nHvis du vil ha mer informasjon, kan du ta kontakt med administratoren.\n\nDu er også koblet til et VPN, som kan overvåke nettverksaktiviteten din."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Enheten din administreres av <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nArbeidsprofilen din administreres av:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratoren din kan overvåke nettverksaktiviteten din, inkludert e-post, apper og sikre nettsteder.\n\nHvis du vil ha mer informasjon, kan du ta kontakt med administratoren.\n\nDu er også koblet til et VPN, som kan overvåke den personlige nettverksaktiviteten"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nFor mer informasjon, ta kontakt med administratoren.\n\nDu er også koblet til et VPN, som kan overvåke nettverksaktiviteten din."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nFor mer informasjon, ta kontakt med administratoren."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nDu er også koblet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Enheten din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data tilknyttet enheten din og enhetens posisjonsinformasjon.\n\nDu er koblet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nFor mer informasjon, ta kontakt med administratoren."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheten forblir låst til du låser den opp manuelt"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Motta varsler raskere"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem før du låser opp"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Se alle"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skjul alle"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Avslutt nå"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skjermen er låst"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"På denne måten blir skjermen synlig frem til du låser den opp. Trykk på og hold inne Tilbake og Oversikt samtidig for å låse opp."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"På denne måten blir skjermen synlig frem til du låser den opp. Trykk på og hold inne Tilbake og Oversikt for å låse opp."</string>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
index 97d6ba2..6860d78 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"खोज्नुहोस्"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"क्यामेरा"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"फोन"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"खोल्नुहोस्"</string>
     <string name="unlock_label" msgid="8779712358041029439">"खोल्नुहोस्"</string>
     <string name="phone_label" msgid="2320074140205331708">"फोन खोल्नुहोस्"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"क्यामेरा खोल्नुहोस्"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"नयाँ कार्य लेआउट चयन गर्नुहोस्"</string>
     <string name="cancel" msgid="6442560571259935130">"रद्द गर्नुहोस्"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"वाइम्याक्स दुईवटा बारहरू।"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"वाइम्याक्स तिनवटा बारहरू।"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"वाइम्याक्स सङ्केत भरिएका।"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"इथरनेट विच्छेद भयो।"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"इथरनेट जोडियो।"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"सङ्केत छैन।"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"जडान नगरिएको।"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"शून्य पट्टि।"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खारेज गरिएको छ।"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"सबै हालका अनुप्रयोगहरू खारेज गरियो।"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>सुरु गर्दै।"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना खारेज।"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना कक्ष।"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"द्रुत सेटिङहरू"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"स्क्रीन बन्द गर्नुहोस्।"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"सेटिङहरू"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"सारांश।"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"पुष्टि गर्नुहोस्"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"बन्द गर्नुहोस्"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"प्रयोगकर्ता <xliff:g id="USER">%s</xliff:g>।"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"वाइफाइ बन्द गरियो।"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"हवाइजहाज मोड बन्द छ।"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"हवाइजहाज मोड खोलियो।"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"प्राथमिकतालाई मात्र बाधा नपुर्‍याउनुहोस्।"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"बाधा नपुर्याउँनुहोस्, कुनै पनि अवरोध छैनन्।"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"बाधा नपुर्‍यानुहोस्, पुरै शान्त"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"बाधा नगर्नुहोस्, अलार्महरू मात्र।"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"निष्क्रियलाई बाधा नपुर्‍याउनुहोस्"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"निष्क्रिय गरिएकालाई अवरोध नपुर्‍याउनुहोस्।"</string>
@@ -235,7 +242,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="7309935569360609114">"कुनै अवरोधहरू छैन"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"खोज्नुहोस्"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि माथि धिसार्नुहोस्"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि बायाँ।"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"कुनै रुकावट छैन। चेतावनी समेत छैन।"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"अलार्म, रिमाइन्डर, घटना, र तपाईँले निर्दिष्ट गर्नुहुने कलरहरू बाहेक, आवाज र कंपनले तपाईँ वाधा गर्ने छैन।"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"अलार्म, रिमाइन्डर, घटना, र तपाईँले निर्दिष्ट गर्नुहुने कलरहरू देखि बाहेक, आवाज र कम्पनले तपाईँ लाई वाधा गर्ने छैन।"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"अनुकूलन गर्नुहोस्"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"कुनै रुकावटहरू छैन"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"प्राथमिकता रुकावटहरूमा मात्र"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"अलार्महरू मात्र"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"तपाईंको अर्को सचेतक <xliff:g id="ALARM_TIME">%s</xliff:g> मा छ"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"तपाईंको अर्को सचेतक <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> हो"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> मा तपाईंले आफ्नो सचेतक सुन्नुहुने छैन"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"यसले अलार्म, संगीत, भिडियो, र खेलहरू लगायतका सबै ध्वनि र कम्पन निषेध गर्छ। तपाईँ अझै पनि फोन कल गर्न सक्षम हुनुहुन्छ।"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"तल कम जरुरी सूचनाहरू"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"खोल्न फेरि छुनुहोस्"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"अनलक गर्न स्वाप गर्नुहोस्"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"फोनका लागि दाँया स्वाइप"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"क्यामेराका लागि बाँया स्वाइप"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"कुनै अवरोधहरू छैनन्"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"सबै"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">\n" अवरोधहरू छैनन्"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हुँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण भएसम्म)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN असक्षम गर्नुहोस्"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"विच्छेद VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"तपाईँको यन्त्र <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासकले सेटिङहरू, कर्पोरेट पहुँच, अनुप्रयोगहरू, आफ्नो उपकरण सम्बन्धित डेटा, र उपकरणको स्थानीय जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्छ। थप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासक इमेल, अनुप्रयोगहरू, र सुरक्षित वेबसाइटहरू सहित आफ्नो सञ्जाल गतिविधि अनुगमन गर्न सक्षम छ।\n\n थप जानकारीको लागि, आफ्नो प्रशासकससँग सम्पर्क राख्नुहोस्।"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"तपाईँको यन्त्र \n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n तपाईँको कार्य प्रोफाइल \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासकले इमेल, अनुप्रयोगहरू, र सुरक्षित वेबसाइटहरू सहित आफ्नो उपकरण र सञ्जाल गतिविधि अनुगमन गर्न सक्छ।\n\n थप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"तपाईँले VPN जडान गर्न अनुप्रयोगलाई अनुमति दिनुभयो।\n\nयो अनुप्रयोगले तपाईको यन्त्र र नेटवर्क गतिविधि,  इमेलहरु सम्मिलित, अनुप्रयोगहरू र सुरक्षित वेबसाइटहरूका अनुगमन गर्नसक्छ।"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"तपाईँले VPN जडान गर्न अनुप्रयोगलाई अनुमति दिनुभयो।\n\nयो अनुप्रयोगले तपाईँको यन्त्र र तपाईँका इमेल, अनुप्रयोगहरू र वेबसाइटहरू लगायतका नेटवर्क गतिविधि अनुगमन गर्न सक्छ  ।"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"तपाईँको यन्त्र <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासकले सेटिङ्हरू, कर्पोरेट पहुँच, अनुप्रयोगहरू, आफ्नो उपकरण सम्बन्धित डेटा, र उपकरणको स्थानीय जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्छ।\n\nतपाईँ VPN सँग जडित हुनुहुन्छ, जसले तपाईँको इमेल, अनुप्रयोगहरू, र वेबसाइटहरू सहित आफ्नो सञ्जाल गतिविधि अनुगमन गर्न सक्छ। \n\nथप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासकले इमेल, अनुप्रयोगहरू, र सुरक्षित वेबसाइटहरू सहित आफ्नो सञ्जाल गतिविधि अनुगमन गर्न सक्षम छ।\n\n थप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।\n\n तपाईँ VPN सँग पनि जडित हुनुहुन्छ, जसले आफ्नो सञ्जाल गतिविधि अनुगमन गर्न सक्छ।"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"तपाईँको यन्त्र <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\nतपाईँको कार्य प्रोफाइल \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ।\n\n तपाईँको प्रशासक इमेल, अनुप्रयोगहरू, र सुरक्षित वेबसाइटहरू सहित आफ्नो सञ्जाल गतिविधि अनुगमन गर्न सक्षम छ।\n\n थप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।\n\n तपाईँ VPN सँग पनि जडित हुनुहुन्छ, जसले आफ्नो व्यक्तिगत सञ्जाल गतिविधि अनुगमन गर्न सक्छ।"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g>द्वारा व्यवस्थापन गरिन्छ।.\n\nतपाईँको प्रशासक इमेल, अनुप्रयोगहरू, र सुरक्षित वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्षम छ।\n\nथप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।\n\nतपाईँ VPN सँग पनि जडित हुनुहुन्छ, जसले तपाईँको नेटवर्क गतिविधि अनुगमन गर्न सक्छ।"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"तपाईँ <xliff:g id="APPLICATION">%1$s</xliff:g>सँग जडान हुनुभएको छ जसले इ-मेल, अनुप्रयोगहरू र वेबसाइट लगायतका तपाईँका नेटवर्क गतिविधिको अनुगमन गर्न सक्छ।"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"तपाईँ<xliff:g id="APPLICATION">%1$s</xliff:g>सँग जडान हुनुभएको छ जसले इ-मेल, अनुप्रयोगहरू र वेबसाइट लगायतका तपाईँका व्यक्तिगत नेटवर्क गतिविधिको अनुगमन गर्न सक्छ।"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्तापन गरिन्छ। यो <xliff:g id="APPLICATION">%2$s</xliff:g> सँग जोडिएको छ जसले इमेल, अनुप्रयोगहरू, र वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्छ।\n\nथप जानकारीको लागि, आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ। यो <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> सँग जोडिएको छ जसले इमेल, अनुप्रयोगहरू, र वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्छ।\n\nतपाईँ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> सँग पनि जडित हुनुहुन्छ, जसले तपाईँको व्यक्तिगत नेटवर्क गतिविधि अनुगमन गर्न सक्छ।"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"तपाईंको उपकरण <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थित गरिन्छ।\n\nतपाईंको प्रशासकले तपाईँको यन्त्र र त्यसको स्थान जानकारीमार्फत सेटिङहरू,  कर्पोरेट पहुँच, अनुप्रयोगहरू, तपाईँको यन्त्रसँग सम्बद्ध डेटा  र तपाईँको यन्त्रको स्थान जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।\n\nतपाईं <xliff:g id="APPLICATION">%2$s</xliff:g> सँग जडित हुनुहुन्छ जसले इमेल, अनुप्रयोगहरू, र वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधिका अनुगमन गर्न सक्छ।\n\nथप जानकारीको लागि तपाईको प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"तपाईँले नखोले सम्म उपकरण बन्द रहनेछ"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"छिटो सूचनाहरू प्राप्त गर्नुहोस्"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"तपाईँले अनलक गर्नअघि तिनीहरूलाई हेर्नुहोस्"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"सबै हेर्नुहोस्"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"सबै लुकाउनुहोस्"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"अहिल्यै अन्त्य गर्नुहोस्"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"पर्दा राखेका छ"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"तपाईं अनपिन सम्म यो दृश्य मा राख्छ। छुनुहोस् र अनपिन फिर्ता र सिंहावलोकन नै समय मा पकड।"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"तपाईं अनपिन सम्म यो दृश्य मा राख्छ। छुनुहोस् र अनपिन गर्न सिंहावलोकन पकड।"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 846e9eb..937ac34 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Zoeken"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefoon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Ontgrendelen"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ontgrendelen"</string>
     <string name="phone_label" msgid="2320074140205331708">"telefoon openen"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"camera openen"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Nieuwe taakindeling selecteren"</string>
     <string name="cancel" msgid="6442560571259935130">"Annuleren"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX: twee streepjes."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX: drie streepjes."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-signaal  is op volle sterkte."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet-verbinding verbroken."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet verbonden."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Geen signaal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Niet verbonden."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Geen streepjes."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> verwijderd."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle recente apps gesloten."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> starten."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Melding verwijderd."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Meldingenpaneel."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Snelle instellingen."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Vergrendelingsscherm."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Instellingen"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overzicht."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Bevestigen"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Sluiten"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Gebruiker: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi uitgeschakeld."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Vliegtuigmodus uitgeschakeld."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegtuigmodus ingeschakeld."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Niet storen aan, alleen prioriteit."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Niet storen aan, geen onderbrekingen."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Niet storen aan, totale stilte."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Niet storen aan, alleen alarmen."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Niet storen uit."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Niet storen uitgeschakeld."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Niet storen"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Alleen prioriteit"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alleen alarmen"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Geen onderbrekingen"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Totale stilte"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> apparaten)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth uit"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Zoeken"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Veeg omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Veeg naar links voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Geen onderbrekingen. Zelfs geen alarm."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"U wordt niet gestoord door geluiden en trillingen, behalve voor alarmen, herinneringen, afspraken en bellers die u specificeert."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"U wordt niet gestoord door geluiden en trillingen, behalve voor alarmen, herinneringen, afspraken en bellers die u specificeert."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Aanpassen"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Geen onderbrekingen"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Alleen prioriteitsonderbrekingen"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Alleen alarmen"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Uw volgende alarm is om <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Uw volgende alarm is <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"U hoort uw alarm niet om <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Hiermee worden ALLE geluiden en trillingen geblokkeerd, waaronder die voor alarmen, muziek, video\'s en games. U kunt wel nog steeds bellen."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Minder urgente meldingen onderaan"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Raak opnieuw aan om te openen"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Veeg omhoog om te ontgrendelen"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Veeg naar rechts voor telefoon"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Veeg naar links voor camera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Geen onderbrekingen"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Totale stilte"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Alleen prioriteit"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Alleen alarmen"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Geen\nonderbrekingen"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Totale\nstilte"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Alleen\nprioriteit"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alleen\nalarmen"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Opladen (vol over <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN uitschakelen"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Verbinding met VPN verbreken"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Uw apparaat wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUw beheerder kan instellingen, bedrijfstoegang, apps, gegevens voor uw apparaat en locatiegegevens voor uw apparaat controleren en beheren. Neem voor meer informatie contact op met uw beheerder."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Uw werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUw beheerder kan uw netwerkactiviteit controleren, inclusief e-mails, apps en veilige websites.\n\nNeem voor meer informatie contact op met uw beheerder."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Uw apparaat wordt beheerd door:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nUw werkprofiel wordt beheerd door:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nUw beheerder kan uw apparaat en netwerkactiviteit controleren, inclusief e-mails, apps en veilige websites.\n\nNeem voor meer informatie contact op met uw beheerder."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"U heeft een app toestemming gegeven een VPN-verbinding in te stellen.\n\nDeze app kan uw apparaat- en netwerkactiviteit bijhouden, waaronder e-mails, apps en beveiligde websites."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"U heeft een app toestemming gegeven voor het instellen van een VPN-verbinding.\n\nMet deze app kan uw apparaat- en netwerkactiviteit worden gecontroleerd, inclusief e-mails, apps en websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Uw apparaat wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUw beheerder kan instellingen, bedrijfstoegang, apps, gegevens voor uw apparaat en locatiegegevens voor uw apparaat controleren en beheren.\n\nU bent verbonden met een VPN, die uw netwerkactiviteit kan controleren, waaronder e-mails, apps en websites.\n\nNeem voor meer informatie contact op met uw beheerder."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Uw werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUw beheerder kan uw netwerkactiviteit controleren, inclusief e-mails, apps en veilige websites.\n\nNeem voor meer informatie contact op met uw beheerder.\n\nDaarnaast bent u verbonden met een VPN, die uw netwerkactiviteit kan controleren."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Uw apparaat wordt beheerd door <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nUw werkprofiel wordt beheerd door:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nUw beheerder kan uw netwerkactiviteit controleren, inclusief e-mails, apps en veilige websites.\n\nNeem voor meer informatie contact op met uw beheerder.\n\nDaarnaast bent u verbonden met een VPN, die uw persoonlijke netwerkactiviteit kan controleren."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Uw werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUw beheerder kan uw netwerkactiviteit controleren, inclusief e-mails, apps en websites.\n\nNeem contact op met uw beheerder voor meer informatie.\n\nU bent ook verbonden met een VPN waarmee uw netwerkactiviteit kan worden gecontroleerd."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"U bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g> waarmee uw netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"U bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g> waarmee uw persoonlijke netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Uw werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION">%2$s</xliff:g> waarmee uw werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nNeem contact op met uw beheerder voor meer informatie."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Uw werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> waarmee uw werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nU bent ook verbonden met <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> waarmee uw persoonlijke netwerkactiviteit kan worden gecontroleerd."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Uw apparaat wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUw beheerder kan instellingen, zakelijke toegang, apps, gekoppelde apparaatgegevens en locatiegegevens voor uw apparaat controleren en beheren.\n\nU bent verbonden met <xliff:g id="APPLICATION">%2$s</xliff:g> waarmee uw netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nNeem contact op met uw beheerder voor meer informatie."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Het apparaat blijft vergrendeld totdat u het handmatig ontgrendelt"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Sneller meldingen ontvangen"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Weergeven voordat u ontgrendelt"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Alles weergeven"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Alles verbergen"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Nu uitschakelen"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Scherm is vastgezet"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Het scherm blijft zichtbaar totdat u het u losmaakt. Houd \'Terug\' en \'Overzicht\' tegelijkertijd aangeraakt om het los te maken."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Het scherm blijft zichtbaar totdat u het u losmaakt. Houd \'Overzicht\' aangeraakt om het los te maken."</string>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml
index fee2593..723a4d4 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa-rIN/strings.xml
@@ -362,20 +362,13 @@
     <string name="monitoring_title" msgid="169206259253048106">"ਨੈਟਵਰਕ ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
     <string name="disable_vpn" msgid="4435534311510272506">"VPN ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
-    <!-- no translation found for monitoring_description_device_owned (5780988291898461883) -->
-    <skip />
-    <!-- no translation found for monitoring_description_profile_owned (8110044290898637925) -->
-    <skip />
-    <!-- no translation found for monitoring_description_device_and_profile_owned (1664428184778531249) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn (912328761766161919) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn_device_owned (3090670777499161246) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn_profile_owned (2224494839524715272) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn_device_and_profile_owned (2198546817407897093) -->
-    <skip />
+    <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ਤੁਹਾਡੀ ਡਿਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"ਤੁਹਾਡੀ ਕੰਮ ਪ੍ਰੋਫਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g>ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣਾ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਇਸ ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nਤੁਹਾਡੀ ਕੰਮਪ੍ਰੋਫਾਈਲ ਇਸ ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਅਤੇ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_description_vpn" msgid="912328761766161919">"ਤੁਸੀਂ ਇੱਕ ਐਪ ਨੂੰ ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈਟ ਅਪ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਹੈ।\n\nਇਹ ਐਪ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਅਤੇ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।"</string>
+    <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ਤੁਹਾਡੀ ਡਿਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g>ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਕੀਤਾ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"ਤੁਹਾਡੀ ਕੰਮ ਪ੍ਰੋਫਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g>ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣਾ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਕੀਤਾ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"ਤੁਹਾਡੀ ਡਿਵਾਈਸ <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\nਤੁਹਾਡੀ ਕੰਮ ਪ੍ਰੋਫਾਈਲ ਇਸ ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਹੈ ਜਿਸ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ। \n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਕੀਤਾ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ਡਿਵਾਈਸ ਲੌਕ ਰਹੇਗੀ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮੈਨੂਅਲੀ ਅਨਲੌਕ ਨਹੀਂ ਕਰਦੇ"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"ਤੇਜ਼ੀ ਨਾਲ ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ਅਨਲੌਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਦੇਖੋ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 5b4c0cd..1acd7b7 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Szukaj"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Aparat"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Odblokuj"</string>
     <string name="unlock_label" msgid="8779712358041029439">"odblokuj"</string>
     <string name="phone_label" msgid="2320074140205331708">"otwórz telefon"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"otwórz aparat"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Wybierz nowy układ zadań"</string>
     <string name="cancel" msgid="6442560571259935130">"Anuluj"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX: dwa paski"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX: trzy paski"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX: pełna moc sygnału"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Rozłączono z siecią Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Połączono z siecią Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Brak sygnału."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Nie połączono."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero pasków."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>: zamknięto."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Wszystkie ostatnie aplikacje zostały zamknięte."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Uruchamiam <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Zamknięto powiadomienie."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Obszar powiadomień."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Szybkie ustawienia."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ekran blokady."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Ustawienia"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Przegląd."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Potwierdź"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Zamknij"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Użytkownik: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi wyłączone."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Tryb samolotowy został wyłączony."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Tryb samolotowy został włączony."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Nie przeszkadzać (włączone, tylko priorytetowe)."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Nie przeszkadzać (włączone, bez przeszkadzania)."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Nie przeszkadzać (włączone, całkowita cisza)."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Nie przeszkadzać (włączone, tylko alarmy)."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Nie przeszkadzać (wyłączone)."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Nieprzeszkadzanie wyłączone."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nie przeszkadzać"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Tylko priorytetowe"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Tylko alarmy"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Bez przeszkadzania"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Całkowita cisza"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (urządzenia: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth wył."</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Szukaj"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Przesuń w górę: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Przesuń w lewo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Żadnych powiadomień. Nawet alarmów."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Urządzenie nie będzie odtwarzać dźwięków ani włączać wibracji, z wyjątkiem wybranych przez Ciebie alarmów, przypomnień, wydarzeń i kontaktów."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Urządzenie nie będzie odtwarzać dźwięków ani włączać wibracji, z wyjątkiem wybranych przez Ciebie alarmów, przypomnień, wydarzeń i kontaktów."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Dostosuj"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Bez przerw"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Tylko dźwięki priorytetowe"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Tylko alarmy"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Następny alarm o <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Następny alarm: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Nie usłyszysz alarmu o <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Zablokuje WSZYSTKIE dźwięki i wibracje, także alarmy, muzykę, filmy i gry. Nadal będzie można wykonywać połączenia."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Poniżej widać mniej pilne powiadomienia"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Kliknij ponownie, by otworzyć"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Przesuń w górę, by odblokować"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Przesuń w prawo, by przełączyć się na telefon"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Przesuń w lewo, by włączyć aparat"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Bez przeszkadzania"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Całkowita cisza"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Tylko priorytetowe"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Tylko alarmy"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Wszystkie"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">\n"0/}przeszkadzać"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Całkowita\ncisza"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tylko\npriorytetowe"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tylko\nalarmy"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ładuje się (pełne naładowanie za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Wyłącz VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Rozłącz z VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Urządzeniem zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane powiązane z tym urządzeniem i informacje o lokalizacji urządzenia oraz nimi zarządzać. Skontaktuj się z nim, by dowiedzieć się więcej."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i bezpieczne strony internetowe.\n\nSkontaktuj się z nim, by dowiedzieć się więcej."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Urządzeniem zarządza:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nTwoim profilem do pracy zarządza:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministrator może monitorować Twoje urządzenie i aktywność w sieci, w tym e-maile, aplikacje i bezpieczne strony internetowe.\n\nSkontaktuj się z nim, by dowiedzieć się więcej."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Nadałeś aplikacji uprawnienie do konfigurowania połączenia VPN.\n\nMoże ona monitorować Twoją aktywność na urządzeniu i w sieci, w tym e-maile, aplikacje i bezpieczne strony internetowe."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Aplikacja otrzymała od Ciebie uprawnienia do konfigurowania połączenia VPN.\n\nMoże ona monitorować Twoją aktywność na urządzeniu i w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Urządzeniem zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane powiązane z tym urządzeniem i informacje o lokalizacji urządzenia oraz nimi zarządzać.\n\nMasz połączenie z siecią VPN, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nAby uzyskać więcej informacji, skontaktuj się z administratorem."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i bezpieczne strony internetowe.\n\nSkontaktuj się z nim, by dowiedzieć się więcej.\n\nMasz także połączenie z siecią VPN, która może monitorować Twoją aktywność w sieci."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Urządzeniem zarządza <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nTwoim profilem do pracy zarządza:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministrator może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i bezpieczne strony.\n\nSkontaktuj się z nim, by dowiedzieć się więcej.\n\nMasz także połączenie z siecią VPN, która może monitorować Twoją osobistą aktywność w sieci"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nSkontaktuj się z nim, by dowiedzieć się więcej.\n\nMasz też połączenie z siecią VPN, która może monitorować Twoją aktywność w sieci."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Jest on połączony z aplikacją <xliff:g id="APPLICATION">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Jest on połączony z aplikacją <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nMasz też połączenie z aplikacją <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Twoim urządzeniem zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane powiązane z urządzeniem i informacje o jego lokalizacji oraz nimi zarządzać.\n\nMasz połączenie z aplikacją <xliff:g id="APPLICATION">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Urządzenie pozostanie zablokowane, aż odblokujesz je ręcznie"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Szybszy dostęp do powiadomień"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Zobacz powiadomienia, jeszcze zanim odblokujesz ekran"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Pokaż wszystkie"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ukrywaj wszystkie"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Zakończ teraz"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Ekran jest przypięty"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, kliknij i przytrzymaj jednocześnie Wstecz i Przegląd."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, kliknij i przytrzymaj Przegląd."</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index f3170c1..669229e 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Pesquisar"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Câmara"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telemóvel"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string>
     <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string>
     <string name="phone_label" msgid="2320074140205331708">"abrir telemóvel"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"abrir câmara"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Selecionar novo esquema de tarefa"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Duas barras de WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Três barras de WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Sinal WiMAX completo."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet desligada."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet ligada."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Sem sinal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Sem ligação."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero barras."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ignorado."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todas as aplicações recentes foram ignoradas."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"A iniciar <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificação ignorada."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Painel de notificações."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Definições rápidas."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ecrã de bloqueio."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Definições"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visão geral."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmar"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Fechar"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Utilizador <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi desligado."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo de avião desligado."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo de avião ligado."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Não incomodar ligado, apenas prioridade."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Não incomodar ligado, sem interrupções."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Não incomodar ativado, silêncio total."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Não incomodar ligado, apenas alarmes."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Não incomodar desligado."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Não incomodar desligado."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Não incomodar"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Apenas prioridade"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Apenas alarmes"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sem interrupções"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Silêncio total"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Dispositivos)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desat."</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Deslize para a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Sem interrupções. Nem mesmo alarmes."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Não é incomodado por sons e vibrações, exceto de alarmes, lembretes, eventos e autores de chamadas que especificar."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Não é incomodado por sons e vibrações, exceto de alarmes, lembretes, eventos e autores de chamadas que especificar."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Sem interrupções"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Apenas interrupções com prioridade"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Apenas alarmes"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"O próximo alarme é à(s) <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"O próximo alarme é <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Não vai ouvir o alarme à(s) <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Esta ação bloqueia TODOS os sons e as vibrações, incluindo de alarmes, músicas, vídeos e jogos. Continua a poder telefonar."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Tocar novamente para abrir"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Deslizar rapidamente com o dedo para cima para desbloquear"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Deslize rapidamente para a direita para aceder ao telemóvel"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Deslize rapidamente para a esquerda para aceder à câmara"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Sem interrupções"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Silêncio total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Apenas prioridade"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Apenas alarmes"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Sem\ninterrupções"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silêncio\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Apenas\nprioridade"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Apenas\nalarmes"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"A carregar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Desativar a VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Desligar VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar e gerir as definições, o acesso empresarial, as aplicações, os dados associados ao dispositivo e as informações de localização do dispositivo. Para obter mais informações, contacte o administrador."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites seguros.\n\nPara obter mais informações, contacte o administrador."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"O seu dispositivo é gerido por:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nO seu perfil de trabalho é gerido por:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nO seu administrador pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Websites seguros.\n\nPara obter mais informações, contacte o administrador."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Concedeu autorização a uma aplicação para configurar uma ligação VPN.\n\nEsta aplicação pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Websites seguros."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Concedeu autorização a uma aplicação para configurar uma ligação VPN.\n\nEsta aplicação pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar e gerir as definições, o acesso empresarial, as aplicações, os dados associados ao dispositivo e as informações de localização do dispositivo.\n\nEncontra-se ligado a uma VPN, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites seguros.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, encontra-se ligado a uma VPN, que pode monitorizar a atividade da rede."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nO seu perfil de trabalho é gerido por:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nO seu administrador pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites seguros.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, encontra-se ligado a uma VPN, que pode monitorizar a sua atividade de rede pessoal."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, está ligado a uma VPN, que pode monitorizar a atividade da rede."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nTambém está ligado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorizar a atividade da rede pessoal."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar e gerir as definições, o acesso empresarial, as aplicações, os dados associados ao dispositivo e as informações de localização do dispositivo.\n\nEstá ligado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até ser desbloqueado manualmente"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Receber notificações mais rapidamente"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver tudo"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar tudo"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Terminar agora"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"O ecrã está fixado"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Será mantido na vista até soltar. Toque sem soltar em Anterior e Vista geral em simultâneo para soltar."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Será mantido na vista até soltar. Toque sem soltar em Vista geral para soltar."</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 3061d53..995eec4 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Pesquisar"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Câmera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefone"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Desbloquear"</string>
     <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string>
     <string name="phone_label" msgid="2320074140205331708">"abrir telefone"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"abrir câmera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Selecionar novo layout da tarefa"</string>
     <string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Duas barras do WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Três barras do WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Sinal WiMAX completo."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet desconectada."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet conectada."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Sem sinal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Sem conexão."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nenhuma barra."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartado."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todos os apps recentes foram dispensados."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iniciando <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificação dispensada."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Aba de notificações."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Configurações rápidas."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Tela de bloqueio."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Configurações"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Visão geral."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmar"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Fechar"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Usuário <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"O Wi-Fi foi desativado."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"O modo avião foi desativado."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"O modo avião foi ativado."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Não perturbe\" ativado, somente prioridade."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Não perturbe\" ativado, sem interrupções."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Não perturbe\" ativado, silêncio total."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Não perturbe\" ativado, somente alarmes."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Não perturbe\" desativado."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Não perturbe\" desativado."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Não perturbe"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Só prioridade"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Somente alarmes"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sem interrupções"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Silêncio total"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desativado"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a esquerda."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Sem interrupções. Nem mesmo alarmes."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Você não será perturbado por sons e vibrações, com exceção de alarmes, lembretes, eventos e autores de chamadas que você especificar."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Você não será perturbado por sons e vibrações, com exceção de alarmes, lembretes, eventos e autores de chamadas que você especificar."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Sem interrupções"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Apenas interrupções prioritárias"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Somente alarmes"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Seu próximo alarme será às <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Seu próximo alarme será em <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Você não ouvirá o alarme às <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Isso bloqueia TODOS os sons e vibrações, incluindo alarmes, músicas, vídeos e jogos. Você ainda poderá fazer chamadas telefônicas."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Toque novamente para abrir"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Deslize para cima para desbloquear"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Deslize à direita p/ usar o telefone"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Deslize à esquerda p/ usar a câmera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Sem interrupções"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Silêncio total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Só prioridade"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Somente alarmes"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Sem\ninterrupções"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silêncio\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Somente\nprioridade"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Somente\nalarmes"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até concluir)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Desativar VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao dispositivo e informações sobre a localização do dispositivo. Para mais informações, entre em contato com o administrador."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Seu perfil profissional é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar sua atividades de rede, incluindo e-mails, apps e websites seguros.\n\nPara mais informações, entre em contato com seu administrador."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Seu dispositivo é gerenciado por:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nSeu perfil profissional é gerenciado por:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nSeu administrador pode monitorar seu dispositivo e suas atividades de rede, incluindo e-mails, apps e websites seguros.\n\nPara mais informações, entre em contato com seu administrador."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Você autorizou um app a configurar uma conexão VPN.\n\nEsse app pode monitorar seu dispositivo e atividades de rede, incluindo e-mails, aplicativos e websites seguros."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Você autorizou um app a configurar uma conexão VPN.\n\nEsse app pode monitorar seu dispositivo e atividades de rede, incluindo e-mails, apps e websites."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a uma VPN, a qual pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Seu perfil profissional é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar suas atividades de rede, incluindo e-mails, apps e websites seguros.\n\nPara mais informações, entre em contato com seu administrador.\n\nVocê também está conectado a uma VPN, a qual pode monitorar suas atividades de rede."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nSeu perfil profissional é gerenciado por:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nSeu administrador pode monitorar suas atividades de rede, incluindo e-mails, apps e websites seguros.\n\nPara mais informações, entre em contato com seu administrador.\n\nVocê também está conectado a uma VPN que pode monitorar suas atividades de rede pessoais"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador.\n\nVocê também está conectado a uma VPN, a qual pode monitorar suas atividades de rede."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar sua atividades de rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorar suas atividades profissionais na rede, incluindo e-mails, apps e websites.\n\nVocê também está conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorar suas atividades pessoais na rede."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até que você o desbloqueie manualmente"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Receba notificações mais rápido"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Veja-as antes de desbloquear"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver tudo"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar tudo"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Finalizar agora"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"A tela está fixada"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ela é mantida à vista até que seja liberada. Toque em \"Voltar\" e \"Visão Geral\" e mantenha essas opções pressionadas ao mesmo tempo para liberar."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ela é mantida à vista até que seja liberada. Toque em \"Visão geral\" e mantenha essa opção pressionada para liberar."</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 6c6374a..8046b8a 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -84,9 +84,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Căutați"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Cameră foto"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Deblocați"</string>
     <string name="unlock_label" msgid="8779712358041029439">"deblocați"</string>
     <string name="phone_label" msgid="2320074140205331708">"deschideți telefonul"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"deschideți camera foto"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Selectați noul aspect pentru activitate"</string>
     <string name="cancel" msgid="6442560571259935130">"Anulați"</string>
@@ -122,6 +126,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX două bare."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX trei bare."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX semnal complet."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet deconectat."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet conectat."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Fără semnal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Neconectat."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nicio bară."</string>
@@ -163,13 +169,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> a fost eliminată."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toate aplicațiile recente au fost închise."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Se inițiază <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notificarea a fost închisă."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Fereastră pentru notificări."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Setări rapide."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Ecranul de blocare."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Setări"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Vizualizare generală"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Confirmați"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Închideți"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Utilizatorul <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Conexiunea prin Wi-Fi este dezactivată."</string>
@@ -181,7 +188,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modul Avion este dezactivat."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modul Avion este activat."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Setarea „Nu deranja” este activată – numai prioritare."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Setarea „Nu deranja” este activată – fără întreruperi."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Setarea „Nu deranja” este activată – niciun sunet."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Setarea „Nu deranja” este activată – numai alarme."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Setarea „Nu deranja” este dezactivată."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Setarea „Nu deranja” a fost dezactivată."</string>
@@ -236,7 +243,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nu deranja"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Numai cu prioritate"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Numai alarme"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Fără întreruperi"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Niciun sunet"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispozitive)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth dezactivat"</string>
@@ -303,26 +310,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Căutaţi"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Glisaţi în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Glisaţi spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Fără întreruperi. Nici măcar alarme."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Nu veți fi deranjat(ă) de sunete și vibrații, exceptând alarmele, mementourile, evenimentele și apelanții pe care îi menționați."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Nu veți fi deranjat(ă) de sunete și vibrații, exceptând alarmele, mementourile, evenimentele și apelanții pe care îi menționați."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizați"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Fără întreruperi"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Numai întreruperi cu prioritate"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Numai alarme"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Următoarea alarmă este setată la <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Următoarea alarmă este la <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Nu veți auzi alarma la <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Această opțiune blochează TOATE sunetele și vibrațiile, inclusiv cele ale alarmelor, muzicii, videoclipurilor și jocurilor. Totuși, veți putea iniția apeluri."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificările mai puțin urgente mai jos"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Atingeți din nou pentru a deschide"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Glisați în sus pentru a debloca"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Glisați la dreapta pentru a acesa telefonul"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Glisați la stânga pentru a accesa camera foto"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Fără întreruperi"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Niciun sunet"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Numai cu prioritate"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Numai alarme"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Toate"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Fără\nîntreruperi"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Niciun\nsunet"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Numai\ncu prioritate"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Numai\nalarme"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Se încarcă (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string>
@@ -364,12 +368,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Dezactivați conexiunea prin VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Deconectați rețeaua VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza și gestiona setările, accesul la rețeaua companiei, aplicațiile, datele asociate cu dispozitivul și informațiile privind locația dispozitivului. Pentru mai multe informații, contactați administratorul."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile securizate.\n\nPentru mai multe informații, contactați administratorul."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Dispozitivul este gestionat de:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfilul de serviciu este gestionat de:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratorul poate monitoriza activitatea de pe dispozitiv și în rețea, inclusiv e-mailurile, aplicațiile și site-urile securizate.\n\nPentru mai multe informații, contactați administratorul."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Ați acordat unei aplicații permisiunea de a configura o conexiune VPN.\n\nAceastă aplicație poate monitoriza activitatea de pe dispozitiv și în rețea, inclusiv e-mailurile, aplicațiile și site-urile securizate."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Ați acordat unei aplicații permisiunea de a configura o conexiune VPN.\n\nAceastă aplicație poate monitoriza activitatea de pe dispozitiv și în rețea, inclusiv e-mailurile, aplicațiile și site-urile."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza și gestiona setările, accesul la rețeaua companiei, aplicațiile, datele asociate cu dispozitivul și informațiile privind locația dispozitivului.\n\nSunteți conectat(ă) la o rețea VPN, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile securizate.\n\nPentru mai multe informații, contactați administratorul.\n\nDe asemenea, sunteți conectat(ă) la o rețea VPN, care vă poate monitoriza activitatea în rețea."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfilul de serviciu este gestionat de:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratorul poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile securizate.\n\nPentru mai multe informații, contactați administratorul.\n\nDe asemenea, sunteți conectat(ă) la o rețea VPN, care vă poate monitoriza activitatea în rețea."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul.\n\nDe asemenea, sunteți conectat(ă) la o rețea VPN, care vă poate monitoriza activitatea în rețea."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Sunteți conectat(ă) la <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Sunteți conectat(ă) la <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua personală, inclusiv e-mailurile, aplicațiile și site-urile."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nDe asemenea, sunteți conectat(ă) la <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua personală."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza și gestiona setările, accesul la rețeaua companiei, aplicațiile, datele asociate cu dispozitivul și informațiile privind locația dispozitivului.\n\nSunteți conectat(ă) la <xliff:g id="APPLICATION">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Dispozitivul va rămâne blocat până când îl deblocați manual"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Obțineți notificări mai rapid"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Doresc să se afișeze înainte de deblocare"</string>
@@ -378,6 +385,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Afișați toate"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ascundeți toate"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Opriți acum"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Ecranul este fixat"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ecranul este afișat până anulați fixarea. Apăsați lung pe Înapoi și pe Vizualizare generală simultan pentru a anula fixarea."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ecranul este afișat până anulați fixarea. Apăsați lung pe Vizualizare generală pentru a anula fixarea."</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index a700f17..08ca544 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Поиск"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Телефон."</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Разблокировать."</string>
     <string name="unlock_label" msgid="8779712358041029439">"Разблокировать."</string>
     <string name="phone_label" msgid="2320074140205331708">"Открыть телефон."</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"Открыть камеру."</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Выберите другой макет"</string>
     <string name="cancel" msgid="6442560571259935130">"Отмена"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Сигнал WiMAX: два деления."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Сигнал WiMAX: три деления."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Надежный сигнал WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Устройство отключено от Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Устройство подключено к Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Нет сигнала"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Не подключено"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Нет сигнала"</string>
@@ -166,13 +172,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" удалено из списка."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Все недавние приложения закрыты."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Запуск приложения <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Уведомление закрыто"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Панель уведомлений"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Быстрые настройки"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заблокированный экран."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Настройки"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Обзор."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Подтвердить"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Закрыть"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Пользователь <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Модуль Wi-Fi отключен."</string>
@@ -184,7 +191,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим полета отключен."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим полета включен."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Режим \"Не беспокоить\" включен. Будут показаны только важные оповещения."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Включен режим \"Не беспокоить\". Все оповещения отключены."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Не беспокоить, полная тишина."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Не беспокоить – только будильник."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Режим \"Не беспокоить\" выключен."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Режим \"Не беспокоить\" выключен."</string>
@@ -239,7 +246,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="7309935569360609114">"Без оповещений"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Полная тишина"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth выкл."</string>
@@ -306,26 +313,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Поиск"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Проведите влево, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Никаких оповещений, даже от будильника."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Вибрация и звуки будут отключены. Вас могут побеспокоить только сигналы будильника, напоминания, уведомления о мероприятиях и звонки от выбранных абонентов."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Вибрация и звуки будут отключены. Вы услышите только сигналы будильника, напоминания, уведомления о мероприятиях и звонки от выбранных абонентов."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Настроить"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Не беспокоить"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Только важные оповещения"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Только будильник"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Следующий будильник: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Следующий будильник: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Следующий будильник: <xliff:g id="ALARM_TIME">%s</xliff:g>. Звук отключен."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Этот режим заблокирует все звуки и вибрацию, в том числе для будильника, музыки, видео и игр. Вы сможете разговаривать по телефону."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Показать менее важные оповещения"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Нажмите ещё раз, чтобы открыть"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Проведите вверх, чтобы разблокировать"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Чтобы позвонить, пролистните вправо"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Чтобы включить камеру, пролистните влево"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Не беспокоить"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Все"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Не\nбеспокоить"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарядка батареи (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -367,12 +371,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Отключить VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Отключить VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Этим устройством управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может управлять настройками, корпоративным доступом, приложениями, данными на вашем устройстве, в том числе геоданными, а также просматривать соответствующие сведения. За дополнительной информацией обратитесь к администратору."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Этим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и защищенными веб-сайтами.\n\nОбратитесь к нему за дополнительной информацией."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Вашим устройством управляет\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nВашим корпоративным профилем управляет\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистратор может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и защищенными веб-сайтами.\n\nОбратитесь к нему за дополнительной информацией."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Вы разрешили приложению подключаться к сети VPN.\n\nЭто приложение может отслеживать ваши действия на устройстве и в Интернете, включая работу с электронной почтой, приложениями и защищенными веб-сайтами."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Вы разрешили приложению подключаться к сети VPN.\n\nОно может отслеживать ваши действия на устройстве и в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Этим устройством управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может управлять настройками, корпоративным доступом, приложениями, данными на вашем устройстве, в том числе геоданными, а также просматривать соответствующие сведения.\n\nВы подключены к сети VPN, поэтому возможно отслеживание ваших действий в Интернете, включая работу с электронной почтой, приложениями и защищенными веб-сайтами.\n\nЗа дополнительной информацией обратитесь к администратору."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Этим профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и защищенными веб-сайтами.\n\nОбратитесь к нему за дополнительной информацией.\n\nУстройство также подключено к сети VPN, в которой возможно отслеживание ваших действий."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Устройством управляет <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nВашим корпоративным профилем управляет\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистратор может отслеживать вашу работу с почтой, приложениями и защищенными веб-сайтами.\n\nОбратитесь к нему за дополнительной информацией.\n\nУстройство также подключено к сети VPN, в которой возможно отслеживание ваших действий."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Вашим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа подробностями обратитесь к нему.\n\nУстройство также подключено к сети VPN, в которой возможно отслеживание ваших действий."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"Сеть VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Запущено приложение <xliff:g id="APPLICATION">%1$s</xliff:g>, которое может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Запущено приложение <xliff:g id="APPLICATION">%1$s</xliff:g>, которое может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Вашим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Приложение <xliff:g id="APPLICATION">%2$s</xliff:g> может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа подробностями обратитесь к своему администратору."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Вашим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nПриложения <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> и <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> могут отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Вашим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может управлять настройками, корпоративным доступом, приложениями, данными на вашем устройстве, в том числе геоданными, а также просматривать соответствующие сведения.\n\nПриложение <xliff:g id="APPLICATION">%2$s</xliff:g> также может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа подробностями обратитесь к своему администратору."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Устройство необходимо будет разблокировать вручную"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Быстрый доступ к уведомлениям"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Просматривайте уведомления на заблокированном экране."</string>
@@ -381,6 +388,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Показать все"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Скрыть все"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>."</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Завершить"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Блокировка в приложении включена"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Это приложение останется активным, пока вы не отмените блокировку, одновременно нажав кнопки \"Назад\" и \"Обзор\"."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Приложение останется активным, пока вы не отмените блокировку, одновременно нажав кнопки Назад и Обзор."</string>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
index 7f8a504..f3b6d0a 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"සොයන්න"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"කැමරාව"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"දුරකථනය"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"හඬ සහාය"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"අඟුල අරින්න"</string>
     <string name="unlock_label" msgid="8779712358041029439">"අඟුල අරින්න"</string>
     <string name="phone_label" msgid="2320074140205331708">"දුරකථනය විවෘත කරන්න"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"විවෘත හඬ සහාය"</string>
     <string name="camera_label" msgid="7261107956054836961">"කැමරාව විවෘත කරන්න"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"නව කාර්යය සැකැස්ම තෝරන්න"</string>
     <string name="cancel" msgid="6442560571259935130">"අවලංගු කරන්න"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX තීරු දෙකයි."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX තීරු තුනයි."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ඊතර්නෙට් විසන්ධි කරන ලදී."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ඊතර්නෙට් සම්බන්ධ කරන ලදී."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"සංඥා නැත."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"සම්බන්ධ වී නැත."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"තීරු ශුන්‍යයි."</string>
@@ -162,13 +166,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> අස් කර ඇත."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"සියලුම මෑත යෙඳුම් අස් කරන ලදි."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කරමින්."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"දැනුම්දීම නිෂ්ප්‍රභා කරඇත."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"දැනුම්දීම් ආවරණය."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ක්ෂණික සැකසීම්."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"අගුළු තිරය."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"සැකසීම්"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"දළ විශ්ලේෂණය."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"තහවුරු කරන්න"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"වසන්න"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"පරිශීලකයා <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi අක්‍රියයි."</string>
@@ -180,7 +185,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"අහස්යානා අකාරය අක්‍රියයි."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"අහස්යානා ආකාරය සක්‍රීයයි."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"බාධා නොකරන්න ක්‍රියාත්මකයි, ප්‍රමුඛතා පමණි."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"බාධා නොකරන්න ක්‍රියාත්මකයි, බාධා කිරීම් නැත."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"සම්පූර්ණ නිහඬතාවය, බාධා නොකරන්න."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"බාධා නොකරන්න ක්‍රියාත්මකයි, ප්‍රමුඛතා පමණි."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"බාධා නොකරන්න ක්‍රියා විරහිතයි."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"බාධා නොකරන්න ක්‍රියා විරහිත කරන ලදි."</string>
@@ -235,7 +240,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="7309935569360609114">"බාධා කිරීම් නැත"</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>
@@ -302,26 +307,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"සෙවීම"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා උඩට සර්පණය කරන්න."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා වමට සර්පණය කරන්න."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"අතුරු බිඳීම් නැත. අඩුම තරමේ අනතුරු ඇඟවීමක්වත් නැත."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"සීනු, සිහි කැඳවීම්, සිදුවීම් සහ ඔබ සඳහන් කරන අමතන්නන් හැර වෙනත් ශබ්ද සහ කම්පන වලින් ඔබව බාධා නොකරයි."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"එලාම, සිහි කැඳවීම්, සිදුවීම් සහ ඔබ සඳහන් කරන අමතන්නන් වෙතින් හැර, වෙනත් ශබ්ද සහ කම්පනවලින් ඔබට බාධා නොවනු ඇත."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"අභිරුචිකරණය"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"අතුරු බිදුම් නැත"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"ප්‍රමුඛ අතුරු බිඳීම් පමණයි"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"ඇඟවීම් පමණි"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"ඔබගේ ඊළඟ සීනුව <xliff:g id="ALARM_TIME">%s</xliff:g> තිබේ"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"ඔබගේ ඊළඟ සීනුව <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> වේ"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> හි තිබෙන ඔබගේ සීනුව ඔබට ඇසෙන්නේ නැත"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"මෙය එලාම, සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු, සියලු ශබ්ද සහ කම්පන අවහිර කරයි. ඔබට තවමත් දුරකථන ඇමතුම් සිදු කිරීමේ හැකියාව ඇත."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"හදිසිය අඩු දැනුම් දීම් පහත"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"විවෘත කිරීමට නැවත ස්පර්ශ කරන්න"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"අගුළු ඇරීමට ස්වයිප් කරන්න."</string>
-    <string name="phone_hint" msgid="3101468054914424646">"දුරකථන සඳහා දකුණට ස්වයිප් කරන්න"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"කැමරාව සඳහා දකුණට ස්වයිප් කරන්න"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"බාධා කිරීම් නැත"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"දුරකථනය සඳහා නිරූපකය වෙතින් ස්වයිප් කරන්න"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"හඬ සහාය සඳහා නිරූපකය වෙතින් ස්වයිප් කරන්න"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"කැමරාව සඳහා නිරූපකය වෙතින් ස්වයිප් කරන්න"</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_all" msgid="1330581184930945764">"සියලු"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"බාධා\nනොකරන්න"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"ආරෝපණය වෙමින් (සම්පුර්ණ වන තෙක් <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +362,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN අබල කරන්න."</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN විසන්ධි කරන්න"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ඔබේ උපාංගය කළමනාකරණය කරනු ලබන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්‍රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංගය තිබෙන ස්ථානයේ තොරතුරු නිරීක්ෂණය කිරීමට සහ කළමනාකරණය කිරීමට හැකිය. වැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"ඔබේ වැඩ පැතිකඩ කළමනාකරණය කරනු ලබන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකියාව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"ඔබේ උපාංගය කළමනාකරණය කරනු ලබන්නේ:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nඔබේ වැඩ පැතිකඩ කළමනාකරණය කරනු ලබන්නේ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය සහ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකිය.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"ඔබ VPN සම්බන්ධතාවක් පිහිටුවීමට යෙදුම් අවසරයක් දී ඇත.\n\nමෙම යෙදුමට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකිය."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"ඔබ VPN සම්බන්ධතාවක් පිහිටුවීමට යෙදුම් අවසරයක් දී ඇත.\n\nමෙම යෙදුමට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකිය."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ඔබේ උපාංගය කළමනාකරණය කරනු ලබන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්‍රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංගය තිබෙන ස්ථානයේ තොරතුරු නිරීක්ෂණය කිරීමට සහ කළමනාකරණය කිරීමට හැකිය.\n\nඊ-තැපැල්, යෙදුම්, සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි VPN සම්බන්ධතාවයකටද, ඔබ සම්බන්ධව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"ඔබේ වැඩ පැතිකඩ කළමනාකරණය කරනු ලබන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකියාව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න.\n\nඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි VPN සම්බන්ධතාවයකටද, ඔබ සම්බන්ධව ඇත."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"ඔබේ උපාංගය කළමනාකරණය කරනු ලබන්නේ <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> විසිනි.\nඔබේ වැඩ පැතිකඩ කළමනාකරණය කරනු ලබන්නේ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nඔබේ පරිපාලකට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකියාව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න.\n\nඔබේ පුද්ගලික ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි VPN සම්බන්ධතාවයකටද, ඔබ සම්බන්ධව ඇත."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ඔබේ කාර්ය පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකියාව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න.\n\nඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි VPN සම්බන්ධතාවයකටද, ඔබ සම්බන්ධව ඇත."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%1$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%1$s</xliff:g>, වෙත ඔබ සම්බන්ධ වී ඇත."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"ඔබේ කාර්ය පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි. එය ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%2$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත.\n\nවැඩිදුර විස්තර සඳහා, ඔබේ ජාල පරිපාලක අමතන්න."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"ඔබේ කාර්ය පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි. එය ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, වෙත ඔබ සම්බන්ධ වී ඇත.\n\nඔබ ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> වෙතද සම්බන්ධ වී ඇත."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ඔබේ උපාංගය කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ උපාංගය හා සම්බන්ධිත සැකසීම්, ආයතනික ප්‍රවේශය, යෙදුම්, දත්ත සහ ඔබේ උපාංගය තිබෙන ස්ථානයේ තොරතුරු නිරීක්ෂණය කිරීමට සහ කළමනාකරණය කිරීමට හැකිය.\n\nඔබ ඊ-තැපැල්, යෙදුම්, සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි <xliff:g id="APPLICATION">%2$s</xliff:g>, වෙතද සම්බන්ධව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ඔබ අතින් අගුළු අරින තුරු උපකරණය අගුළු වැටි තිබේ"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"දැනුම්දීම් ඉක්මනින් ලබාගන්න"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ඔබ අඟුළු හැරීමට කලින් ඒවා බලන්න"</string>
@@ -377,6 +379,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"සියල්ල බලන්න"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"සියල්ල සඟවන්න"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"දැන් අවසන් කරන්න"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"දිග හරින්න"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"හකුළන්න"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"තීරය අමුණන ලදි"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ඔබ ගලවන තෙක් එය දර්ශනය තුළ මෙය තබයි. ගැලවීමට ආපසු සහ දළ විශ්ලේෂණය එකම වේලාවක ස්පර්ෂ කර අල්ලා සිටින්න."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"ඔබ ගලවන තෙක් එය දර්ශනය තුළ මෙය තබයි. ගැලවීමට දළ විශ්ලේෂණය ස්පර්ෂ කර අල්ලා සිටින්න."</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index b1a9b58..dadf388 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Hľadať"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparát"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefón"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Odomknúť"</string>
     <string name="unlock_label" msgid="8779712358041029439">"odomknúť"</string>
     <string name="phone_label" msgid="2320074140205331708">"otvoriť telefón"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"spustiť fotoaparát"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Vyberte nové rozloženie úlohy"</string>
     <string name="cancel" msgid="6442560571259935130">"Zrušiť"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Dva stĺpce signálu siete WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Tri stĺpce signálu siete WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Plný signál siete WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Sieť ethernet je odpojená"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Sieť ethernet je pripojená"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Žiadny signál."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Nepripojené."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Žiadna čiarka."</string>
@@ -166,13 +172,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikácia <xliff:g id="APP">%s</xliff:g> bola zrušená."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Všetky nedávne aplikácie boli odmietnuté."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Spúšťa sa aplikácia <xliff:g id="APP">%s</xliff:g>"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Upozornenie bolo zrušené."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Panel upozornení."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Rýchle nastavenia."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Uzamknutá obrazovka"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Nastavenia"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Prehľad"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Potvrdiť"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Zavrieť"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Používateľ: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Pripojenie Wi-Fi je vypnuté."</string>
@@ -184,7 +191,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Režim v lietadle je vypnutý."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Režim v lietadle je zapnutý."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Stav Nerušiť je zapnutý, iba prioritné."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Stav Nerušiť je zapnutý, žiadne prerušenia."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Stav Nerušiť je zapnutý, úplné ticho."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Stav Nerušiť je zapnutý, iba budíky."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Stav Nerušiť je vypnutý."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stav Nerušiť je vypnutý."</string>
@@ -239,7 +246,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nerušiť"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Iba prioritné"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Iba budíky"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Žiadne prerušenia"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Úplné ticho"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Rozhranie Bluetooth (počet zariadení: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Rozhranie Bluetooth je vypnuté"</string>
@@ -306,26 +313,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Vyhľadávanie"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Prejdite prstom nahor: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Prejdite prstom doľava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Žiadne vyrušenia, ani budíky"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Nebudú vás rušiť zvuky ani vibrácie s výnimkou budíkov, upozornení, udalostí a volajúcich, ktoré zadáte."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Nebudú vás rušiť zvuky ani vibrácie s výnimkou budíkov, pripomenutí, udalostí a volajúcich, ktoré špecifikujete."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prispôsobiť"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Žiadne vyrušenia"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Iba prioritné vyrušenia"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Iba budíky"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Ďalší budík: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Ďalší budík: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Váš budík o <xliff:g id="ALARM_TIME">%s</xliff:g> sa nespustí"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Zablokujú sa tým VŠETKY zvuky a vibrácie vrátane zvukov budíkov, hudby, videí a hier. Naďalej budete môcť telefonovať."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Menej naliehavé upozornenia sa nachádzajú nižšie"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Otvorte opätovným klepnutím"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Zariadenie odomknete prejdením prstom nahor"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Telefón otvoríte prejdením prstom doľava"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Fotoaparát otvoríte prejdením prstom doľava"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Žiadne prerušenia"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Úplné ticho"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Iba prioritné"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Iba budíky"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Všetky"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Žiadne\nprerušenia"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Úplné\nticho"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Iba\nprioritné"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Iba\nbudíky"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíja sa (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -367,12 +371,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Deaktivovať VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Odpojiť sieť VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje priradené k vášmu zariadeniu a informácie o polohe zariadenia. Ďalšie informácie získate od svojho správcu."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a zabezpečených webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Vaše zariadenie spravuje organizácia:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVáš pracovný profil spravuje organizácia:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nSprávca môže sledovať vaše zariadenie a aktivitu v sieti vrátane e-mailových správ, aplikácií a zabezpečených webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Určitej aplikácii ste povolili nastaviť pripojenie VPN.\n\nTáto aplikácia môže sledovať vaše zariadenie a aktivitu v sieti vrátane e-mailových správ, aplikácií a zabezpečených webových stránok."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Určitej aplikácii ste udelili povolenie nastaviť pripojenie VPN.\n\nTáto aplikácia môže sledovať vaše zariadenie a aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje priradené k vášmu zariadeniu a informácie o polohe zariadenia.\n\nSte tiež pripojený/-á k sieti VPN, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácii a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a zabezpečených webových stránok.\n\nĎalšie informácie získate od svojho správcu.\n\nSte tiež pripojený/-á k sieti VPN, ktorá môže sledovať vašu osobnú aktivitu v sieti."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nVáš pracovný profil spravuje organizácia:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nSprávca môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a zabezpečených webových stránok.\n\nĎalšie informácie získate od svojho správcu.\n\nSte tiež pripojený/-á k sieti VPN, ktorá môže sledovať vašu osobnú aktivitu v sieti."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nĎalšie informácie získate od svojho správcu.\n\nSte tiež pripojený/-á k sieti VPN, ktorá môže sledovať vašu aktivitu v sieti."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nSte tiež pripojený/-á k aplikácii <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ktorá môže sledovať vašu súkromnú aktivitu v sieti."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, podnikový prístup, aplikácie a údaje priradené k vášmu účtu, ako aj informácie o polohe zariadenia.\n\nSte pripojený/-á k aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácii a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Zariadenie zostane uzamknuté, dokým ho ručne neodomknete."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Získavať upozornenia rýchlejšie"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Zobraziť pred odomknutím"</string>
@@ -381,6 +388,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Zobraziť všetko"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skryť všetko"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Skončiť"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Obrazovka je pripnutá"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Ak ho chcete uvoľniť, stlačte a podržte súčasne tlačidlá Späť a Prehľad."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Uvoľníte ho stlačením a podržaním tlačidla Prehľad."</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index dbc0cb2..be3e7be 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Iskanje"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparat"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Odkleni"</string>
     <string name="unlock_label" msgid="8779712358041029439">"odkleni"</string>
     <string name="phone_label" msgid="2320074140205331708">"odpri telefon"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"odpri fotoaparat"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Izberite novo postavitev opravil"</string>
     <string name="cancel" msgid="6442560571259935130">"Prekliči"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Signal WiMAX: dve črtici."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Signal WiMAX: tri črtice."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Poln signal WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernetna povezava je prekinjena."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernetna povezava je vzpostavljena."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ni signala."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Ni povezan."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Nič črtic."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> je bila odstranjena."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Vse nedavne aplikacije so bile opuščene."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Zaganjanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Obvestilo je bilo odstranjeno."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Zaslon z obvestili."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hitre nastavitve."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Zaklenjen zaslon"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Nastavitve"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Pregled."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Potrdi"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Zapri"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Uporabnik: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi je izklopljen."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Način za letalo je izklopljen."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Način za letalo je vklopljen."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Način »ne moti« je vklopljen, samo prednostno."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Način »ne moti« je vklopljen, ni prekinitev."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Način »ne moti« je vklopljen, popolna tišina."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Način »ne moti« je vklopljen, samo alarmi."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Način »ne moti« je izklopljen."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Način »ne moti« je izklopljen."</string>
@@ -237,7 +244,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne moti"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Samo prednostno"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Samo alarmi"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Brez prekinitev"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Popolna tišina"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (št. naprav: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth izklopljen"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Iskanje"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Povlecite navzgor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Povlecite v levo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Brez motenj. Celo brez alarmov."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Ne bodo vas motili zvoki ali tresenje, razen od alarmov, opomnikov, dogodkov in klicateljev, ki jih določite."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Ne bodo vas motili zvoki in vibriranje, razen od alarmov, opomnikov, dogodkov in klicateljev, ki jih določite."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prilagodi"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Brez prekinitev"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Samo prednostne prekinitve"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Samo alarmi"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Vaš naslednji alarm je ob <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Vaš naslednji alarm: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Alarma ob <xliff:g id="ALARM_TIME">%s</xliff:g> ne boste slišali"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"S tem so blokirani VSI zvoki in vibriranje – tudi od alarmov, glasbe, videoposnetkov in iger. Še vedno boste lahko opravljali telefonske klice."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Manj nujna obvestila spodaj"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Dotaknite se znova, če želite odpreti"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Povlecite, da odklenete"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Povlecite v desno za telefon"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Povlecite v levo za fotoaparat"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Brez prekinitev"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Popolna tišina"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Samo prednostno"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Samo alarmi"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Vse"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Brez\nprekinitev"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Popolna\ntišina"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\nprednostno"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Onemogoči VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Prekini povezavo z VPN-jem"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Napravo upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, podatke, povezane z napravo, in podatke o lokaciji naprave. Če želite več informacij, se obrnite na skrbnika."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Delovni profil upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in varnimi spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Napravo upravlja:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nDelovni profil upravlja:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nSkrbnik lahko nadzira napravo in omrežno dejavnost, vključno z e-pošto, aplikacijami in varnimi spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Aplikaciji ste dovolili vzpostavitev povezave z omrežjem VPN.\n\nTa aplikacija lahko nadzira napravo in omrežno dejavnost, vključno z e-pošto, aplikacijami in varnimi spletnimi mesti."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Aplikaciji ste dovolili vzpostavitev povezave z omrežjem VPN.\n\nTa aplikacija lahko nadzira napravo in omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Napravo upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, podatke, povezane z napravo, in podatke o lokaciji naprave.\n\nPovezani ste z omrežjem VPN, ki lahko nadzira vašo omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Delovni profil upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in varnimi spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika.\n\nPovezani ste tudi z omrežjem VPN, ki lahko nadzira vašo omrežno dejavnost."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Napravo upravlja: <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nDelovni profil upravlja:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nSkrbnik lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in varnimi spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika.\n\nPovezani ste tudi z omrežjem VPN, ki lahko nadzira vašo osebno omrežno dejavnost."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Delovni profil upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika.\n\nPovezani ste tudi z omrežjem VPN, ki lahko nadzira omrežno dejavnost."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Delovni profil upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Delovni profil upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nPovezani ste tudi z aplikacijo <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Napravo upravlja: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, podatke, povezane z napravo, in podatke o lokaciji naprave.\n\nPovezani ste z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Naprava bo ostala zaklenjena, dokler je ročno ne odklenete."</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Hitrejše prejemanje obvestil"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Oglejte si jih pred odklepanjem"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Pokaži vse"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skrij vse"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Končaj zdaj"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Zaslon je pripet"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"S tem ostane zaslon v pogledu, dokler ga ne odpnete. Hkrati pridržite tipko za nazaj in tipko za pregled, če ga želite odpeti."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"S tem ostane zaslon v pogledu, dokler ga ne odpnete. Pridržite tipko za pregled, če ga želite odpeti."</string>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml
index e70254c..38fdcfd 100644
--- a/packages/SystemUI/res/values-sq-rAL/strings.xml
+++ b/packages/SystemUI/res/values-sq-rAL/strings.xml
@@ -179,12 +179,12 @@
     <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modaliteti \"në aeroplan\" është i aktivizuar."</string>
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modaliteti \"në aeroplan\" është i çaktivizuar."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modaliteti \"në aeroplan\" është i aktivizuar."</string>
-    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Mos shqetëso\" i aktivizuar, vetëm me prioritet."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Mos shqetëso\" i aktivizuar, asnjë ndërprerje."</string>
-    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Mos shqetëso\" i aktivizuar, vetëm alarmet."</string>
-    <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Mos shqetëso\" i çaktivizuar."</string>
-    <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Mos shqetëso\" i çaktivizuar."</string>
-    <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Mos shqetëso\" i aktivizuar."</string>
+    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Mos shqetëso\" është i aktivizuar, vetëm me prioritet."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Mos shqetëso\" është i aktivizuar, asnjë ndërprerje."</string>
+    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Mos shqetëso\" është i aktivizuar, vetëm alarmet."</string>
+    <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Mos shqetëso\" është i çaktivizuar."</string>
+    <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Mos shqetëso\" është i çaktivizuar."</string>
+    <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Mos shqetëso\" është i aktivizuar."</string>
     <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"\"Bluetooth-i\" është i çaktivizuar."</string>
     <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"\"Bluetooth-i\" është i aktivizuar."</string>
     <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"\"Bluetooth-i\" po lidhet."</string>
@@ -362,20 +362,13 @@
     <string name="monitoring_title" msgid="169206259253048106">"Monitorimi i rrjetit"</string>
     <string name="disable_vpn" msgid="4435534311510272506">"Çaktivizo VPN-në"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Shkëput VPN-në"</string>
-    <!-- no translation found for monitoring_description_device_owned (5780988291898461883) -->
-    <skip />
-    <!-- no translation found for monitoring_description_profile_owned (8110044290898637925) -->
-    <skip />
-    <!-- no translation found for monitoring_description_device_and_profile_owned (1664428184778531249) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn (912328761766161919) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn_device_owned (3090670777499161246) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn_profile_owned (2224494839524715272) -->
-    <skip />
-    <!-- no translation found for monitoring_description_vpn_device_and_profile_owned (2198546817407897093) -->
-    <skip />
+    <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë dhe të menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen tënde, si dhe informacionet e vendndodhjes së pajisjes tënde. Për më shumë informacione, kontakto me administratorin tënd."</string>
+    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë aktivitetin e rrjetit, duke përfshirë emailet, aplikacionet dhe sajtet e sigurta të uebit.\n\nPër më shumë informacione, kontakto me administratorin tënd."</string>
+    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Pajisja jote menaxhohet nga:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfili yt i punës menaxhohet nga:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratori yt mund të monitorojë pajisjen tënde dhe aktivitetin e rrjetit, duke përfshirë emailet, aplikacionet dhe sajtet e sigurta të uebit.\n\nPër më shumë informacione, kontakto me administratorin."</string>
+    <string name="monitoring_description_vpn" msgid="912328761766161919">"I dhe leje një aplikacioni që të konfigurojë një lidhje VPN.\n\nKy aplikacion mund të monitorojë pajisjen tënde dhe aktivitetin e rrjetit, duke përfshirë emailet, aplikacionet dhe sajtet e sigurta të uebit."</string>
+    <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë dhe të menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat e lidhura me pajisjen dhe informacionet e vendndodhjes së pajisjes.\n\nJe i lidhur me një rrjet VPN që mund të monitorojë aktivitetin tënd të rrjetit, duke përfshirë emailet, aplikacionet dhe sajtet e uebit.\n\nPër më shumë informacione, kontakto me administratorin."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë aktivitetin tënd të rrjetit, duke përfshirë emailet, aplikacionet dhe sajtet e sigurta të uebit.\n\nPër më shumë informacione, kontakto me administratorin tënd.\n\nJe i lidhur po ashtu me një rrjet VPN që mund të monitorojë aktivitetin tënd të rrjetit."</string>
+    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nProfili yt i punës menaxhohet nga:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratori yt mund të monitorojë aktivitetin tënd të rrjetit, duke përfshirë emailet, aplikacionet dhe sajtet e sigurta të uebit.\n\nPër më shumë informacione, kontakto me administratorin tënd.\n\nJe i lidhur po ashtu me një rrjet VPN që mund të monitorojë aktivitetin e rrjetit tënd personal"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Pajisje do të qëndrojë e kyçur derisa ta shkyçësh manualisht"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Merr njoftime më shpejt"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Shikoji para se t\'i shkyçësh"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 58737ef..f2f126e 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -84,9 +84,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Претражите"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Телефон"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Откључајте"</string>
     <string name="unlock_label" msgid="8779712358041029439">"откључај"</string>
     <string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"отвори камеру"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Изабери нови распоред задатака"</string>
     <string name="cancel" msgid="6442560571259935130">"Откажи"</string>
@@ -122,6 +126,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX сигнал има две црте."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX сигнал има три црте."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX сигнал је најјачи."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Веза са етернетом је прекинута."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Етернет је повезан."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Нема сигнала."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Није повезано."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Ниједна црта."</string>
@@ -163,13 +169,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Апликација <xliff:g id="APP">%s</xliff:g> је одбачена."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Све недавно коришћене апликације су одбачене."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Покрећемо <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Обавештење је одбачено."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Прозор са обавештењима."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Брза подешавања."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Закључани екран."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Подешавања"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Преглед."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Потврди"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Затвори"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Корисник: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi је искључен."</string>
@@ -181,7 +188,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим рада у авиону је искључен."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим рада у авиону је укључен."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Подешавање Не узнемиравај је укључено, само приоритетни прекиди."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Подешавање Не узнемиравај је укључено, без прекида."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Подешавање Не узнемиравај је укључено, потпуна тишина."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Подешавање Не узнемиравај је укључено, само аларми."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Подешавање Не узнемиравај је искључено."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Подешавање Не узнемиравај је искључено."</string>
@@ -236,7 +243,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="7309935569360609114">"Без прекида"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Потпуна тишина"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> уређаја)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth искључен"</string>
@@ -303,26 +310,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Претрага"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Превуците нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Превуците улево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Нема прекида. Чак ни аларма."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Неће вас узнемиравати звукови и вибрације осим за аларме, подсетнике, догађаје и позиваоце које изаберете."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Неће вас узнемиравати звукови и вибрације, осим за аларме, подсетнике, догађаје и позиваоце које изаберете."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Прилагоди"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Без прекида"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Само приоритетни прекиди"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Само аларми"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Следећи аларм је у <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Следећи аларм: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Нећете чути аларм у <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Ово блокира СВЕ звукове и вибрације укључујући аларме, музику, видео снимке и игре. И даље ћете моћи да упућујете позиве."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Мање хитна обавештења су у наставку"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Додирните поново да бисте отворили"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Превуците нагоре да бисте откључали"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Превуците удесно за телефон"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Превуците улево за камеру"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Без прекида"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Све"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Без\nпрекида"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Пуњење (пун је за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -364,12 +368,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Онемогући VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Прекини везу са VPN-ом"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Уређајем управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима. Више информација потражите од администратора."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа активности на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nВише информација потражите од администратора."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Уређајем управља:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nПрофилом за Work управља:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистратор може да надгледа активности на уређају и мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nВише информација потражите од администратора."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Дали сте дозволу апликацији да подешава VPN везу.\n\nТа апликација може да надгледа активности на уређају и мрежи, укључујући имејлове, апликације и безбедне веб-сајтове."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Дали сте дозволу апликацији да подешава VPN везу.\n\nТа апликација може да надгледа активности на уређају и мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Уређајем управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима.\n\nПовезани сте на VPN, који може да надгледа активности на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nВише информација потражите од администратора."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа активности на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nВише информација потражите од администратора.\n\nПовезани сте и на VPN, који може да надгледа активности на личној мрежи."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Уређајем управља <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nПрофилом за Work управља:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдминистратор може да надгледа активности на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nВише информација потражите од администратора.\n\nПовезани сте и на VPN, који може да надгледа активности на личној мрежи"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора.\n\nПовезани сте и на VPN, који може да надгледа активности на личној мрежи."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на личној мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Повезан је са апликацијом <xliff:g id="APPLICATION">%2$s</xliff:g>, која може да надгледа активности на пословној мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Повезан је са апликацијом <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, која може да надгледа активности на пословној мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nПовезани сте и са апликацијом <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, која може да надгледа активности на личној мрежи."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Уређајем управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима.\n\nПовезани сте са апликацијом <xliff:g id="APPLICATION">%2$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Уређај ће остати закључан док га не откључате ручно"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Брже добијајте обавештења"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Прегледајте их пре откључавања"</string>
@@ -378,6 +385,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Прикажи све"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Сакриј све"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Прекини одмах"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Екран је закачен"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"На овај начин ово остаје приказано док га не откачите. Истовремено додирните и задржите Назад и Преглед да бисте га откачили."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"На овај начин ово остаје приказано док га не откачите. Додирните и задржите Преглед да бисте га откачили."</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index d62e8df..7aea1e8 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Sök"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Mobil"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Lås upp"</string>
     <string name="unlock_label" msgid="8779712358041029439">"lås upp"</string>
     <string name="phone_label" msgid="2320074140205331708">"öppna mobilen"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"öppna kameran"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Välj en ny layout för uppgiften"</string>
     <string name="cancel" msgid="6442560571259935130">"Avbryt"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX: två staplar."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX: tre staplar."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-signalen är full."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet har kopplats från."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet har anslutits."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ingen signal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Inte ansluten."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Inga staplar."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> togs bort permanent."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alla appar har tagits bort från listan Senaste."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Startar <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Meddelandet ignorerades."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Meddelandepanel."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Snabbinställningar."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Låsskärm."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Inställningar"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Översikt."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Bekräfta"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Stäng"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Användare <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi har inaktiverats."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flygplansläget har inaktiverats."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flygplansläget har aktiverats."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Stör ej har aktiverats. Endast prioriterade."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Stör ej har aktiverats. Inga avbrott."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Stör ej är aktiverat. Helt tyst."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Stör ej är aktiverat, endast alarm."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Stör ej av."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stör ej har inaktiverats."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Stör ej"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Endast prioriterade"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Endast alarm"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Inga avbrott"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Helt tyst"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth av"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Sök"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Dra uppåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Dra åt vänster för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Inga avbrott. Inte ens alarm."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Du blir inte störd av ljud och vibrationer, förutom från alarm, påminnelser, event och specifika samtal."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Du blir inte störd av ljud och vibrationer, förutom från alarm, påminnelser, event och specifika samtal."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Anpassa"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Inga avbrott"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Bara prioriterade samtal och aviseringar"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Endast alarm"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Nästa alarm är kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Nästa alarm är <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Alarmet kommer inte att höras kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Detta blockerar ALLA ljud och vibrationer, inklusive alarm, musik, videor och spel. Du kan fortfarande ringa."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre brådskande aviseringar nedan"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Tryck igen för att öppna"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Dra uppåt om du vill låsa upp"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Dra åt höger om du vill visa telefonen"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Dra åt vänster om du vill visa kameran"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Inga avbrott"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Helt tyst"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Bara prioriterade"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Endast alarm"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Alla"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Stör\nej"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Helt\ntyst"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Endast\nprioriterade"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Endast\nalarm"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laddar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tills batteriet är fulladdat)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Inaktivera VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Koppla från VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Enheten hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data som är kopplad till enheten och enhetens platsinformation. Kontakta administratören om du vill veta mer."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan övervaka dina nätverksaktiviteter, inklusive e-post, appar och säkra webbplatser.\n\nKontakta administratören om du vill veta mer."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Enheten hanteras av:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nJobbprofilen hanteras av:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratören kan övervaka dina enhets- och nätverksaktiviteter, inklusive e-post, appar och säkra webbplatser.\n\nKontakta administratören om du vill veta mer."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Du har gett en app behörighet att konfigurera en VPN-anslutning.\n\nAppen kan övervaka dina enhets- och nätverksaktiviteter, inklusive e-post, appar och säkra webbplatser."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Du har gett en app behörighet att upprätta en VPN-anslutning.\n\nAppen kan bevaka aktivitet på enheten och nätverket, inklusive e-post, appar och webbplatser."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Enheten hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data som är kopplad till enheten och enhetens platsinformation.\n\nDu är ansluten till ett VPN-nätverk som kan övervaka dina nätverksaktiviteter, inklusive e-post, appar och webbplatser.\n\nKontakta administratören om du vill veta mer."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan övervaka dina nätverksaktiviteter, inklusive e-post, appar och säkra webbplatser.\n\nKontakta administratören om du vill veta mer.\n\nDu är även ansluten till ett VPN-nätverk som kan övervaka dina nätverksaktiviteter."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Enheten hanteras av <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nJobbprofilen hanteras av:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nAdministratören kan övervaka dina nätverksaktiviteter, inklusive e-post, appar och säkra webbplatser.\n\nKontakta administratören om du vill veta mer.\n\nDu är också ansluten till ett VPN-nätverk som kan övervaka dina privata nätverksaktiviteter"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan bevaka aktiviteten på nätverket, inklusive e-post, appar och webbplatser.\n\nKontakta administratören för mer information.\n\nDu är även ansluten till ett VPN-nätverk som kan bevaka aktiviteten på nätverket."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g> som kan bevaka aktivitet på nätverket, inklusive e-post, appar och webbplatser."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g> som kan bevaka din privata aktivitet på nätverket, inklusive e-post, appar och webbplatser."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nKontakta administratören för mer information."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nDu är även ansluten till <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan hantera privat aktivitet på nätverket."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Enheten hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan bevaka och hantera inställningar, företagsåtkomst, appar, data som är kopplad till enheten och enhetens platsuppgifter.\n\nDu är ansluten till <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan övervaka aktivitet på nätverket, inklusive e-post. appar och webbplatser .\n\nKontakta administratören för mer information."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheten förblir låst tills du låser upp den manuellt"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Få aviseringar snabbare"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Visa dem innan du låser upp"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Visa alla"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Dölj alla"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Sluta nu"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skärmen har fästs"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Detta visar skärmen tills du lossar den. Tryck länge på bakåtknappen och Översikt samtidigt om du vill lossa skärmen."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Detta visar skärmen tills du lossar den. Tryck länge på Översikt om du vill lossa skärmen."</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index fbb882f..7ee5705 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Tafuta"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Simu"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Fungua"</string>
     <string name="unlock_label" msgid="8779712358041029439">"fungua"</string>
     <string name="phone_label" msgid="2320074140205331708">"fungua simu"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"fungua kamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Chagua muundo mpya wa kazi"</string>
     <string name="cancel" msgid="6442560571259935130">"Ghairi"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Pau mbili za WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Pau tatu za WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Ishara ya WiMAX imejaa."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethaneti imeondolewa."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethaneti imeunganishwa."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Hakuna mtandao"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Haijaunganishwa."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Vipima mtandao sufuri."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> imeondolewa."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Programu za hivi majuzi zimeondolewa."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Inaanzisha <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Arifa imetupwa."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Kivuli cha arifa."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Mipangilio ya haraka."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Skrini iliyofungwa."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Mipangilio"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Muhtasari."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Thibitisha"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Funga"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Mtumiaji <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi imezimwa."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Hali ya ndegeni imezimwa."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Hali ya ndegeni imewashwa."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Kipengee cha usinisumbue kimewashwa, kipaumbele pekee."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Kipengee cha usinisumbue kimewashwa, hakuna kukatizwa."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Usinisumbue, kimya kabisa."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Kipengee cha usinisumbue kimewashwa, kengele pekee."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Kipengee cha usinisumbue kimezimwa."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Kipengee cha usinisumbue kimezimwa."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Usinisumbue"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Kipaumbele tu"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Kengele pekee"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Hakuna kukatizwa"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Kimya kabisa"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (Vifaa <xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Imezimwa"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Tafuta"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Sogeza juu kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Sogeza kushoto kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Hakuna kukatizwa. Hata kama ni kengele."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Hutasumbuliwa na sauti na mitetemo, isipokuwa kengele, vikumbusho, matukio na wapigaji simu utakaobainisha."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Hutasumbuliwa na sauti na mitetemo, isipokuwa kengele, vikumbusho, matukio na wapigaji simu utakaobainisha."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Badilisha kukufaa"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Hakuna kukatizwa"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Mambo yenye kipaumbele pekee yakatize"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Kengele pekee"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Kengele yako inayofuata itakuwa saa <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Kengele yako inayofuata itakuwa <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Hutasikia kengele yako ifikapo <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Hatua hii huzuia sauti na mitetemo YOTE, ikiwa na pamoja na inayotoka kwenye kengele, muziki, video na michezo. Bado utaweza kupiga simu."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>+"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Arifa zisizo za dharura sana ziko hapo chini"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Gusa tena ili ufungue"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Telezesha kidole ili ufungue"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Telezesha kidole kulia ili ufikie simu"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Telezesha kidole kushoto ili ufikie kamera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Hakuna kukatizwa"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Kimya kabisa"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Kipaumbele tu"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Kengele pekee"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Zote"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Hakuna\nukatizaji"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Kimya\nkabisa"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Kipaumbele\npekee"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Kengele\npekee"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Inachaji (Imebakisha <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ijae)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Zima VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Ondoa VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa kampuni, programu, data inayohusiana na kifaa chako, na maelezo ya mahali kilipo kifaa chako. Kwa maelezo zaidi, wasiliana na msimamizi wako."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMsimamizi wako anaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti salama.\n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Kifaa chako kinasimamiwa na:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nWasifu wako wa kazini unasimamiwa na:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nMsimamizi wako anaweza kufuatilia shughuli za kifaa na mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti salama. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Uliruhusu programu isanidi muunganisho wa VPN.\n\nProgramu hii inaweza kufuatilia shughuli za kifaa na mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti salama."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Uliruhusu programu isanidi muunganisho wa VPN.\n\nProgramu hii inaweza kufuatilia shughuli za kifaa na mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa kampuni, programu, data inayohusiana na kifaa chako, na maelezo ya mahali kilipo kifaa chako.\n\nUmeuganishwa kwenye VPN, ambayo inaweza kufuatilia shughuli ya mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti.\n\n Kwa maelezo zaidi, wasiliana na msimamizi wako."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMsimamizi wako ana uwezo wa kufuatilia shughuli ya mtandao wako ikiwa ni pamoja na barua pepe, programu, na tovuti salama. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako.\n\n Umeunganishwa pia kwenye VPN, ambayo inaweza kufuatilia shughuli ya mtandao wako."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nWasifu wako wa kazini unasimamiwa na:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nMsimamizi wako ana uwezo wa kufuatilia shughuli ya mtandao wako ikiwa ni pamoja na barua pepe, programu, na tovuti salama.\n\nKwa maelezo zaidi, wasiliana na msimamizi wako.\n\nUmeunganishwa pia kwenye VPN, ambayo inaweza kufuatilia shughuli ya mtandao wako."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. \n\nMsimamizi wako ana uwezo wa kufuatilia shughuli ya mtandao wako ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako.\n\nUmeunganishwa pia kwenye VPN, ambayo inaweza kufuatilia shughuli za mtandao wako."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa kwa <xliff:g id="APPLICATION">%2$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti.\n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa na <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ambayo inaweza kufuatilia mtandao wako wa kazini, ikiwa ni pamoja na barua pepe, programu na tovuti. \n\n Wewe pia umeunganishwa na <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako kibinafsi."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. \n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa kampuni, programu, data inayohusiana na kifaa chako, na maelezo ya mahali kilipo kifaa chako. \n\n Umeuganishwa kwenye <xliff:g id="APPLICATION">%2$s</xliff:g>, ambayo inaweza kufuatilia shughuli ya mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\n Kwa maelezo zaidi, wasiliana na msimamizi wako."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Kifaa kitaendelea kuwa katika hali ya kufungwa hadi utakapokifungua mwenyewe"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Pata arifa kwa haraka"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Zitazame kabla hujafungua"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Angalia zote"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ficha zote"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Komesha sasa"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skrini imebandikwa"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Hii itaendelea kuonyesha hadi ubandue. Gusa na ushikilie Nyuma na Muhtasari kwa wakati mmoja ili ubandue."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Hii itaendelea kuonyesha hadi uibandue. Gusa na ushikilie Muhtasari ili ubandue."</string>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml
index 918505a..360e675 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta-rIN/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"தேடு"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"கேமரா"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ஃபோன்"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"திற"</string>
     <string name="unlock_label" msgid="8779712358041029439">"திற"</string>
     <string name="phone_label" msgid="2320074140205331708">"ஃபோனைத் திற"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"கேமராவைத் திற"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"புதிய பணி தளவமைப்பைத் தேர்ந்தெடுக்கவும்"</string>
     <string name="cancel" msgid="6442560571259935130">"ரத்துசெய்"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX இரண்டு கோடுகள்."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX மூன்று கோடுகள்."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX சிக்னல் முழுமையாக உள்ளது."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ஈத்தர்நெட் துண்டிக்கப்பட்டது."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ஈத்தர்நெட் இணைக்கப்பட்டது."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"சிக்னல் இல்லை."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"இணைக்கப்படவில்லை."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"கோடுகள் இல்லை."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> விலக்கப்பட்டது."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"எல்லா சமீபத்திய பயன்பாடுகளும் விலக்கப்பட்டன."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ஐத் தொடங்குகிறது."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"அறிவிப்பு நிராகரிக்கப்பட்டது."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"அறிவிப்பு விவரம்."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"உடனடி அமைப்பு."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"பூட்டுத் திரை."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"அமைப்பு"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"மேலோட்டப் பார்வை."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"உறுதிசெய்க"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"மூடு"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"பயனர் <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"வைஃபை முடக்கப்பட்டது."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"விமானப் பயன்முறை முடக்கப்பட்டது."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"விமானப் பயன்முறை இயக்கப்பட்டது."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, முதன்மை மட்டும்."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, குறுக்கீடுகள் இல்லை."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, அறிவிப்புகள் வேண்டாம்."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, அலாரங்கள் மட்டும்."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"தொந்தரவு செய்ய வேண்டாம் என்பது முடக்கப்பட்டது."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"தொந்தரவு செய்ய வேண்டாம் என்பது முடக்கப்பட்டது."</string>
@@ -235,7 +242,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="7309935569360609114">"குறுக்கீடுகள் வேண்டாம்"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"தேடு"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> க்கு மேலாக இழுக்கவும்."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> க்கு இடதுபக்கமாக இழுக்கவும்."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"அறிவிப்பும் இல்லை. அலாரங்களும் இல்லை."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"அலாரங்கள், நினைவூட்டல்கள், நிகழ்வுகள், குறிப்பிட்ட அழைப்புகள் தவிர, ஒலிகளினாலும் அதிர்வினாலும் தொந்தரவு இருக்காது."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"அலாரங்கள், நினைவூட்டல்கள், நிகழ்வுகள், குறிப்பிட்ட அழைப்புகள் தவிர, ஒலிகளினாலும் அதிர்வினாலும் தொந்தரவு இருக்காது."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"தனிப்பயனாக்கு"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"தெரிவிக்காதே"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"முக்கிய அறிவிப்புகள் மட்டும்"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"அலாரங்கள் மட்டும்"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"அடுத்த அலாரம் - <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"அடுத்த அலாரம் - <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> க்கு அலாரத்தைக் கேட்க மாட்டீர்கள்"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"இது அலாரங்கள், இசை, வீடியோக்கள் மற்றும் கேம்கள் உட்பட எல்லா சத்தங்களையும் அதிர்வுகளையும் தடுக்கும். இருப்பினும் நீங்கள் அழைப்புகளைச் செய்யலாம்."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"அவசர நிலைக் குறைவான அறிவிப்புகள் கீழே உள்ளன"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"திறக்க, மீண்டும் தட்டவும்"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"திறக்க, மேலே ஸ்வைப் செய்யவும்"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ஃபோனுக்கு, வலப்புறம் ஸ்வைப் செய்க"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"கேமராவிற்கு இடப்புறம் ஸ்வைப் செய்க"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"குறுக்கீடுகள் வேண்டாம்"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"எல்லாம்"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"குறுக்கீடுகள்\nவேண்டாம்"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"சார்ஜாகிறது (முழு சார்ஜிற்கு <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ஆகும்)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPNஐ முடக்கு"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPNஐத் துண்டி"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"சாதனத்தை நிர்வகிப்பவர்: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு மற்றும் சாதனத்தின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும். கூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"உங்கள் பணி சுயவிவரத்தை நிர்வகிப்பவர்: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் பாதுகாப்பான இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை நிர்வாகியால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"சாதனத்தை நிர்வகிப்பவர்:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nஉங்கள் பணி சுயவிவரத்தை நிர்வகிப்பவர்:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் பாதுகாப்பான இணையதளங்கள் உட்பட உங்கள் சாதனத்தையும், நெட்வொர்க் செயல்பாட்டையும் நிர்வாகியால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"VPN இணைப்பை அமைக்க, பயன்பாட்டிற்கு அனுமதி வழங்கியுள்ளீர்கள்.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் பாதுகாப்பான இணையதளங்கள் உட்பட, உங்கள் சாதனத்தையும் நெட்வொர்க் செயல்பாட்டையும் இந்தப் பயன்பாட்டினால் கண்காணிக்க முடியும்."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"VPN இணைப்பை அமைக்க, பயன்பாட்டிற்கு அனுமதி வழங்கியுள்ளீர்கள்.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட, உங்கள் சாதனத்தையும் நெட்வொர்க் செயல்பாட்டையும் இந்தப் பயன்பாட்டினால் கண்காணிக்க முடியும்."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"சாதனத்தை நிர்வகிப்பவர்: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு மற்றும் சாதனத்தின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nVPN இல் இணைக்கப்பட்டுள்ளதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் பாதுகாப்பான இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"உங்கள் பணி சுயவிவரத்தை நிர்வகிப்பவர்: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் பாதுகாப்பான இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை நிர்வாகியால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்.\n\nஉங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய VPN இலும் இணைக்கப்பட்டுள்ளீர்கள்."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"சாதனத்தை நிர்வகிப்பவர்: <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nஉங்கள் பணி சுயவிவரத்தை நிர்வகிப்பவர்: \n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் பாதுகாப்பான இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை நிர்வாகியால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்.\n\nஉங்கள் தனிப்பட்ட நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய VPN இலும் இணைக்கப்பட்டுள்ளீர்கள்"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"உங்கள் பணி சுயவிவரத்தை நிர்வகிப்பது: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை நிர்வாகியால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்.\n\nஉங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய VPN இலும் இணைக்கப்பட்டுள்ளீர்கள்."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"<xliff:g id="APPLICATION">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"<xliff:g id="APPLICATION">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் தனிப்பட்ட நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"உங்கள் பணி சுயவிவரத்தை நிர்வகிப்பது: <xliff:g id="ORGANIZATION">%1$s</xliff:g>. <xliff:g id="APPLICATION">%2$s</xliff:g> உடன் இணைக்கப்பட்டதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் பணியிட நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"உங்கள் பணி சுயவிவரத்தை நிர்வகிப்பது: <xliff:g id="ORGANIZATION">%1$s</xliff:g>. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> உடன் இணைக்கப்பட்டதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் பணியிட நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்.\n\nமேலும் <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளதால், உங்கள் தனிப்பட்ட நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"சாதனத்தை நிர்வகிப்பது: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு மற்றும் சாதனத்தின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\n<xliff:g id="APPLICATION">%2$s</xliff:g> உடன் இணைக்கப்பட்டதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"நீங்கள் கைமுறையாகத் திறக்கும் வரை, சாதனம் பூட்டப்பட்டிருக்கும்"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"விரைவாக அறிவிப்புகளைப் பெறுதல்"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"திறக்கும் முன் அவற்றைப் பார்க்கவும்"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"எல்லாம் காட்டு"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"எல்லாம் மறை"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"இப்போது முடி"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"திரை பொருத்தப்பட்டது"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"பொருத்தியதை விலக்கும்வரை இதைக் காட்சியில் வைக்கும். விலக்க, பின் மற்றும் மேலோட்டப் பார்வையை ஒரே நேரத்தில் தொட்டுப் பிடிக்கவும்."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"பொருத்தியதை விலக்கும்வரை இதைக் காட்சியில் வைக்கும். விலக்க, மேலோட்டப் பார்வையைத் தொட்டுப் பிடிக்கவும்."</string>
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml
index d472c8e..8b64b3a 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te-rIN/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"శోధించు"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"కెమెరా"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ఫోన్"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"అన్‌లాక్ చేయి"</string>
     <string name="unlock_label" msgid="8779712358041029439">"అన్‌లాక్ చేయి"</string>
     <string name="phone_label" msgid="2320074140205331708">"ఫోన్‌ను తెరువు"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"కెమెరాను తెరువు"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"కొత్త విధి లేఅవుట్‌ను ఎంచుకోండి"</string>
     <string name="cancel" msgid="6442560571259935130">"రద్దు చేయండి"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX రెండు బార్‌లు కలిగి ఉంది."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX మూడు బార్‌లు కలిగి ఉంది."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX సిగ్నల్ పూర్తిగా ఉంది."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ఈథర్‌నెట్ డిస్‌కనెక్ట్ చేయబడింది."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ఈథర్‌నెట్ కనెక్ట్ చేయబడింది."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"సిగ్నల్ లేదు."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"కనెక్ట్ చేయబడలేదు."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"సున్నా బార్‌లు."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> తీసివేయబడింది."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"అన్ని ఇటీవలి అనువర్తనాలు తీసివేయబడ్డాయి."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభిస్తోంది."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"నోటిఫికేషన్ తీసివేయబడింది."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"నోటిఫికేషన్ షేడ్."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"శీఘ్ర సెట్టింగ్‌లు."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"లాక్ స్క్రీన్."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"సెట్టింగ్‌లు"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"అవలోకనం."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"నిర్ధారిస్తుంది"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"మూసివేస్తుంది"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"వినియోగదారు <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"వైఫై ఆఫ్ చేయబడింది."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ఎయిర్‌ప్లైన్ మోడ్ ఆఫ్ చేయబడింది."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ఎయిర్‌ప్లైన్ మోడ్ ఆన్ చేయబడింది."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"అంతరాయం కలిగించవద్దు ఆన్‌లో ఉంది, ప్రాధాన్యత మాత్రమే."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"అంతరాయం కలిగించవద్దు ఆన్‌లో ఉంది, అంతరాయాలు ఉండవు."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"అంతరాయం కలిగించవద్దు ఆన్‌లో ఉంది, మొత్తం నిశ్శబ్దం."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"అంతరాయం కలిగించవద్దు ఆన్‌లో ఉంది, అలారాలు మాత్రమే."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"అంతరాయం కలిగించవద్దు ఆఫ్‌లో ఉంది."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"అంతరాయం కలిగించవద్దు ఆఫ్ చేయబడింది."</string>
@@ -235,7 +242,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="7309935569360609114">"అంతరాయాలు ఉండవు"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"శోధించండి"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> కోసం పైకి స్లైడ్ చేయండి."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> కోసం ఎడమవైపుకు స్లైడ్ చేయండి."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"అంతరాయాలు లేవు. అలారాలు కూడా లేవు."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"మీరు పేర్కొనే అలారాలు, రిమైండర్‌లు, ఈవెంట్‌లు మరియు కాలర్‌ల నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్‌లతో మీకు అంతరాయం కలగదు."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"మీరు అలారాలు, రిమైండర్‌లు, ఈవెంట్‌లు మరియు పేర్కొనే కాలర్‌ల నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్‌లతో మీకు అంతరాయం కలగదు."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"అనుకూలీకరించు"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"అంతరాయాలు లేకుండా"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"ప్రాధాన్య అంతరాయాలు మాత్రమే"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"అలారాలు మాత్రమే"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"మీ తదుపరి అలారం <xliff:g id="ALARM_TIME">%s</xliff:g>కి ఉంది"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"మీ తదుపరి అలారం <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"మీరు <xliff:g id="ALARM_TIME">%s</xliff:g>కి సెట్ చేసిన అలారం మీకు వినిపించదు"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"ఇది అలారాలు, సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా అన్ని ధ్వనులు మరియు వైబ్రేషన్‌లను బ్లాక్ చేస్తుంది. మీరు ఇప్పటికీ ఫోన్ కాల్‌లు చేయగలుగుతారు."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"తక్కువ అత్యవసర నోటిఫికేషన్‌లు దిగువన"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"తెరవడానికి మళ్లీ తాకండి"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"అన్‌లాక్ చేయడానికి ఎగువకు స్వైప్ చేయండి"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"ఫోన్ కోసం కుడివైపుకి స్వైప్ చేయండి"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"కెమెరా కోసం ఎడమవైపుకి స్వైప్ చేయండి"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"అంతరాయాలు ఉండవు"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"అన్నిటికీ"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"అంతరాయాలు\nఉండకూడదు"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"ఛార్జ్ అవుతోంది (పూర్తిగా నిండటానికి <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPNని నిలిపివేయి"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPNను డిస్‌కనెక్ట్ చేయి"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"మీ పరికరం <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకుడు సెట్టింగ్‌లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, మీ పరికరంతో అనుబంధించబడిన డేటా మరియు మీ పరికరం స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు. మరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"మీ కార్యాలయ ప్రొఫైల్ <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకుడు ఇమెయిల్‌లు, అనువర్తనాలు మరియు సురక్షిత వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"మీ పరికరం ఈ సంస్థ నిర్వహణలో ఉంది:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nమీ కార్యాలయ ప్రొఫైల్ ఈ సంస్థ నిర్వహణలో ఉంది:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nమీ నిర్వాహకుడు ఇమెయిల్‌లు, అనువర్తనాలు మరియు సురక్షిత వెబ్‌సైట్‌లతో సహా మీ పరికర మరియు నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"మీరు VPN కనెక్షన్‌ను సెటప్ చేయడానికి అనువర్తనానికి అనుమతి ఇచ్చారు.\n\nఈ అనువర్తనం ఇమెయిల్‌లు, అనువర్తనాలు మరియు సురక్షిత వెబ్‌సైట్‌లతో సహా మీ పరికరం మరియు నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక అనువర్తనానికి అనుమతి ఇచ్చారు.\n\nఈ అనువర్తనం ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ పరికరం మరియు నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"మీ పరికరం <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకుడు సెట్టింగ్‌లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, మీ పరికరంతో అనుబంధించబడిన డేటా మరియు పరికరం స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమీరు VPNకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"మీ కార్యాలయ ప్రొఫైల్ <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకుడు ఇమెయిల్‌లు, అనువర్తనాలు మరియు సురక్షిత వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ చేయబడ్డారు, ఇది మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"మీ పరికరం <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> నిర్వహణలో ఉంది.\nమీ కార్యాలయ ప్రొఫైల్ ఈ సంస్థ నిర్వహణలో ఉంది:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nమీ నిర్వాహకుడు ఇమెయిల్‌లు, అనువర్తనాలు మరియు సురక్షిత వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ చేయబడ్డారు, ఇది మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"మీ కార్యాలయ ప్రొఫైల్‌ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది.\n\nమీ నిర్వాహకుడు ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ చేయబడ్డారు, ఇది మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"మీరు <xliff:g id="APPLICATION">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"మీరు <xliff:g id="APPLICATION">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌‍సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"మీ కార్యాలయ ప్రొఫైల్‍‍ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది. అలాగే, మీ కార్యాలయ ప్రొఫైల్ <xliff:g id="APPLICATION">%2$s</xliff:g>కి కనెక్ట్ చేయబడింది, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"మీ కార్యాలయ ప్రొఫైల్‌ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది. అలాగే, మీ కార్యాలయ ప్రొఫైల్ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>కి కనెక్ట్ చేయబడింది, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమీరు <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>కి కూడా కనెక్ట్ అయ్యారు, ఇది మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"మీ పరికరాన్ని <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది.\n\nమీ నిర్వాహకుడు సెట్టింగ్‌లను, కార్పొరేట్ ప్రాప్యతను, అనువర్తనాలను, మీ పరికరంతో అనుబంధించిన డేటాను మరియు మీ పరికర స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమీరు <xliff:g id="APPLICATION">%2$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"మీరు మాన్యువల్‌గా అన్‌లాక్ చేస్తే మినహా పరికరం లాక్ చేయబడి ఉంటుంది"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"నోటిఫికేషన్‌లను వేగంగా పొందండి"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"వీటిని మీరు అన్‌లాక్ చేయకముందే చూడండి"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"అన్నీ చూడండి"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"అన్నీ దాచిపెట్టు"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"ఇప్పుడే ముగించు"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"స్క్రీన్ పిన్ చేయబడింది"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"ఇది మీరు అన్‌పిన్ చేసే వరకు దీన్ని వీక్షణలో ఉంచుతుంది. అన్‌పిన్ చేయడానికి వెనుకకు మరియు స్థూలదృష్టిని ఒకేసారి తాకి, ఉంచండి."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"ఇది మీరు అన్‌పిన్ చేసే వరకు దీన్ని వీక్షణలో ఉంచుతుంది. అన్‌పిన్ చేయడానికి స్థూలదృష్టిని తాకి, ఉంచండి."</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 7321e68..b1a6954 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"ค้นหา"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"กล้องถ่ายรูป"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"โทรศัพท์"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"ปลดล็อก"</string>
     <string name="unlock_label" msgid="8779712358041029439">"ปลดล็อก"</string>
     <string name="phone_label" msgid="2320074140205331708">"เปิดโทรศัพท์"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"เปิดกล้อง"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"เลือกรูปแบบงานใหม่"</string>
     <string name="cancel" msgid="6442560571259935130">"ยกเลิก"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"สัญญาณ WiMAX สองขีด"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"สัญญาณ WiMAX สามขีด"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"สัญญาณ WiMAX เต็ม"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ยกเลิกการเชื่อมต่ออีเทอร์เน็ตแล้ว"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"เชื่อมต่ออีเทอร์เน็ตแล้ว"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"ไม่มีสัญญาณ"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"ไม่ได้เชื่อมต่อ"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"ศูนย์ขีด"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ถูกลบไปแล้ว"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ปิดแอปพลิเคชันล่าสุดทั้งหมดแล้ว"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"กำลังเริ่มต้น <xliff:g id="APP">%s</xliff:g>"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"ปิดการแจ้งเตือนแล้ว"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"หน้าต่างแจ้งเตือน"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"การตั้งค่าด่วน"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ล็อกหน้าจอ"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"การตั้งค่า"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ภาพรวม"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"ยืนยัน"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"ปิด"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ผู้ใช้ <xliff:g id="USER">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"ปิด Wi-Fi แล้ว"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ปิดโหมดบนเครื่องบินแล้ว"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"เปิดโหมดบนเครื่องบินแล้ว"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"การห้ามรบกวนเปิดอยู่ เฉพาะเรื่องสำคัญเท่านั้น"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"การห้ามรบกวนเปิดอยู่ ห้ามรบกวน"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"เปิดการห้ามรบกวนอยู่ ปิดเสียงทั้งหมด"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"เปิดการห้ามรบกวนอยู่ ปลุกได้เท่านั้น"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"การห้ามรบกวนปิดอยู่"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ปิดการห้ามรบกวนแล้ว"</string>
@@ -235,7 +242,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="7309935569360609114">"ไม่มีการรบกวน"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"ค้นหา"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"เลื่อนไปทางซ้ายเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"ไม่มีการรบกวน แม้แต่นาฬิกาปลุก"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นจากการปลุก ช่วยเตือน กิจกรรมและผู้โทรที่คุณระบุ"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นการปลุก การเตือนความจำ กิจกรรม และผู้โทรที่คุณระบุ"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"กำหนดค่า"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"ไม่มีการรบกวน"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"เฉพาะเรื่องสำคัญเท่านั้น"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"เฉพาะปลุกเท่านั้น"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"การปลุกครั้งถัดไปของคุณคือเวลา <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"การปลุกครั้งถัดไปของคุณคือ <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"คุณจะไม่ได้ยินเสียงปลุกในเวลา <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"การตั้งค่านี้จะบล็อกเสียงและการสั่นทั้งหมด ซึ่งรวมถึงเสียงปลุก เพลง วิดีโอ และเกม คุณจะยังสามารถโทรออกได้อยู่"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"การแจ้งเตือนที่เร่งด่วนน้อยด้านล่าง"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"แตะอีกครั้งเพื่อเปิด"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"กวาดขึ้นเพื่อปลดล็อก"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"กวาดไปทางขวาเพื่อใช้โทรศัพท์"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"กวาดไปทางซ้ายเพื่อใช้กล้องถ่ายรูป"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"ไม่มีการรบกวน"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"ทั้งหมด"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"ไม่มี\nการรบกวน"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"กำลังชาร์จ (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> เต็ม)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"ปิดใช้ VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"ยกเลิกการเชื่อมต่อ VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ของคุณ และข้อมูลตำแหน่งของอุปกรณ์ สำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"โปรไฟล์งานของคุณได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบกิจกรรมเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ที่ปลอดภัย\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"อุปกรณ์ของคุณได้รับการจัดการโดย:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nโปรไฟล์งานของคุณได้รับการจัดการโดย:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบอุปกรณ์และกิจกรรมเครือข่าย รวมถึงอีเมล แอป และเว็บไซต์ที่ปลอดภัย\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"คุณให้สิทธิ์แอปในการตั้งค่าการเชื่อมต่อ VPN\n\nแอปนี้สามารถตรวจสอบอุปกรณ์และกิจกรรมเครือข่าย รวมถึงอีเมล แอป และเว็บไซต์ที่ปลอดภัย"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"คุณได้ให้สิทธิ์แอปในการตั้งค่าการเชื่อมต่อ VPN\n\nแอปนี้จะสามารถตรวจสอบอุปกรณ์และกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ของคุณ และข้อมูลตำแหน่งของอุปกรณ์\n\nคุณยังได้เชื่อมต่อกับ VPN ซึ่งสามารถตรวจสอบกิจกรรมเครือข่ายของคุณ รวมถึง อีเมล แอป และเว็บไซต์\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"โปรไฟล์งานของคุณได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบกิจกรรมเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ที่ปลอดภัย\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ\n\nคุณยังได้เชื่อมต่อกับ VPN ซึ่งสามารถตรวจสอบกิจกรรมเครือข่ายของคุณได้"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nโปรไฟล์งานของคุณได้รับการจัดการโดย:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nผู้ดูแลระบบสามารถตรวจสอบกิจกรรมเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ที่ปลอดภัย\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ\n\nคุณยังได้เชื่อมต่อกับ VPN ซึ่งสามารถตรวจสอบกิจกรรมเครือข่ายส่วนตัวของคุณได้"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบของคุณสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ\n\nนอกจากนี้คุณยังมีการเชื่อมต่อ VPN ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"คุณเชื่อมต่อกับ <xliff:g id="APPLICATION">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึง อีเมล แอป และเว็บไซต์ได้"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"คุณเชื่อมต่อกับ <xliff:g id="APPLICATION">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายส่วนบุคคลรวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g> โดยมีการเชื่อมต่อกับ <xliff:g id="APPLICATION">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g> โดยมีการเชื่อมต่อกับ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้\n\nนอกจากนี้ คุณยังมีการเชื่อมต่อกับ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายส่วนบุคคลได้"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"อุปกรณ์ได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูและรบบของคุณสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป ข้อมูลที่เชื่อมโยงกับอุปกรณ์ และข้อมูลตำแหน่งของอุปกรณ์ได้\n\nคุณมีการเชื่อมต่อกับ <xliff:g id="APPLICATION">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"อุปกรณ์จะล็อกจนกว่าคุณจะปลดล็อกด้วยตนเอง"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"รับการแจ้งเตือนเร็วขึ้น"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"ดูก่อนปลดล็อก"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"ดูทั้งหมด"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"ซ่อนทั้งหมด"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g> <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"ไม่ใช้แล้ว"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"ตรึงหน้าจอแล้ว"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"การดำเนินการนี้จะเปิดหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกตรึง แตะ \"กลับ\" และ \"ภาพรวม\" พร้อมกันค้างไว้เพื่อเลิกตรึง"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"การดำเนินการนี้จะเปิดหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกตรึง แตะ \"ภาพรวม\" ค้างไว้เพื่อเลิกตรึง"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index d101708..7c8530c 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Hanapin"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telepono"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"I-unlock"</string>
     <string name="unlock_label" msgid="8779712358041029439">"i-unlock"</string>
     <string name="phone_label" msgid="2320074140205331708">"buksan ang telepono"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"buksan ang camera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Pumili ng bagong layout ng gawain"</string>
     <string name="cancel" msgid="6442560571259935130">"Kanselahin"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX na dalawang bar."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX na tatlong bar."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Puno ang signal ng WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Nadiskonekta ang Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Nakakonekta ang Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Walang signal."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Hindi nakakonekta."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Walang mga bar."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Hindi pinansin ang <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Na-dismiss ang lahat ng kamakailang application."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Sinisimulan ang <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Na-dismiss ang notification."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Mga mabilisang setting."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Mga Setting"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Kumpirmahin"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Isara"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"User na si <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Na-off ang wifi."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Na-off ang Airplane mode."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Na-on ang Airplane mode."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Naka-on ang huwag istorbohin, priyoridad lang."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Naka-on ang huwag istorbohin, walang mga paggambala."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Naka-on ang huwag gambalain, ganap na katahimikan."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Naka-on ang huwag istorbohin, mga alarm lang."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Naka-off ang huwag istorbohin."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Na-off na ang huwag istorbohin"</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Huwag istorbohin"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priyoridad lang"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Mga alarm lang"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Walang mga paggambala"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Ganap na katahimikan"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> (na) Device)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Naka-off ang Bluetooth"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Maghanap"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Mag-slide pataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Mag-slide pakaliwa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Walang mga pagkaantala. Kahit mga alarma."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Hindi ka maaabala ng mga tunog at vibration, maliban sa mga alarm, paalala, kaganapan at tumatawag na iyong tinukoy."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Hindi ka magagambala ng mga tunog at pag-vibrate, maliban mula sa mga alarm, paalala, kaganapan at mga tinukoy mong tumatawag."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"I-customize"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Walang mga paggambala"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Mga may priyoridad na paggambala lang"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Mga alarm lang"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Ang susunod mong alarma ay sa <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Ang susunod mong alarma ay <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Hindi mo maririnig ang alarma mo ng <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Bina-block nito ang LAHAT ng tunog at pag-vibrate, kabilang ang mula sa mga alarm, musika, video at laro. Magagawa mo pa ring makatawag."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Nasa ibaba ang mga notification na hindi masyadong mahalaga"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Pinduting muli upang buksan"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Mag-swipe pataas upang i-unlock"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Mag-swipe pakanan para sa telepono"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Mag-swipe pakaliwa para sa camera"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Walang pagkaantala"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Ganap na katahimikan"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Priyoridad lang"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Mga alarm lang"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Lahat"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Walang\npagkaantala"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Ganap na\nkatahimikan"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priyoridad\nlang"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Mga alarm\nlang"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nagtsa-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang mapuno)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"I-disable ang VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Idiskonekta ang VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMagagawa ng iyong administrator na subaybayan at pamahalaan ang iyong mga setting, corporate na access, mga app, data na nauugnay sa iyong device at ang impormasyon ng lokasyon ng iyong device. Para sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Pinapamahalaan ang iyong profile ng:<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMay kakayahan ang iyong administrator na subaybayan ang iyong aktibidad sa network kasama ang mga email, app at secure na website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Pinapamahalaan ang iyong device ng:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nPinapamahalaan ang iyong profile sa trabaho ng:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nMagagawa ng iyong administrator na subaybayan ang iyong aktibidad sa device at network, kasama ang mga email, app at secure na website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Ibinigyan mo ng pahintulot ang isang app na mag-set up ng VPN na koneksyon.\n\nMagagawa ng app na ito na subaybayan ang iyong aktibidad sa device at network, kasama ang mga email, app at secure na website."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Nagbigay ka ng pahitulot sa app upang mag-set up ng VPN na koneksyon.\n\nMaaaring subaybayan ng app na ito ang iyong aktibidad sa device at network, kabilang ang mga email, app at website."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMagagawa ng iyong administrator na subaybayan at pamahalaan ang iyong mga setting, corporate na access, mga app, data na nauugnay sa iyong device at ang impormasyon ng lokasyon ng iyong device.\n\nNakakonekta ka sa isang VPN, na maaaring subaybayan ang iyong aktibidad sa network, kasama ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMagagawa ng iyong administrator na subaybayan ang iyong aktibidad sa network kasama ang mga email, app at secure na website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator.\n\nNakakonekta ka rin sa isang VPN, na maaaring subaybayan ang iyong aktibidad sa personal na network."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nPinapamahalaan ang iyong profile sa trabaho ng:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nMay kakayahan ang iyong administrator na subaybayan ang iyong aktibidad sa network kasama ang mga email, app at secure na website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator.\n\nNakakonekta ka rin sa isang VPN, na maaaring subaybayan ang iyong aktibidad sa personal na network"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Pinapamahalaan ang iyong profile ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMay kakayahan ang iyong administrator sa pagsubaybay ng iyong aktibidad sa network kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator.\n\nNakakonekta ka rin sa isang VPN, na maaaring sumubaybay sa iyong aktibidad sa network."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network kabilang ang mga email, app at website."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa iyong personal na aktibidad sa network, kabilang ang mga email, app at website."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Pinapamahalaan ang iyong profile sa trabaho ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Pinapamahalaan ang iyong profile sa trabaho ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nNakakonekta ka rin sa <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, na maaaring sumubaybay sa iyong personal na aktibidad sa network."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMaaaring subaybayan at pamahalaan ng iyong administrator ang mga setting, corporate na access, app, data na nauugnay sa iyong device at ang impormasyon ng lokasyon ng iyong device.\n\nNakakonekta ka sa <xliff:g id="APPLICATION">%2$s</xliff:g>, na maaaring subaybayan ang iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Mananatiling naka-lock ang device hanggang sa manu-mano mong i-unlock"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Kunin ang notification nang mas mabilis"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Tingnan ang mga ito bago ka mag-unlock"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Tingnan lahat"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Itago lahat"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Tapusin ngayon"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Naka-pin ang screen"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Pinapanatili nitong nasa view ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik at Pangkalahatang-ideya nang sabay upang mag-unpin."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Pinapanatili nitong nasa view ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Pangkalahatang-ideya upang mag-unpin."</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index da54de1..0ae2b11 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Ara"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Kilidi aç"</string>
     <string name="unlock_label" msgid="8779712358041029439">"kilidi aç"</string>
     <string name="phone_label" msgid="2320074140205331708">"telefonu aç"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"kamerayı aç"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Yeni görev düzenini seçin"</string>
     <string name="cancel" msgid="6442560571259935130">"İptal"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX iki çubuk."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX üç çubuk."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX sinyali tam."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet bağlantısı kesildi."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet bağlandı."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Sinyal yok."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Bağlanmadı."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Sıfır çubuk."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> kaldırıldı."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Tüm son uygulamalar kapatıldı."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> başlatılıyor."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Bildirim kapatıldı."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bildirim gölgesi."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Hızlı ayarlar."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Kilit ekranı"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Ayarlar"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Genel Bakış."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Onayla"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Kapat"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Kullanıcı: <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Kablosuz kapatıldı."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Uçak modu kapatıldı."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Uçak modu açıldı."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Rahatsız etmeyin ayarı açık, yalnızca öncelikliler."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Rahatsız etmeyin ayarı açık, kesme yok."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Rahatsız etmeyin ayarı açık, tamamen sessiz."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Rahatsız etmeyin ayarı açık, yalnızca alarmlar."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Rahatsız etmeyin\" ayarı kapalı."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Rahatsız etmeyin\" ayarı kapalı."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Rahatsız etmeyin"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Yalnızca öncelikliler"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Yalnızca alarmlar"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Kesme yok"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Tamamen sessiz"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Cihaz)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Kapalı"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Ara"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı kaydırın."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sola kaydırın."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Kesinti yok. Uyarı bile yok."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Belirttiğiniz alarmlar, hatırlatıcılar, etkinlikler ve arayanlar hariç olmak üzere, sesler ve titreşimlerle rahatsız edilmezsiniz."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Belirttiğiniz alarmlar, hatırlatıcılar, etkinlikler ve arayanlar hariç olmak üzere, sesler ve titreşimlerle rahatsız edilmeyeceksiniz."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Özelleştir"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Kesinti yok"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Sadece öncelikli kesintiler"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Yalnızca alarmlar"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Bir sonraki alarmın saati: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Bir sonraki alarmınız: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"<xliff:g id="ALARM_TIME">%s</xliff:g> olarak ayarlanan alarmı duymayacaksınız"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Bu seçenek TÜM sesleri ve titreşimleri engeller. Buna alarmlar, müzik, videolar ve oyunlar dahildir. Telefon aramaları yapmaya devam edebileceksiniz."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Daha az acil bildirimler aşağıdadır"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Açmak için tekrar dokunun"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Kilidi açmak için hızlıca yukarı kaydırın"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Telefon için sağa kaydırın"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Kamera için sola kaydırın"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Kesinti yok"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Tamamen sessiz"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Yalnızca öncelikli"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Yalnızca alarmlar"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Tümü"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Kesinti\nyok"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Tamamen\nsessiz"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Yalnızca\nöncelik"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Yalnızca\nalarmlar"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Şarj oluyor (tamamen dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN\'yi devre dışı bırak"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN bağlantısını kes"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; cihazınızla ilişkilendirilen ayarları, şirket erişimini, uygulamaları, verileri izleyebilir ve yönetebilir. Daha fazla bilgi için yöneticinize başvurun."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; e-postalar, uygulamalar ve güvenli web siteleri de dahil olmak üzere ağ etkinliğinizi izleyebilir.\n\nDaha fazla bilgi için yöneticinize başvurun."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Cihazınızı yöneten kuruluş:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nİş profilinizi yöneten kuruluş:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nYöneticiniz; e-postalar, uygulamalar ve güvenli web siteleri de dahil olmak üzere cihazınızı ve ağ etkinliğinizi izleyebilir.\n\nDaha fazla bilgi için yöneticinize başvurun."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Bir uygulamaya VPN bağlantısı kurma izni verdiniz.\n\nBu uygulama; e-postalar, uygulamalar ve güvenli web siteleri dahil olmak üzere ağ etkinliğinizi izleyebilir."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"VPN bağlantısı kurması için bir uygulamaya izin verdiniz.\n\nBu uygulama, cihazınızın yanı sıra e-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilir."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz cihazınızla ilişkilendirilen ayarları, şirket erişimini, uygulamaları, verileri ve cihazınızın konum bilgilerini izleyebilir ve yönetebilir.\n\nE-postalar, uygulamalar ve web siteleri de dahil olmak üzere ağ etkinliğinizi izleyebilen bir VPN\'ye bağlısınız.\n\nDaha fazla bilgi için lütfen yöneticinize başvurun."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; e-postalar, uygulamalar ve güvenli web siteleri de dahil olmak üzere ağ etkinliğinizi izleyebilir.\n\nDaha fazla bilgi için ağ yöneticinize başvurun.\n\nAyrıca, ağ etkinliğinizi izleyebilen bir VPN\'ye bağlısınız."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Cihazınız <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> tarafından yönetiliyor.\nİş profilinizi yöneten kuruluş:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nYöneticiniz; e-postalar, uygulamalar ve güvenli web siteleri de dahil olmak üzere ağ etkinliğinizi izleyebilir.\n\nDaha fazla bilgi için ağ yöneticinize başvurun.\n\nAyrıca, kişisel ağ etkinliğinizi izleyebilen bir VPN\'ye bağlısınız"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; e-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilir.\n\nDaha fazla bilgi edinmek için yöneticinizle iletişim kurun.\n\nAyrıca ağ etkinliğinizi izleyebilen bir VPN\'ye bağlısınız."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Çalışma profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasına bağlı.\n\nDaha fazla bilgi için yöneticinizle iletişim kurun."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Çalışma profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> uygulamasına bağlı.\n\nAyrıca kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> uygulamasına bağlısınız."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; ayarları, şirket erişimini, uygulamaları, cihazınızla ilişkilendirilmiş verileri ve cihazınızın konum bilgilerini izleyebilir ve yönetebilir.\n\nE-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasına bağlısınız.\n\nDaha fazla bilgi edinmek için yöneticinizle iletişim kurun."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Cihazınızın kilidini manuel olarak açmadıkça cihaz kilitli kalacak"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirimleri daha hızlı alın"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Kilidi açmadan bildirimleri görün"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Tümünü göster"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Tümünü gizle"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Şimdi sona erdir"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Ekran sabitlendi"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Böylece siz sabitlemesini kaldırana kadar görüntülenmeye devam eder. Sabitlemeyi kaldırmak için Geri ve Genel Bakış öğesine aynı anda dokunun ve basılı tutun."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Böylece siz sabitlemesini kaldırana kadar görüntülenmeye devam eder. Sabitlemeyi kaldırmak için Genel Bakış\'a dokunun ve basılı tutun."</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index df219ef..a3776c3 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -85,9 +85,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Пошук"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Номер телефону"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Розблокувати"</string>
     <string name="unlock_label" msgid="8779712358041029439">"розблокувати"</string>
     <string name="phone_label" msgid="2320074140205331708">"відкрити телефон"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"відкрити камеру"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Виберіть новий макет завдання"</string>
     <string name="cancel" msgid="6442560571259935130">"Скасувати"</string>
@@ -123,6 +127,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Дві смужки сигналу WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Три смужки сигналу WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Максимальний сигнал WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet відключено."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet підключено."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Немає сигналу."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Не з’єднано."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Нуль смужок сигналу."</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Програму <xliff:g id="APP">%s</xliff:g> закрито."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Усі останні додатки закрито."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Запуск додатка <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Сповіщення відхилено."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Панель сповіщень."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Швидке налаштування."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Заблокований екран."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Налаштування"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Огляд."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Підтвердити"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Закрити"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Користувач <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi вимкнено."</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим польоту вимкнено."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим польоту ввімкнено."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Режим \"Не турбувати\" ввімкнено, лише пріоритетні."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Режим \"Не турбувати\" ввімкнено, без сповіщень."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Увімкнено режим \"Не турбувати\", сигнали вимкнено."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Увімкнено режим \"Не турбувати\", дозволено лише сигнали."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Режим \"Не турбувати\" вимкнено."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Режим \"Не турбувати\" вимкнено."</string>
@@ -237,7 +244,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="7309935569360609114">"Без сповіщень"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Без сигналів"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (пристроїв: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth вимкнено"</string>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Проведіть пальцем угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Проведіть пальцем ліворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Без сповіщень і сигналів будильника."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Ви отримуватимете звукові й вібросигнали лише для сповіщень, нагадувань, повідомлень про події та викликів абонентів, яких ви вибрали."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Ви отримуватимете звукові й вібросигнали лише для вибраних сповіщень, нагадувань, повідомлень про події та викликів абонентів."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Налаштувати"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Без сповіщень"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Лише пріоритетні сповіщення"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Лише сигнали"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Наступний сигнал: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Наступний сигнал: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Сигнал не лунатиме о <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Блокуватимуться ВСІ звукові та вібросигнали, зокрема сповіщення, музика, відео й ігри. Ви зможете телефонувати."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Менше термінових сповіщень нижче"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Торкніться знову, щоб відкрити"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Проведіть пальцем угору, щоб розблокувати"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Проведіть пальцем праворуч, щоб скористатися телефоном"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Проведіть пальцем ліворуч, щоб скористатися камерою"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Без сповіщень"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"Усі"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Без\nсповіщень"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"Заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного зарядження)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Вимкнути VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Від’єднатися від мережі VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Вашим пристроєм керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати та контролювати налаштування, корпоративний доступ, додатки й дані, пов’язані з вашим пристроєм, а також геодані пристрою. Зв’яжіться з адміністратором, щоб дізнатися більше."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Вашим робочим профілем керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати вашу активність у мережі, зокрема листування, роботу в додатках і на захищених сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Вашим пристроєм керує\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nВашим робочим профілем керує\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдміністратор може відстежувати вашу активність на пристрої та в мережі, зокрема листування, роботу в додатках і на захищених сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Ви дозволити додатку під’єднуватися до мережі VPN.\n\nЦей додаток може відстежувати вашу активність на пристрої та в мережі, зокрема листування, роботу в додатках і на захищених сайтах."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Ви дозволити додатку під’єднуватися до мережі VPN.\n\nЦей додаток може відстежувати вашу активність на пристрої та в мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Вашим пристроєм керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати та контролювати налаштування, корпоративний доступ, додатки й дані, пов’язані з вашим пристроєм, а також геодані пристрою.\n\nПристрій під’єднано до мережі VPN, постачальник послуг якої може відстежувати вашу активність у мережі, зокрема листування, роботу в додатках і на сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Вашим робочим профілем керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати вашу активність у мережі, зокрема листування, роботу в додатках і на захищених сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше.\n\nПристрій під’єднано до мережі VPN, постачальник послуг якої може відстежувати вашу активність у мережі."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Вашим пристроєм керує <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nВашим робочим профілем керує\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nАдміністратор може відстежувати вашу активність у мережі, зокрема листування, роботу в додатках і на захищених сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше.\n\nПристрій під’єднано до мережі VPN, постачальник послуг якої може відстежувати вашу активність у мережі."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Вашим пристроєм керує організація <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше.\n\nПристрій під’єднано до мережі VPN, у якій ваша активність може відстежуватись."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Ваш профіль під’єднано до додатка <xliff:g id="APPLICATION">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Ваш профіль під’єднано до додатка <xliff:g id="APPLICATION">%1$s</xliff:g>, який може відстежувати вашу особисту активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Вашим робочим профілем керує організація <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Профіль під’єднано до додатка <xliff:g id="APPLICATION">%2$s</xliff:g>, який може відстежувати вашу робочу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Вашим робочим профілем керує організація <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Профіль під’єднано до додатка <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, який може відстежувати вашу робочу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nВаш профіль також під’єднано до додатка <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, який може відстежувати вашу особисту активність у мережі."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Вашим пристроєм керує організація <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати та контролювати налаштування, корпоративний доступ, додатки, геодані й інші дані, пов’язані з вашим пристроєм.\n\nВаш профіль під’єднано до додатка <xliff:g id="APPLICATION">%2$s</xliff:g>, який може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Пристрій залишатиметься заблокованим, доки ви не розблокуєте його вручну"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Швидше отримуйте сповіщення"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Переглядайте сповіщення, перш ніж розблокувати екран"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Показати всі"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Сховати всі"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Закрити"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Екран закріплено"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Закріпить екран, щоб ви могли постійно його бачити, доки не відкріпите. Щоб відкріпити, одночасно натисніть і втримуйте кнопки \"Назад\" і \"Огляд\"."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Закріпить екран, щоб ви могли постійно його бачити, доки не відкріпите. Щоб відкріпити, натисніть і втримуйте кнопку \"Огляд\"."</string>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml
index d28efcb..46723f1 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur-rPK/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"تلاش کریں"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"کیمرا"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"فون"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"غیر مقفل کریں"</string>
     <string name="unlock_label" msgid="8779712358041029439">"غیر مقفل کریں"</string>
     <string name="phone_label" msgid="2320074140205331708">"فون کھولیں"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"کیمرا کھولیں"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"نئے کام کا لے آؤٹ منتخب کریں"</string>
     <string name="cancel" msgid="6442560571259935130">"منسوخ کریں"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‏WiMAX دو بارز۔"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‏WiMAX تین بارز۔"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‏WiMAX سگنل پورا ہے۔"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"ایتھرنیٹ منقطع ہے۔"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"ایتھرنیٹ منسلک ہے۔"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"کوئی سگنل نہیں ہے۔"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"مربوط نہیں ہے۔"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"صفر بارز۔"</string>
@@ -144,7 +150,7 @@
     <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 نہیں ہے۔"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"بلوٹوتھ ربط بنانا۔"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"بلوٹوتھ مربوط کرنا۔"</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"ہوائی جہاز وضع۔"</string>
     <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"کیریئر نیٹ ورک تبدیل ہو رہا ہے۔"</string>
     <string name="accessibility_battery_level" msgid="7451474187113371965">"بیٹری <xliff:g id="NUMBER">%d</xliff:g> فیصد۔"</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> کو ہٹا دیا گیا۔"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"سبھی حالیہ ایپلیکیشنز کو برخاست کر دیا گیا۔"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> شروع ہو رہی ہے۔"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"اطلاع مسترد ہوگئی۔"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"اطلاعاتی شیڈ۔"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"فوری ترتیبات۔"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"مقفل اسکرین۔"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ترتیبات"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"مجموعی جائزہ۔"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"توثیق کریں"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"بند کریں"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"صارف <xliff:g id="USER">%s</xliff:g>۔"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>۔"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"‏Wifi کو آف کر دیا گیا۔"</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ہوائی جہاز وضع کو آف کر دیا گیا۔"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ہوائی جہاز وضع کو آن کر دیا گیا۔"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ڈسٹرب نہ کریں آن ہے، صرف ترجیحی۔"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ڈسٹرب نہ کریں آن ہے، کوئی مداخلتیں نہیں۔"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"مداخلت نہ کریں آن ہے، مکمل خاموشی۔"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ڈسٹرب نہ کریں آن ہے، صرف الارمز۔"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ڈسٹرب نہ کریں آف ہے۔"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ڈسٹرب نہ کریں کو آف کر دیا گیا۔"</string>
@@ -235,7 +242,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="7309935569360609114">"کوئی مداخلتیں نہیں"</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>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"تلاش کریں"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> کیلئے اوپر سلائیڈ کریں۔"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> کیلئے بائیں سلائیڈ کریں۔"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"کوئی مداخلتیں نہیں ہیں۔ یہاں تک کہ الارمز بھی نہیں ہیں۔"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"الارمز، یاد دہانیوں، ایونٹس اور آپ کے متعین کردہ کالرز کے علاوہ، آپ آوازوں اور وائبریشنز سے ڈسٹرب نہیں ہونگے۔"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"الارمز، یاد دہانیوں، ایونٹس اور آپ کے متعین کردہ کالرز کے علاوہ، آپ آوازوں اور وائبریشنز سے ڈسٹرب نہیں ہوں گے۔"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"حسب ضرورت بنائیں"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"کوئی مداخلتیں نہیں ہیں"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"صرف ترجیحی مداخلتیں"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"صرف الارمز"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"آپ کا اگلا الارم <xliff:g id="ALARM_TIME">%s</xliff:g> بجے ہے"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"آپ کا اگلا الارم <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g> ہے"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"آپ کو <xliff:g id="ALARM_TIME">%s</xliff:g> بجے اپنا الارم سنائی نہیں دیگا"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"یہ الارمز، موسیقی، ویڈیوز اور گیمز کی آوازوں اور وائبریشنز سمیت سبھی آوازیں اور وائبریشنز مسدود کر دیتا ہے۔ آپ ابھی بھی فون کالز کر سکیں گے۔"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"‎+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>‎"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"کم اہم اطلاعات ذیل میں ہیں"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"کھولنے کیلئے دوبارہ ٹچ کریں"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"غیر مقفل کرنے کیلئے اوپر سوائپ کریں"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"فون کیلئے دائیں سوائپ کریں"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"کیمرہ کیلئے بائیں سوائپ کریں"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"کوئی مداخلتیں نہیں"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"سبھی"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"کوئی مداخلتیں\nنہیں"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"چارج ہو رہا ہے (مکمل ہونے تک <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> باقی ہیں)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"‏VPN کو غیر فعال کریں"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"‏VPN کو غیر منسلک کریں"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"آپ کے آلہ کا نظم کیا جاتا ہے بذریعہ <xliff:g id="ORGANIZATION">%1$s</xliff:g>۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔ مزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"آپ کے دفتری پروفائل کا نظم کیا جاتا ہے بذریعہ <xliff:g id="ORGANIZATION">%1$s</xliff:g>۔\n\nآپ کا منتظم ای میلز، ایپس اور محفوظ ویب سائٹس سیمت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"آپ کے آلہ کا نظم کیا جاتا ہے بذریعہ:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>۔\nآپ کے دفتری پروفائل کا نظم کیا جاتا ہے بذریعہ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>۔\n\nآپ کا منتظم ای میلز، ایپس اور محفوظ ویب سائٹس سیمت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"‏آپ نے ایک ایپ کو VPN کنکشن ترتیب دینے کی اجازت دی ہے۔\n\nآپ کا منتظم ای میلز، ایپس اور محفوظ ویب سائٹس سیمت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"‏آپ نے ایک ایپ کو VPN کنکشن ترتیب دینے کی اجازت دی ہے۔\n\nیہ ایپ ای میلز، ایپس اور ویب سائٹس سمیت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"‏آپ کے آلہ کا نظم کیا جاتا ہے بذریعہ <xliff:g id="ORGANIZATION">%1$s</xliff:g>۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔\n\nآپ ایک VPN سے منسلک ہیں، جو ای میلز، ایپس اور محفوظ ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"‏آپ کے آلہ کا نظم کیا جاتا ہے بذریعہ <xliff:g id="ORGANIZATION">%1$s</xliff:g>۔\n\nآپ کا منتظم ای میلز، ایپس اور محفوظ ویب سائٹس سیمت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔\n\nآپ ایک VPN سے بھی منسلک ہیں، جو آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"‏آپ کے آلہ کا نظم کیا جاتا ہے بذریعہ <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>۔\nآپ کے دفتری پروفائل کا نظم کیا جاتا ہے بذریعہ:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>۔\n\nآپ کا منتظم ای میلز، ایپس اور محفوظ ویب سائٹس سیمت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے، اپنے منتظم سے رابطہ کریں۔\n\nآپ ایک VPN سے بھی منسلک ہیں، جو آپ کے نجی نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"‏آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔\n\nآپ کا منتظم ای میلز، ایپس اور ویب سائٹس سیمت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔\n\nآپ ایک VPN سے بھی منسلک ہیں، جو آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"آپ <xliff:g id="APPLICATION">%1$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"آپ <xliff:g id="APPLICATION">%1$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس آپ کے نجی نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔ یہ <xliff:g id="APPLICATION">%2$s</xliff:g> سے منسلک ہے، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔ یہ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> سے منسلک ہے، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nآپ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> سے بھی منسلک ہیں، جو آپ کے نجی نیٹ ورک کی سرگرمی کو مانیٹر کر سکتا ہے۔"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"آپ کا آلہ <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔\n\nآپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔\n\nآپ <xliff:g id="APPLICATION">%2$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"آلہ اس وقت تک مقفل رہے گا جب تک آپ دستی طور پر اسے غیر مقفل نہ کریں"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"تیزی سے اطلاعات حاصل کریں"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"غیر مقفل کرنے سے پہلے انہیں دیکھیں"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"سبھی دیکھیں"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"سبھی چھپائیں"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>۔ <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"ابھی ختم کریں"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"اسکرین پن کردہ ہے"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"یہ اس کو اس وقت تک منظر میں رکھتا ہے جب تک آپ اس سے پن نہیں ہٹا دیتے۔ پن ہٹانے کیلئے واپس اور عمومی جائزہ کو ایک ساتھ ٹچ کریں اور پکڑ کر رکھیں۔"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"یہ اس کو اس وقت تک منظر میں رکھتا ہے جب تک آپ اس سے پن نہیں ہٹا دیتے۔ پن ہٹانے کیلئے عمومی جائزہ کو ٹچ کریں اور پکڑ کر رکھیں۔"</string>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index 2c29f24..621acde 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Izlash"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Telefon"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"Ovozli yordam"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Qulfdan chiqarish"</string>
     <string name="unlock_label" msgid="8779712358041029439">"qulfdan chiqarish"</string>
     <string name="phone_label" msgid="2320074140205331708">"telefonni ochish"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"ovozli yordamni ochish"</string>
     <string name="camera_label" msgid="7261107956054836961">"kamerani ochish"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Yangi vazifa tartibini tanlash"</string>
     <string name="cancel" msgid="6442560571259935130">"Bekor qilish"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Ikkita ustunli WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Uchta ustunli WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"To‘liq signalli WiMAX."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Qurilma Ethernet tarmog‘idan uzildi."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Qurilma Ethernet tarmog‘iga ulandi."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Signal yo‘q."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Ulanmagan."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Signal ustuni yo‘q."</string>
@@ -162,25 +166,26 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> olib tashlangan."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Yaqinda ishlatilgan barcha ilovalar olib tashlandi."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> ishga tushirilmoqda."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Xabarnoma e‘tiborsiz qoldirildi."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Xabarnoma soyasi."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tezkor sozlamalar."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Qulflash ekrani."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Sozlamalar"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Umumiy nazar."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Tasdiqlash"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Yopish"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Foydalanuvchi <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi o‘chirildi."</string>
     <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Wi-Fi yoqildi."</string>
-    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Uyali <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobil tarmoq: <xliff:g id="NETWORK">%3$s</xliff:g> (<xliff:g id="TYPE">%2$s</xliff:g>, <xliff:g id="SIGNAL">%1$s</xliff:g>)"</string>
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batareya <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Parvoz rejimi o‘chirilgan."</string>
     <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Parvoz rejimi yoqilgan."</string>
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Parvoz rejimi o‘chirildi."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Parvoz rejimi yoqildi."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"“Bezovta qilinmasin” funksiyasi yoqilgan, faqat muhim bildirishnomalar ko‘rsatiladi."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"“Bezovta qilinmasin” funksiyasi yoqilgan, bezovta qilinmaydi."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Bezovta qilinmasin, tinchlik saqlansin"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Bezovta qilinmasin, faqat signallar"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"“Bezovta qilinmasin” funksiyasi o‘chirilgan."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"“Bezovta qilinmasin” funksiyasi o‘chirildi."</string>
@@ -195,7 +200,7 @@
     <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"Joylashuv ma’lumotini yuborish yoqilgan."</string>
     <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"Joylashuv ma’lumotini yuborish o‘chirildi."</string>
     <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"Joylashuv ma’lumotini yuborish yoqildi."</string>
-    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Signal <xliff:g id="TIME">%s</xliff:g> ga o‘rnatildi."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Uyg‘otkich signali <xliff:g id="TIME">%s</xliff:g> da chalinadi."</string>
     <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"Panelni yopish."</string>
     <string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"Ko‘proq vaqt."</string>
     <string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"Kamroq vaqt."</string>
@@ -230,12 +235,12 @@
     <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"Ekran yotiq holatda aylanmaydigan qilindi."</string>
     <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"Ekran tik holatda aylanmaydigan qilindi."</string>
     <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
-    <string name="start_dreams" msgid="7219575858348719790">"Tush kurish"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Ekran lavhasi"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Bezovta qilinmasin"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Faqat muhimlari"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Faqat signallar"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Tanaffuslarsiz"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Tinchlik saqlansin"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g>ta qurilma)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth o‘chirilgan"</string>
@@ -261,7 +266,7 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tarmoq mavjud emas"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi o‘chirilgan"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Saqlangan tarmoqlar mavjud emas"</string>
-    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Translatsiya"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Wi-Fi monitor"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"Translatsiya qilinmoqda"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nomsiz qurilma"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Tarqatish uchun tayyor"</string>
@@ -302,26 +307,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"Izlash"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> uchun yuqoriga suring."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> uchun chapga suring."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Hech narsa bezovta qilmaydi, hatto uyg‘otkichlar ham."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Turli ovoz va tebranishlar endi sizni bezovta qilmaydi. Biroq, uyg‘otkich signallari, eslatmalar, tadbirlar haqidagi bildirishnomalar va siz tanlagan abonentlardan kelgan qo‘ng‘iroqlar bundan mustasno."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Turli ovoz va tebranishlar endi sizni bezovta qilmaydi. Biroq uyg‘otkich signallari, eslatmalar, tadbirlar haqidagi bildirishnomalar va siz tanlagan abonentlardan kelgan qo‘ng‘iroqlar bundan mustasno."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Sozlash"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Tanaffuslarsiz"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Faqat ustuvor tanaffuslar"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Faqat signallar"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Keyingi uyg‘otkich: <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Keyingi uyg‘otkich: <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Keyingi uyg‘otkich: <xliff:g id="ALARM_TIME">%s</xliff:g>. Ovoz eshitilmaydi."</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Ushbu rejimda BARCHA ovoz va tebranishlar, jumladan, uyg‘otkich signallari, musiqa va o‘yinlar ovozlari ham o‘chirib qo‘yiladi. Shunday bo‘lsa-da, qo‘ng‘iroqlarni bemalol amalga oshirishingiz mumkin."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Kam ahamiyatli bildirishnomalarni pastda ko‘rsatish"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Ochish uchun yana bosing"</string>
-    <string name="keyguard_unlock" msgid="8043466894212841998">"Qulfdan chiqarish uchun yuqoriga suring"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Telefonni ochish uchun o‘ngga"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Kamerani ochish uchun chapga suring"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Bezovta qilinishlarsiz"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Qulfdan chiqarish uchun tepaga suring"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"Telefonni ochish uchun ikonkani suring"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"Ovozli yordamni ochish uchun ikonkani suring"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"Kamerani ochish uchun ikonkani suring"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"Tinchlik saqlansin"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Faqat muhimlari"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Faqat signallar"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Barchasi"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Uzilishlar\nbo‘lmasin"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Tinchlik\nsaqlansin"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Faqat\nmuhimlar"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Faqat\nsignallar"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Quvvat olmoqda (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>da to‘ladi)"</string>
@@ -345,7 +344,7 @@
     <string name="guest_notification_remove_action" msgid="8820670703892101990">"MEHMON HISOBINI O‘CHIRISH"</string>
     <string name="user_add_user_title" msgid="4553596395824132638">"Yangi foyd-chi qo‘shilsinmi?"</string>
     <string name="user_add_user_message_short" msgid="2161624834066214559">"Yangi foydalanuvchi qo‘shilgach, o‘sha shaxs o‘z hududini sozlashi lozim bo‘ladi.\n\nHar qanday foydalanuvchi ilovalarni barcha foydalanuvchilar uchun yangilashi mumkin."</string>
-    <string name="battery_saver_notification_title" msgid="237918726750955859">"Quvvat tejash yoqilgan"</string>
+    <string name="battery_saver_notification_title" msgid="237918726750955859">"Quvvat tejash rejimi yoqildi"</string>
     <string name="battery_saver_notification_text" msgid="820318788126672692">"Unumdorlikni pasaytiradi va fonda int-dan foyd-ni cheklaydi"</string>
     <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Quvvat tejash funksiyasini o‘chiring"</string>
     <string name="notification_hidden_text" msgid="1135169301897151909">"Kontent yashirildi"</string>
@@ -363,12 +362,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN tarmog‘ini o‘chirish"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN ulanishini uzish"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Qurilmangiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlari hamda unga bog‘liq boshqa ma’lumotlarni boshqarishi mumkin. Ko‘proq ma’lumot olish uchun administrator bilan bog‘laning."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator Internetdagi harakatlaringiz, jumladan, e-pochta, ilova va xavfsiz veb-saytlar bilan ishlashingizni kuzatishi mumkin.\n\nKo‘proq ma’lumot olish uchun administrator bilan bog‘laning."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Qurilmangiz <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\ntomonidan boshqariladi.\nIshchi profilingiz <xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\ntomonidan boshqariladi.\n\nAdministrator Internetdagi harakatlaringiz, jumladan, e-pochta, ilova va xavfsiz veb-saytlar bilan ishlashingizni kuzatishi mumkin.\n\nKo‘proq ma’lumot olish uchun administrator bilan bog‘laning."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Siz ilovaga VPN tarmog‘iga ulanishga ruxsat bergansiz.\n\nUshbu ilova qurilmangiz va Internetdagi harakatlaringizni, jumladan, e-pochta, ilovalar va xavfsiz veb-saytlar bilan ishlashingizni kuzatishi mumkin."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Siz ilovaga VPN tarmog‘iga ulanishga ruxsat bergansiz.\n\nUshbu ilova qurilmangiz va internetdagi harakatlaringizni, jumladan, e-pochta, ilovalar va veb-saytlar bilan ishlashingizni kuzatishi mumkin."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Qurilmangiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlarini boshqarishi mumkin.\n\nShuningdek, siz Internetdagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlar bilan ishlashingizni kuzata oladigan VPN tarmog‘iga ham ulangansiz.\n\nKo‘proq ma’lumot olish uchun  administrator bilan bog‘laning."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator Internetdagi harakatlaringizni, jumladan, e-pochta, ilova va xavfsiz veb-saytlar bilan ishlashingizni  kuzata oladi.\n\nKo‘proq ma’lumot olish uchun administrator bilan bog‘laning.\n\nShuningdek, siz tarmoqdagi faoliyatingizni kuzata oladigan VPN tarmog‘iga ham ulangansiz."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Qurilmangiz <xliff:g id="ORGANIZATION_0">%1$s</xliff:g> tomonidan boshqariladi.\nIshchi profilingiz <xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n tomonidan boshqariladi.\n\nAdministrator Internetdagi harakatlaringizni, jumladan, e-pochta, ilova va xavfsiz veb-saytlar bilan ishlashingizni kuzatishi mumkin.\n\nKo‘proq ma’lumot olish uchun administrator bilan bog‘laning.\n\nShuningdek, siz shaxsiy tarmoqdagi faoliyatingizni kuzata oladigan VPN tarmog‘iga ham ulangansiz."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator internetdagi harakatlaringizni, jumladan, e-pochta, ilova va xavfsiz veb-saytlar bilan ishlashingizni kuzatishi mumkin.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning.\n\nShuningdek, siz VPN tarmog‘iga ham ulangansiz. U internetdagi harakatlaringizni kuzatishi mumkin."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirildi. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirildi. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. U <xliff:g id="APPLICATION">%2$s</xliff:g> ilovasiga ulangan. Ushbu ilova ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. U <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ilovasiga ulangan. Ushbu ilova ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nShuningdek, siz <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ilovasiga ham ulangansiz. U shaxsiy tarmoqdagi harakatlaringizni kuzatishi mumkin."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Qurilmangiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlarini boshqarishi mumkin.\n\nShuningdek, siz <xliff:g id="APPLICATION">%2$s</xliff:g> ilovasiga ham ulangansiz. Ushbu ilova internetdagi harakatlaringizni, jumladan, e-pochta, ilovalar va veb-saytlar bilan ishlashingizni kuzata oladi.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Qurilma qo‘lda qulfdan chiqarilmaguncha qulflangan holatda qoladi"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirishnomalarni tezroq oling"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ularni qulfdan chiqarishdan oldin ko‘ring"</string>
@@ -377,6 +379,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Barchasini ko‘rsatish"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Barchasini yashirish"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Tugatish"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"Kengaytirish"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Yig‘ish"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"Ekran qadaldi"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Ekran yechilmaguncha u qadalgan holatda qoladi. Uni yechish uchun “Orqaga” va “Umumiy nazar” tugmalarini bir vaqtda bosing va ushlab turing."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ekran yechilmaguncha u qadalgan holatda qoladi. Uni yechish uchun “Umumiy nazar” tugmasini bosing va ushlab turing."</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index aeac052..823d3bb 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Tìm kiếm"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Máy ảnh"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Điện thoại"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Mở khóa"</string>
     <string name="unlock_label" msgid="8779712358041029439">"mở khóa"</string>
     <string name="phone_label" msgid="2320074140205331708">"mở điện thoại"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"mở máy ảnh"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Chọn bố cục tác vụ mới"</string>
     <string name="cancel" msgid="6442560571259935130">"Hủy"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX hai vạch."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX ba vạch."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Tín hiệu WiMAX đầy đủ."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Đã ngắt kết nối Ethernet."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Đã kết nối Ethernet."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Không có tín hiệu nào."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Chưa được kết nối."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"0 vạch."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> đã bị loại bỏ."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Đã bỏ qua tất cả các ứng dụng gần đây."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Bắt đầu <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Đã loại bỏ thông báo."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bóng thông báo."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Cài đặt nhanh."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Màn hình khóa."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Cài đặt"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Tổng quan."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Xác nhận"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Đóng"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Người dùng <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Đã tắt Wifi."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Đã tắt chế độ trên máy bay."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Đã bật chế độ trên máy bay."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Bật tính năng không làm phiền, chỉ ưu tiên."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Bật tính năng không làm phiền, không có gián đoạn."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Bật tính năng không làm phiền, hoàn toàn tắt tiếng."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Bật tính năng không làm phiền, chỉ báo thức."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Tắt tính năng không làm phiền."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Đã tắt tính năng không làm phiền."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Không làm phiền"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Chỉ ưu tiên"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Chỉ báo thức"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Không có gián đoạn nào"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Hoàn toàn tắt tiếng"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> thiết bị)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Đã tắt Bluetooth"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Tìm kiếm"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Trượt lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Trượt sang trái để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Không có gián đoạn. Thậm chí không có cảnh báo."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Bạn sẽ không bị làm phiền bởi âm thanh và rung, ngoại trừ báo thức, nhắc nhở, sự kiện và người gọi mà bạn chỉ định."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Bạn sẽ không bị làm phiền bởi âm thanh và tiếng rung, ngoại trừ báo thức, nhắc nhở, sự kiện và người gọi mà bạn chỉ định."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tùy chỉnh"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Không có gián đoạn nào"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Chỉ các gián đoạn ưu tiên"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Chỉ báo thức"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"Lần báo thức tiếp theo của bạn vào lúc <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Lần báo thức tiếp theo của bạn là <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Bạn sẽ không nghe thấy báo thức lúc <xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Chế độ này sẽ chặn TẤT CẢ âm thanh và tiếng rung, bao gồm báo thức, âm nhạc, video và trò chơi. Bạn vẫn có thể gọi điện thoại."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Thông báo ít khẩn cấp hơn bên dưới"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Chạm lại để mở"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Vuốt lên để mở khóa"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Vuốt sang phải để mở điện thoại"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Vuốt sang trái để mở máy ảnh"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Không có gián đoạn nào"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Hoàn toàn tắt tiếng"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Chỉ ưu tiên"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Chỉ báo thức"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Tất cả"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Không có\ngián đoạn"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Hoàn toàn\ntắt tiếng"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Chỉ\nưu tiên"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Chỉ\nbáo thức"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Đang sạc (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho đến khi đầy)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Tắt VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Ngắt kết nối VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát và quản lý cài đặt, quyền truy cập của công ty, ứng dụng và dữ liệu được liên kết với thiết bị của bạn và thông tin về vị trí của thiết bị. Để biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và các trang web an toàn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Thiết bị của bạn được quản lý bởi:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nHồ sơ công việc của bạn được quản lý bởi:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát hoạt động mạng và thiết bị của bạn, bao gồm email, ứng dụng và các trang web an toàn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Bạn đã cấp cho ứng dụng quyền thiết lập kết nối VPN.\n\nỨng dụng này có thể giám sát hoạt động mạng và thiết bị của bạn, bao gồm email, ứng dụng và các trang web an toàn."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Bạn đã cấp cho ứng dụng quyền thiết lập kết nối VPN.\n\nỨng dụng này có thể giám sát hoạt động mạng và thiết bị của bạn, bao gồm email, ứng dụng và trang web."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát và quản lý cài đặt, quyền truy cập của công ty, ứng dụng, dữ liệu được liên kết với thiết bị của bạn và thông tin về vị trí của thiết bị.\n\nBạn được kết nối với VPN, mạng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và các trang web an toàn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn.\n\nBạn cũng được kết nối với VPN, mạng này có thể giám sát hoạt động mạng của bạn."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nHồ sơ công việc của bạn được quản lý bởi:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nQuản trị viên của bạn có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và các trang web an toàn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn.\n\nBạn cũng được kết nối với VPN, mạng này có thể giám sát hoạt động mạng cá nhân của bạn"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Hồ sơ Android Work của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn.\n\nBạn cũng được kết nối với VPN, có thể giám sát hoạt động mạng của bạn."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và trang web."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng cá nhân của bạn bao gồm email, ứng dụng và trang web."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Hồ sơ Android Work của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ Android Work được kết nối với <xliff:g id="APPLICATION">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng công việc của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Hồ sơ Android Work của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ Android Work được kết nối với <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng công việc của bạn, bao gồm email, ứng dụng và trang web.\n\nBạn cũng được kết nối với <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, có thể giám sát hoạt động mạng cá nhân của bạn."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên có thể giám sát và quản lý cài đặt, quyền truy cập của công ty, ứng dụng, dữ liệu được liên kết với thiết bị của bạn và thông tin về vị trí của thiết bị.\n\nBạn được kết nối với <xliff:g id="APPLICATION">%2$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Thiết bị sẽ vẫn bị khóa cho tới khi bạn mở khóa theo cách thủ công"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Nhận thông báo nhanh hơn"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Xem thông báo trước khi bạn mở khóa"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Xem tất cả"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ẩn tất cả"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Kết thúc bây giờ"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Màn hình được ghim"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Thao tác này sẽ duy trì hiển thị màn hình cho đến khi bạn bỏ ghim. Chạm và giữ nút Quay lại và Tổng quan cùng một lúc để bỏ ghim."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Thao tác này sẽ duy trì hiển thị màn hình cho đến khi bạn bỏ ghim. Chạm và giữ nút Quay lại để bỏ ghim."</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 6e1e645..1499d59 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"搜索"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"相机"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"电话"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"解锁"</string>
     <string name="unlock_label" msgid="8779712358041029439">"解锁"</string>
     <string name="phone_label" msgid="2320074140205331708">"打开电话"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"打开相机"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"选择新的任务布局"</string>
     <string name="cancel" msgid="6442560571259935130">"取消"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX 信号强度为两格。"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX 信号强度为三格。"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX 信号满格。"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"以太网已断开连接。"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"以太网已连接。"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"无信号。"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"未连接。"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"信号强度为零格。"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"已删除<xliff:g id="APP">%s</xliff:g>"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"已关闭所有最近用过的应用。"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"正在启动<xliff:g id="APP">%s</xliff:g>。"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"已关闭通知。"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知栏。"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快捷设置。"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"锁定屏幕。"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"设置"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"概览。"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"确认"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"关闭"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"用户:<xliff:g id="USER">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WLAN已关闭。"</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飞行模式已关闭。"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飞行模式已开启。"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"勿扰模式已开启,仅限优先打扰。"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"勿扰模式已开启,禁止打扰。"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"勿扰模式已开启,完全静音。"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"勿扰模式已开启,仅限闹钟。"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"勿扰模式关闭。"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"已关闭勿扰模式。"</string>
@@ -237,7 +244,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="7309935569360609114">"禁止打扰"</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>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"搜索"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"向上滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"向左滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"零打扰(甚至不发出闹钟提醒)。"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"您将不会受声音和振动的打扰,但闹钟、提醒、活动和您指定的来电者除外。"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"您将不会受声音和振动的打扰,但闹钟、提醒、活动和您指定的来电者除外。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"自定义"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"禁止打扰"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"仅限优先打扰内容"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"仅限闹钟"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"下次闹钟响铃时间:<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"下次闹钟响铃时间:<xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"您在<xliff:g id="ALARM_TIME">%s</xliff:g>将不会听到闹钟响铃"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"这会阻止所有声音和振动(包括闹钟、音乐、视频和游戏)打扰您。您仍然可以拨打电话。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"不太紧急的通知会显示在下方"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"再次触摸即可打开"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"向上滑动即可解锁"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"向右滑动可打开拨号界面"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"向左滑动可打开相机"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"勿扰"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"全部"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"禁止\n打扰"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"正在充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"关闭VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"断开VPN连接"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"您的设备由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控和管理与此设备相关的设置、企业权限、应用、数据以及设备位置信息。若要了解详情,请与您单位的管理员联系。"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控您的网络活动,包括收发电子邮件、使用应用和浏览安全网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"您的设备由以下单位管理:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>。\n您的工作资料由以下单位管理:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>。\n\n您的管理员可以监控您的设备和网络活动,包括收发电子邮件、使用应用和浏览安全网站。\n\n若要了解详情,请与您的管理员联系。"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"您已授权应用设置 VPN 连接。\n\n此应用可以监控您的设备和网络活动,包括收发电子邮件、使用应用和浏览安全网站。"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"您已授权应用设置 VPN 连接。\n\n该应用可以监控您的设备和网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"您的设备由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控和管理与此设备相关的设置、企业权限、应用、数据以及设备位置信息。\n\n您已连接到 VPN,此 VPN 也可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控您的网络活动,包括收发电子邮件、使用应用和浏览安全网站。\n\n若要了解详情,请与您单位的管理员联系。\n\n此外,您已连接到 VPN,此 VPN 也可以监控您的网络活动。"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"您的设备由以下单位管理:<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>。\n您的工作资料由以下单位管理:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>。\n\n您单位的管理员可以监控您的网络活动,包括收发电子邮件、使用应用和浏览安全网站。\n\n若要了解详情,请与您单位的管理员联系。\n\n此外,您已连接到 VPN,此 VPN 也可以监控您的个人网络活动"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。\n\n此外,您还连接到了 VPN,此 VPN 也可以监控您的网络活动。"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"您已连接到<xliff:g id="APPLICATION">%1$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"您已连接到<xliff:g id="APPLICATION">%1$s</xliff:g>,该应用可以监控您的个人网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。您已连接到<xliff:g id="APPLICATION">%2$s</xliff:g>,该应用可以监控您的工作网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。您已连接到<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>,该应用可以监控您的工作网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n此外,您还连接到了<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>,该应用可以监控您的个人网络活动。"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"您的设备由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控和管理与此设备相关的设置、企业权限、应用、数据以及设备位置信息。\n\n您已连接到<xliff:g id="APPLICATION">%2$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"在您手动解锁之前,设备会保持锁定状态"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"更快捷地查看通知"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"无需解锁即可查看通知"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"查看全部"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"全部隐藏"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>(<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>)"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"立即结束"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"已固定屏幕"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"这将会固定显示此屏幕,直到您取消固定为止。触摸并同时按住“返回”和“概览”即可取消固定屏幕。"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“概览”即可取消固定屏幕。"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index a1baefd..0fc3f47 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -83,9 +83,11 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"搜尋"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"相機"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"電話"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"語音小幫手"</string>
     <string name="accessibility_unlock_button" msgid="128158454631118828">"解鎖"</string>
     <string name="unlock_label" msgid="8779712358041029439">"解鎖"</string>
     <string name="phone_label" msgid="2320074140205331708">"開啟電話"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"開啟語音小幫手"</string>
     <string name="camera_label" msgid="7261107956054836961">"開啟相機"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"選取新的工作版面配置"</string>
     <string name="cancel" msgid="6442560571259935130">"取消"</string>
@@ -121,6 +123,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX 訊號強度兩格。"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX 訊號強度三格。"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX 訊號滿格。"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"以太網連接中斷。"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"已連接以太網。"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"沒有訊號。"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"未連線。"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"訊號強度為零格。"</string>
@@ -164,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"所有最近使用的應用程式均已關閉。"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g><xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"通知已關閉。"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知欄。"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快速設定。"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"上鎖畫面。"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"設定"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"概覽"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"確認"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"關閉"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"使用者:<xliff:g id="USER">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi 已關閉。"</string>
@@ -182,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飛行模式已關閉。"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飛行模式已開啟。"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"開啟「請勿騷擾」,僅限優先。"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"開啟「請勿騷擾」,不允許干擾。"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"開啟「請勿騷擾」,完全靜音。"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"開啟「請勿騷擾」,僅限鬧鐘。"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"「請勿騷擾」關閉"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"已關閉「請勿騷擾」。"</string>
@@ -237,7 +242,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="7309935569360609114">"不允許干擾"</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>
@@ -304,26 +309,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"不干擾 (即使鬧鐘也不例外)。"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"除了指定的鬧鐘、提醒、活動及來電者,您將不會受到其他聲音和震動干擾。"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"除了指定的鬧鐘、提醒、活動及來電者,您將不會受到其他聲音和震動騷擾。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"自訂"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"不允許干擾"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"只限重要干擾"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"僅限鬧鐘"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"下次鬧鐘時間:<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"下次鬧鐘時間:<xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"您不會聽到<xliff:g id="ALARM_TIME">%s</xliff:g> 的鬧鐘"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"這會封鎖所有聲音和震動,包括鬧鐘、音樂、影片及遊戲,但您仍可撥打電話。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"還有 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g> 則通知"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"不太緊急的通知會在下方顯示"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"再次輕觸即可開啟"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"向上快速滑動即可解鎖"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"向右快速滑動即可使用手機功能"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"向左快速滑動即可使用相機功能"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"不允許干擾"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"從圖示快速滑動即可使用手機功能"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"從圖示快速滑動即可使用語音小幫手"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"從圖示快速滑動即可使用相機功能"</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_all" msgid="1330581184930945764">"全部"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"不允許\n干擾"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string>
@@ -365,12 +364,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"停用 VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。如需更多資訊,請聯絡您的管理員。"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"您的公司檔案由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控您的網絡活動,包括電郵、應用程式及安全網站。\n\n如需更多資訊,請聯絡您的管理員。"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"您裝置的管理機構:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>。\n您公司檔案的管理機構:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>。\n\n您的管理員可以監控您的裝置和網絡活動,包括電郵、應用程式及安全網站。\n\n如需更多資訊,請聯絡您的管理員。"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"您已授權應用程式設定 VPN 連線。\n\n這個應用程式可以監控您的裝置和網絡活動,包括電郵、應用程式和安全網站。"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"您已授權應用程式設定 VPN 連線。\n\n這個應用程式可以監控您的裝置和網絡活動,包括電郵、應用程式和安全網站。"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。\n\n此外,由於您的裝置連至 VPN,因此 VPN 服務供應商也能監控您的個人網絡活動,包括電郵、應用程式及網站。\n\n如需更多資訊,請聯絡您的管理員。"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"您的公司檔案由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控您的網絡活動,包括電郵、應用程式及安全網站。\n\n如需更多資訊,請聯絡您的管理員。\n\n此外,由於您的裝置連至 VPN,因此 VPN 服務供應商也能監控您的個人網絡活動。"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"您裝置的管理機構:<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>。\n您公司檔案的管理機構:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>。\n\n您的管理員可以監控您的網絡活動,包括電郵、應用程式及安全網站。\n\n如需更多資訊,請聯絡您的管理員。\n\n此外,由於您的裝置連至 VPN,因此 VPN 服務供應商也能監控您的個人網絡活動。"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控您的網絡活動,包括電郵、應用程式及網站。\n\n如需瞭解更多資訊,請聯絡管理員。\n\n由於您的裝置連至 VPN,因此 VPN 服務供應商也可監控您的網絡活動。"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"您的裝置已連至 <xliff:g id="APPLICATION">%1$s</xliff:g> ,它可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"您的裝置已連至 <xliff:g id="APPLICATION">%1$s</xliff:g> ,它可以監控您的個人網絡活動,包括電郵、應用程式及網站。"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"您的公司檔案由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。它已連至 <xliff:g id="APPLICATION">%2$s</xliff:g> ,可以監控您的工作網絡活動,包括電郵、應用程式及網站。\n\n如需瞭解更多資訊,請聯絡管理員。"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"您的公司檔案由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。它已連至 <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ,可以監控您的工作網絡活動,包括電郵、應用程式及網站。\n\n此外,由於您的裝置也連至 <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>,因此它也可監控您的個人網絡活動。"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。\n\n此外,您的裝置連至 <xliff:g id="APPLICATION">%2$s</xliff:g>,它能監控您的網絡活動,包括電郵、應用程式及網站。\n\n如需更多資訊,請聯絡您的管理員。"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"裝置將保持上鎖,直到您手動解鎖"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"更快取得通知"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string>
@@ -379,6 +381,9 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"顯示全部"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"全部隱藏"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"立即終止"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"展開"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"收合"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"在您取消固定前,它會保持在檢視狀態。輕觸並同時按住 [返回] 和 [概覽],即可取消固定。"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"在您取消固定前,它會保持在檢視狀態。輕觸並按住 [概覽] 即可取消固定。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 0082064..4958481 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"搜尋"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"相機"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"電話"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"解除鎖定"</string>
     <string name="unlock_label" msgid="8779712358041029439">"解除鎖定"</string>
     <string name="phone_label" msgid="2320074140205331708">"開啟電話"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"開啟攝影機"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"選取新工作版面配置"</string>
     <string name="cancel" msgid="6442560571259935130">"取消"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX 訊號兩格。"</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX 訊號三格。"</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX 訊號滿格。"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"未連上乙太網路。"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"已連上乙太網路。"</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"沒有訊號。"</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"尚未連線。"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"訊號強度零格。"</string>
@@ -164,13 +170,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"最近使用的應用程式已全部關閉。"</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"正在啟動「<xliff:g id="APP">%s</xliff:g>」。"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"已關閉通知。"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知欄。"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快捷設定。"</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"螢幕鎖定。"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"設定"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"總覽。"</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"確認"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"關閉"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"使用者:<xliff:g id="USER">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"WiFi 已關閉。"</string>
@@ -182,7 +189,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飛航模式已關閉。"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飛航模式已開啟。"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"「零打擾」設定為開啟,只會顯示優先通知。"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"「零打擾」設定為開啟,不接受任何干擾。"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"「零打擾」設定為開啟,完全靜音。"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"「零打擾」設定為開啟,只會顯示鬧鐘。"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"「零打擾」設定為關閉。"</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"已停用「零打擾」設定。"</string>
@@ -237,7 +244,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="7309935569360609114">"無干擾"</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>
@@ -304,26 +311,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"不干擾 (即使鬧鐘也不例外)。"</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"您不會受到聲音和振動干擾 (鬧鐘、提醒、活動和指定來電者例外)。"</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"您不會受到聲音和震動干擾,但鬧鐘、提醒、活動和指定來電者除外。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"自訂"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"不允許干擾"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"僅限優先干擾"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"僅允許鬧鐘"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"下次鬧鐘時間:<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"下次鬧鐘時間:<xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"您不會聽到<xliff:g id="ALARM_TIME">%s</xliff:g> 的鬧鐘"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"這會封鎖「所有」聲音和震動干擾,包括鬧鐘、音樂、影片和遊戲在內。您仍可以撥打電話。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"還有 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g> 則通知"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"較不緊急的通知會顯示在下方"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"再次輕觸即可開啟"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"向上滑動即可解鎖"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"向右滑動可使用手機功能"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"向左滑動可使用相機功能"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"無干擾"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <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_all" msgid="1330581184930945764">"全部"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"無\n干擾"</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="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後充飽)"</string>
@@ -365,12 +369,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"停用 VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"您的裝置由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控及管理與裝置相關的設定、企業網路存取權、應用程式和資料,以及裝置的位置資訊。如需詳細資訊,請洽您的管理員。"</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"您的 Work 設定檔由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控您的網路活動,包括收發電子郵件、使用應用程式及瀏覽安全網站。\n\n如需詳細資訊,請洽您的管理員。"</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"您的裝置由下列機構管理:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>。\n您的 Work 設定檔由以下機構管理:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>。\n\n您的管理員可以監控您的裝置和網路活動,包括收發電子郵件、使用應用程式和瀏覽安全網站。\n\n如需詳細資訊,請洽您的管理員。"</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"您已授權一個應用程式設定 VPN 連線。\n\n這個應用程式可以監控您的裝置和網路活動,包括收發電子郵件、使用應用程式和瀏覽安全網站。"</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"您已授權一個應用程式設定 VPN 連線。\n\n這個應用程式可以監控您的裝置和網路活動,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"您的裝置由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控及管理與裝置相關的設定、企業網路存取權、應用程式和資料,以及裝置的位置資訊。\n\n由於您的裝置已連線至 VPN,您的網路活動也會受到 VPN 監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"您的 Work 設定檔由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控您的網路活動,包括收發電子郵件、使用應用程式及瀏覽安全網站。\n\n如需詳細資訊,請洽您的管理員。\n\n同時,由於您的裝置已連線至 VPN,您的網路活動也會受到 VPN 監控。"</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"您的裝置由下列機構管理:<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>。\n您的 Work 設定檔由以下機構管理:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>。\n\n您的管理員可以監控您的網路活動,包括收發電子郵件、使用應用程式和瀏覽安全網站。\n\n如需詳細資訊,請洽您的管理員。\n\n同時,由於您的裝置已連線至 VPN,您的網路活動也會受到 VPN 監控。"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的 Work 設定檔由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控您的網路活動,包括收發電子郵件、使用應用程式及瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。\n\n同時,由於您的裝置已連線至 VPN,您的網路活動也會受到 VPN 監控。"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"由於您已連線至 <xliff:g id="APPLICATION">%1$s</xliff:g>,您的網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"由於您已連線至 <xliff:g id="APPLICATION">%1$s</xliff:g>,您的個人網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"您的 Work 設定檔由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。由於設定檔已連線至 <xliff:g id="APPLICATION">%2$s</xliff:g>,您的 Work 網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。"</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"您的 Work 設定檔由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。由於設定檔已連線至 <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>,您的工作網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n同時由於您也連線至 <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>,您的個人網路活動也會受到這個應用程式監控。"</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"您的裝置由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控及管理與裝置相關的設定、企業網路存取權、應用程式和資料,以及裝置的位置資訊。\n\n由於您的裝置已連線至 <xliff:g id="APPLICATION">%2$s</xliff:g>,您的網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"在您手動解鎖前,裝置將保持鎖定狀態"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"更快取得通知"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string>
@@ -379,6 +386,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"全部顯示"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"全部隱藏"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"立刻結束"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。同時按住返回按鈕和總覽按鈕即可取消固定。"</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住總覽按鈕即可取消固定。"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index e474a03..689bc99 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -83,9 +83,13 @@
     <string name="accessibility_search_light" msgid="1103867596330271848">"Sesha"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"Ikhamela"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"Ifoni"</string>
+    <!-- no translation found for accessibility_voice_assist_button (487611083884852965) -->
+    <skip />
     <string name="accessibility_unlock_button" msgid="128158454631118828">"Vula"</string>
     <string name="unlock_label" msgid="8779712358041029439">"vula"</string>
     <string name="phone_label" msgid="2320074140205331708">"vula ifoni"</string>
+    <!-- no translation found for voice_assist_label (3956854378310019854) -->
+    <skip />
     <string name="camera_label" msgid="7261107956054836961">"vula ikhamera"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"Khetha isakhiwo somsebenzi omusha"</string>
     <string name="cancel" msgid="6442560571259935130">"Khansela"</string>
@@ -121,6 +125,8 @@
     <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Amabha amabili we-WiMAX."</string>
     <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Amabha amathathu we-WiMAX."</string>
     <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Isiginali ye-WiMAX egcwele."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"I-Ethernet inqanyuliwe."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"I-Ethernet ixhunyiwe."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"Ayikho isignali."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"Akuxhunyiwe"</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"Amabha ayiqanda."</string>
@@ -162,13 +168,14 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ivaliwe."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Zonke izinhlelo zokusebenza zakamuva zicashisiwe."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Iqala i-<xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Isaziso sichithiwe."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Umthunzi wesaziso."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Izilingiselelo ezisheshayo."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Khiya isikrini."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Izilungiselelo"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Buka konke."</string>
-    <string name="accessibility_desc_confirm" msgid="3446792278337969766">"Qinisekisa"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Vala"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Umsebenzisi <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"I-Wifi ivaliwe."</string>
@@ -180,7 +187,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Imodi yendiza ivaliwe."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Imodi yendiza ivuliwe."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Ukungaphazamisi kuvuliwe, okubalulekile kuphela."</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Ungaphazamisi, akukho ukuphazamiseka."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Ungaphazamisi, ukuthula okuphelele."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Ukungaphazamisi kuvuliwe, ama-alamu kuphela."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Ukungaphazamisi kuvaliwe."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Ukungaphazamisi kuvaliwe."</string>
@@ -235,7 +242,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ungaphazamisi"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Okubalulekile kuphela"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Ama-alamu kuphela"</string>
-    <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Azikho iziphazamiso"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Ukuthula okuphelele"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"I-Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"I-Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> amadivayisi)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"I-Bluetooth ivaliwe"</string>
@@ -302,26 +309,23 @@
     <string name="description_target_search" msgid="3091587249776033139">"Sesha"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Shelelisela ngenhla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Shelelisela ngakwesokunxele ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Akukho ukuphazamiseka. Nama-alamu imbala."</string>
-    <string name="zen_priority_introduction" msgid="7253045784560169993">"Ngeke uze uphazanyiswe yimisindo nokudlidliza, ngaphandle kokuvela kuma-alamu, izikhumbuzi, imicimbi, nabashayi obacacisayo."</string>
+    <string name="zen_priority_introduction" msgid="3070506961866919502">"Ngeke uze uphazanyiswe yimisindo nokudlidliza, ngaphandle kokuvela kuma-alamu, izikhumbuzi, imicimbi, nabashayi obacacisayo."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Enza ngendlela oyifisayo"</string>
-    <string name="zen_no_interruptions" msgid="7970973750143632592">"Azikho iziphazamiso"</string>
-    <string name="zen_important_interruptions" msgid="3477041776609757628">"Iziphazamiso ezibalulekile kuphela"</string>
-    <string name="zen_alarms" msgid="5055668280767657759">"Ama-alamu kuphela"</string>
-    <string name="zen_alarm_information_time" msgid="5235772206174372272">"I-alamu yakho elandelayo ingo<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"I-alamu yakho elandelayo ingo-<xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string>
-    <string name="zen_alarm_warning" msgid="6873910860111498041">"Ngeke uzwe i-alamu yakho ngo-<xliff:g id="ALARM_TIME">%s</xliff:g>"</string>
+    <string name="zen_silence_introduction" msgid="575422795504098868">"Lokhu kuvimbela YONKE imisindo nokudludliza, kufaka phakathi ama-alamu, umculo, amavidiyo, namageyimu. Usazokwazi ukwenza amkholi wefoni."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Izaziso ezingasheshi kakhulu ezingezansi"</string>
     <string name="notification_tap_again" msgid="8524949573675922138">"Thinta futhi ukuze uvule"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Swayiphela phezulu ukuze uvule"</string>
-    <string name="phone_hint" msgid="3101468054914424646">"Swayiphela ngakwesokudla ukuze uthole ifoni"</string>
-    <string name="camera_hint" msgid="5241441720959174226">"Swayiphela ngakwesokunxele ukuze uthole ikhamela"</string>
-    <string name="interruption_level_none" msgid="8284541443482072628">"Azikho iziphazamiso"</string>
+    <!-- no translation found for phone_hint (4872890986869209950) -->
+    <skip />
+    <!-- no translation found for voice_hint (8939888732119726665) -->
+    <skip />
+    <!-- no translation found for camera_hint (7939688436797157483) -->
+    <skip />
+    <string name="interruption_level_none" msgid="6000083681244492992">"Ukuthula okuphelele"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Okubalulekile kuphela"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"Ama-alamu kuphela"</string>
-    <string name="interruption_level_all" msgid="1330581184930945764">"Konke"</string>
-    <string name="interruption_level_none_twoline" msgid="3942121050170227056">"Akukho\nukuphazamiseka"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Ukuthula\niokuphelele"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Okubalulekile\nkuphela"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Ama-alamu\nkuphela"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Iyashaja (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
@@ -363,12 +367,15 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Khubaza i-VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Nqamula i-VPN"</string>
     <string name="monitoring_description_device_owned" msgid="5780988291898461883">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmlawuli wakho angaqapha aphinde aphathe izilungiselelo, ukufinyelela kwenkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, kanye nolwazi lwendawo yedivayisi yakho. Ukuze uthole olunye ulwazi xhumana nomlawuli wakho."</string>
-    <string name="monitoring_description_profile_owned" msgid="8110044290898637925">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmlawuli wakho uyakwazi ukuqapha umsebenzi wenethiwekhi yakho ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi avikelekile.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho."</string>
-    <string name="monitoring_description_device_and_profile_owned" msgid="1664428184778531249">"Idivayisi yakho iphethwe yi-:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nIphrofayela yakho yomsebenzi iphethwe yi-:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nUmlawuli wakho angaqapha idivayisi yakho nomsebenzi wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi aphephile.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho."</string>
-    <string name="monitoring_description_vpn" msgid="912328761766161919">"Unikeze uhlelo lokusebenza imvume yokusetha ukuxhumeka kwe-VPN.\n\nLolu hlelo lokusebenza lungaqapha idivayisi yakho nomsebenzi wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi avikelekile."</string>
+    <string name="monitoring_description_vpn" msgid="996222259035614736">"Unikeze uhlelo lokusebenza imvume yokuthi lusethe ukuxhumeka kwe-VPN.\n\nLolu hlelo lokusebenza lungagada idivayisi yakho kanye nomsebenzi wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi."</string>
     <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmlawuli wakho angaqapha aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, kanye nolwazi lwendawo yedivayisi yakho.\n\nUxhumeke ku-VPN, engaqapha umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2224494839524715272">"Iphrofayela yakho yomsebenzi iphethwe ngu-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmlawuli wakho uyakwazi ukuqapha umsebenzi wakho wenethiwekhi ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi avikelekile.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho.\n\nFuthi uxhumeke ku-VPN, engaqapha umsebenzi wakho wenethiwekhi."</string>
-    <string name="monitoring_description_vpn_device_and_profile_owned" msgid="2198546817407897093">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>.\nIphrofayela yakho yokusebenza iphethwe yi-:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>.\n\nUmlawuli wakho uyakwazi ukuqapha umsebenzi wenethiwekhi yakho ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi avikelekile.\n\nUkuze uthole olunye ulwazi, xhumana nomlawuli wakho.\n\nFuthi uxhumeke ku-VPN, engaqapha umsebenzi wakho siqu wenethiwekhi"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmqondisi wakho unamandla wokuqaphela umsebenzi wenethiwekhi yakho ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho.\n\nFuthi uxhumeke ku-VPN, engaqaphela umsebenzi wenethiwekhi yakho."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"I-VPN"</string>
+    <string name="monitoring_description_app" msgid="6947928635272782570">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engaqaphela umsebenzi wenethiwekhi yakho ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi."</string>
+    <string name="monitoring_description_app_personal" msgid="8506133233655324426">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engaqaphela umsebenzi wakho womuntu siqu wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi."</string>
+    <string name="monitoring_description_app_work" msgid="808687576155832307">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION">%2$s</xliff:g>, engaqaphela umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho."</string>
+    <string name="monitoring_description_app_personal_work" msgid="7711690793960304868">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, engaqaphela umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nFuthi uxhumeke ku-<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, engaqaphela umsebenzi wenethiwekhi yakho yomuntu siqu."</string>
+    <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmqondisi wakho angaqaphela aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, nolwazi lendawo yedivayisi yakho.\n\nUxhumeke ku-<xliff:g id="APPLICATION">%2$s</xliff:g>, engaqaphela umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho."</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Idivayisi izohlala ikhiyekile uze uyivule ngokwenza"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"Thola izaziso ngokushesha"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"Ibone ngaphambi kokuthi uyivule"</string>
@@ -377,6 +384,11 @@
     <string name="notification_expand_button_text" msgid="1037425494153780718">"Buka konke"</string>
     <string name="notification_collapse_button_text" msgid="6883253262134328057">"Fihla wonke"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="3179845345429841822">"Qeda manje"</string>
+    <!-- no translation found for accessibility_volume_expand (5946812790999244205) -->
+    <skip />
+    <!-- no translation found for accessibility_volume_collapse (3609549593031810875) -->
+    <skip />
     <string name="screen_pinning_title" msgid="3273740381976175811">"Isikrini siphiniwe"</string>
     <string name="screen_pinning_description" msgid="1346522416878235405">"Lokhu kukugcina kubukeka uze ususe ukuphina. Thinta futhi ubambe u-Emuva no-Ukubuka konke ngesikhathi esisodwa ukuze ususe ukuphina."</string>
     <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Lokhu kukugcina kubukeka uze ususe ukuphina. Thinta futhi ubambe u-Ukubuka konke ukuze ususe ukuphina."</string>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 7a108ed..0dcbe88 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -127,6 +127,7 @@
     <color name="screen_pinning_request_bg">#ff009688</color><!-- deep teal 500 -->
     <color name="screen_pinning_request_window_bg">#80000000</color>
 
+    <color name="segmented_buttons_background">#14FFFFFF</color><!-- 8% white -->
     <color name="segmented_button_selected">#FFFFFFFF</color>
     <color name="segmented_button_unselected">#FFB0BEC5</color><!-- blue grey 200 -->
 
@@ -141,4 +142,5 @@
     <color name="zen_introduction_message_background">#ff009688</color><!-- deep teal 500 -->
     <color name="volume_icon_color">#ffffffff</color>
     <color name="volume_settings_icon_color">#7fffffff</color>
+    <color name="volume_slider_inactive">#FFB0BEC5</color><!-- blue grey 200 -->
 </resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index a0ef5e2..62e0f3d 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -16,9 +16,6 @@
 */
 -->
 <resources>
-    <!-- Margin at the edge of the screen to ignore touch events for in the windowshade. -->
-    <dimen name="status_bar_edge_ignore">5dp</dimen>
-
     <!-- Recent Applications parameters -->
     <!-- Upper width limit for application icon -->
     <dimen name="status_bar_recents_app_icon_max_width">48dp</dimen>
@@ -191,7 +188,7 @@
     <dimen name="qs_data_usage_text_size">14sp</dimen>
     <dimen name="qs_data_usage_usage_text_size">36sp</dimen>
 
-    <dimen name="segmented_button_spacing">8dp</dimen>
+    <dimen name="segmented_button_spacing">0dp</dimen>
     <dimen name="borderless_button_radius">2dp</dimen>
 
     <!-- How far the expanded QS panel peeks from the header in collapsed state. -->
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 8b50774..8606a59 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -205,6 +205,8 @@
     <string name="accessibility_camera_button">Camera</string>
     <!-- Content description of the phone button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
     <string name="accessibility_phone_button">Phone</string>
+    <!-- Content description of the phone button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
+    <string name="accessibility_voice_assist_button">Voice Assist</string>
     <!-- Content description of the unlock button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
     <string name="accessibility_unlock_button">Unlock</string>
     <!-- Click action label for accessibility for the unlock button. [CHAR LIMIT=NONE] -->
@@ -212,6 +214,8 @@
     <!-- Click action label for accessibility for the phone button. [CHAR LIMIT=NONE] -->
     <string name="phone_label">open phone</string>
     <!-- Click action label for accessibility for the phone button. [CHAR LIMIT=NONE] -->
+    <string name="voice_assist_label">open voice assist</string>
+    <!-- Click action label for accessibility for the phone button. [CHAR LIMIT=NONE] -->
     <string name="camera_label">open camera</string>
     <!-- Caption for "Recents resize" developer debug feature. [CHAR LIMIT=NONE] -->
     <string name="recents_caption_resize">Select new task layout</string>
@@ -293,6 +297,11 @@
     <!-- Content description of the WiMAX signal when it is full for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
     <string name="accessibility_wimax_signal_full">WiMAX signal full.</string>
 
+    <!-- Content description of the Ethernet connection when disconnected for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
+    <string name="accessibility_ethernet_disconnected">Ethernet disconnected.</string>
+    <!-- Content description of the Ethernet connection when connected for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
+    <string name="accessibility_ethernet_connected">Ethernet connected.</string>
+
     <!-- Content description of an item with no signal for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
     <string name="accessibility_no_signal">No signal.</string>
     <!-- Content description of an item with no signal and no connection for accessibility (not shown on the screen) [CHAR LIMIT=NONE] -->
@@ -400,6 +409,8 @@
     <string name="accessibility_recents_all_items_dismissed">All recent applications dismissed.</string>
     <!-- Content description to tell the user an application has been launched from recents -->
     <string name="accessibility_recents_item_launched">Starting <xliff:g id="app" example="Calendar">%s</xliff:g>.</string>
+    <!-- Content description of individual recents task. -->
+    <string name="accessibility_recents_task_header"><xliff:g id="app" example="Chrome">%1$s</xliff:g> <xliff:g id="activity_label" example="www.google.com">%2$s</xliff:g></string>
     <!-- Content description to tell the user a notification has been removed from the notification shade -->
     <string name="accessibility_notification_dismissed">Notification dismissed.</string>
 
@@ -413,8 +424,8 @@
     <string name="accessibility_desc_settings">Settings</string>
     <!-- Content description for the recent apps panel (not shown on the screen). [CHAR LIMIT=NONE] -->
     <string name="accessibility_desc_recent_apps">Overview.</string>
-    <!-- Content description for the confirm button in the zen mode panel introduction message. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_desc_confirm">Confirm</string>
+    <!-- Content description for the close button in the zen mode panel introduction message. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_desc_close">Close</string>
 
     <!-- Content description of the user tile in quick settings (not shown on the screen). [CHAR LIMIT=NONE] -->
     <string name="accessibility_quick_settings_user">User <xliff:g id="user" example="John Doe">%s</xliff:g>.</string>
@@ -746,28 +757,31 @@
     <!-- Shows when people have pressed the unlock icon to explain how to unlock. [CHAR LIMIT=60] -->
     <string name="keyguard_unlock">Swipe up to unlock</string>
 
-    <!-- Shows when people have clicked at the left edge of the screen to explain how to open the phone. In right-to-left languages, this is the opposite direction. [CHAR LIMIT=60] -->
-    <string name="phone_hint">Swipe right for phone</string>
+    <!-- Shows when people have clicked on the phone icon [CHAR LIMIT=60] -->
+    <string name="phone_hint">Swipe from icon for phone</string>
 
-    <!-- Shows when people have clicked at the right edge of the screen to explain how to open the phone. In right-to-left languages, this is the opposite direction. [CHAR LIMIT=60] -->
-    <string name="camera_hint">Swipe left for camera</string>
+    <!-- Shows when people have clicked on the voice assist icon [CHAR LIMIT=60] -->
+    <string name="voice_hint">Swipe from icon for voice assist</string>
 
-    <!-- Interruption level: None. [CHAR LIMIT=20] -->
+    <!-- Shows when people have clicked on the camera icon [CHAR LIMIT=60] -->
+    <string name="camera_hint">Swipe from icon for camera</string>
+
+    <!-- Interruption level: None. [CHAR LIMIT=40] -->
     <string name="interruption_level_none">Total silence</string>
 
-    <!-- Interruption level: Priority. [CHAR LIMIT=20] -->
+    <!-- Interruption level: Priority. [CHAR LIMIT=40] -->
     <string name="interruption_level_priority">Priority only</string>
 
-    <!-- Interruption level: Alarms only. [CHAR LIMIT=20] -->
+    <!-- Interruption level: Alarms only. [CHAR LIMIT=40] -->
     <string name="interruption_level_alarms">Alarms only</string>
 
-    <!-- Interruption level: None.  Optimized for narrow two-line display. [CHAR LIMIT=20] -->
+    <!-- Interruption level: None.  Optimized for narrow two-line display. [CHAR LIMIT=40] -->
     <string name="interruption_level_none_twoline">Total\nsilence</string>
 
-    <!-- Interruption level: Priority.  Optimized for narrow two-line display. [CHAR LIMIT=20] -->
+    <!-- Interruption level: Priority.  Optimized for narrow two-line display. [CHAR LIMIT=40] -->
     <string name="interruption_level_priority_twoline">Priority\nonly</string>
 
-    <!-- Interruption level: Alarms only.  Optimized for narrow two-line display. [CHAR LIMIT=20] -->
+    <!-- Interruption level: Alarms only.  Optimized for narrow two-line display. [CHAR LIMIT=40] -->
     <string name="interruption_level_alarms_twoline">Alarms\nonly</string>
 
     <!-- Indication on the keyguard that is shown when the device is charging. [CHAR LIMIT=40]-->
@@ -890,23 +904,32 @@
     <!-- Monitoring dialog device owner body text [CHAR LIMIT=400] -->
     <string name="monitoring_description_device_owned">Your device is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information. For more information, contact your administrator.</string>
 
-    <!-- Monitoring dialog profile owner body text [CHAR LIMIT=400] -->
-    <string name="monitoring_description_profile_owned">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites.\n\nFor more information, contact your administrator.</string>
-
-    <!-- Monitoring dialog device and profile owner body text [CHAR LIMIT=400] -->
-    <string name="monitoring_description_device_and_profile_owned">Your device is managed by:\n<xliff:g id="organization">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="organization">%2$s</xliff:g>.\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator.</string>
-
     <!-- Monitoring dialog VPN text [CHAR LIMIT=400] -->
-    <string name="monitoring_description_vpn">You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and secure websites.</string>
+    <string name="monitoring_description_vpn">You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites.</string>
 
     <!-- Monitoring dialog VPN with device owner text [CHAR LIMIT=400] -->
     <string name="monitoring_description_vpn_device_owned">Your device is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to a VPN, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator.</string>
 
     <!-- Monitoring dialog VPN with profile owner text [CHAR LIMIT=400] -->
-    <string name="monitoring_description_vpn_profile_owned">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity.</string>
+    <string name="monitoring_description_vpn_profile_owned">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity.</string>
 
-    <!-- Monitoring dialog VPN with device and profile owner text [CHAR LIMIT=400] -->
-    <string name="monitoring_description_vpn_device_and_profile_owned">Your device is managed by <xliff:g id="organization">%1$s</xliff:g>.\nYour work profile is managed by:\n<xliff:g id="organization">%2$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and secure websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your personal network activity</string>
+    <!-- Name for a generic legacy VPN connection [CHAR LIMIT=20] -->
+    <string name="legacy_vpn_name">VPN</string>
+
+    <!-- Monitoring dialog text for single app (no profile or device owner) [CHAR LIMIT=400] -->
+    <string name="monitoring_description_app">You\'re connected to <xliff:g id="application">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites.</string>
+
+    <!-- Monitoring dialog text for single app (inside personal profile) [CHAR LIMIT=400] -->
+    <string name="monitoring_description_app_personal">You\'re connected to <xliff:g id="application">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites.</string>
+
+    <!-- Monitoring dialog text for single app (inside work profile) [CHAR LIMIT=400] -->
+    <string name="monitoring_description_app_work">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>. It is connected to <xliff:g id="application">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator.</string>
+
+    <!-- Monitoring dialog text for multiple apps (in personal and work profiles) [CHAR LIMIT=400] -->
+    <string name="monitoring_description_app_personal_work">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>. It is connected to <xliff:g id="application_work">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="application_personal">%3$s</xliff:g>, which can monitor your personal network activity.</string>
+
+    <!-- Monitoring dialog text for single app (with device owner) [CHAR LIMIT=400] -->
+    <string name="monitoring_description_vpn_app_device_owned">Your device is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="application">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator.</string>
 
     <!-- Indication on the keyguard that appears when the user disables trust agents until the next time they unlock manually. [CHAR LIMIT=NONE] -->
     <string name="keyguard_indication_trust_disabled">Device will stay locked until you manually unlock</string>
@@ -935,6 +958,12 @@
     <!-- Button label for ending zen mode in the volume dialog -->
     <string name="volume_zen_end_now">End now</string>
 
+    <!-- Content description for accessibility (not shown on the screen): volume dialog expand button. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_volume_expand">Expand</string>
+
+    <!-- Content description for accessibility (not shown on the screen): volume dialog collapse button. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_volume_collapse">Collapse</string>
+
     <!-- Screen pinning dialog title. -->
     <string name="screen_pinning_title">Screen is pinned</string>
     <!-- Screen pinning dialog description. -->
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index c058d44..6709095 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -166,6 +166,7 @@
 
     <style name="TextAppearance.QS.SegmentedButton">
         <item name="android:textSize">16sp</item>
+        <item name="android:fontFamily">sans-serif-medium</item>
     </style>
 
     <style name="TextAppearance.QS.DataUsage">
diff --git a/packages/SystemUI/src/com/android/systemui/EventLogConstants.java b/packages/SystemUI/src/com/android/systemui/EventLogConstants.java
index c8af2d4..43a1be1 100644
--- a/packages/SystemUI/src/com/android/systemui/EventLogConstants.java
+++ b/packages/SystemUI/src/com/android/systemui/EventLogConstants.java
@@ -34,4 +34,10 @@
     public static final int SYSUI_LOCKSCREEN_GESTURE_TAP_LOCK = 6;
     /** The user tapped a notification, needs to tap again to launch. */
     public static final int SYSUI_LOCKSCREEN_GESTURE_TAP_NOTIFICATION_ACTIVATE = 7;
+    /** The user swiped down to open quick settings, from keyguard. */
+    public static final int SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS = 8;
+    /** The user swiped down to open quick settings, from shade. */
+    public static final int SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS = 9;
+    /** The user tapped on the status bar to open quick settings, from shade. */
+    public static final int SYSUI_TAP_TO_OPEN_QS = 10;
 }
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistGestureManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
similarity index 92%
rename from packages/SystemUI/src/com/android/systemui/assist/AssistGestureManager.java
rename to packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index 36be355..d1f8963 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistGestureManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -33,11 +33,11 @@
 import com.android.systemui.statusbar.phone.PhoneStatusBar;
 
 /**
- * Class to manage everything around the assist gesture.
+ * Class to manage everything related to assist in SystemUI.
  */
-public class AssistGestureManager {
+public class AssistManager {
 
-    private static final String TAG = "AssistGestureManager";
+    private static final String TAG = "AssistManager";
     private static final String ASSIST_ICON_METADATA_NAME =
             "com.android.systemui.action_assist_icon";
 
@@ -77,7 +77,7 @@
         }
     };
 
-    public AssistGestureManager(PhoneStatusBar bar, Context context) {
+    public AssistManager(PhoneStatusBar bar, Context context) {
         mContext = context;
         mBar = bar;
         mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
@@ -194,16 +194,33 @@
         }
     }
 
+    public void launchVoiceAssistFromKeyguard() {
+        try {
+            mVoiceInteractionManagerService.launchVoiceAssistFromKeyguard();
+        } catch (RemoteException e) {
+            Log.w(TAG, "Failed to call launchVoiceAssistFromKeyguard", e);
+        }
+    }
+
     private boolean getVoiceInteractorSupportsAssistGesture() {
         try {
-            return mVoiceInteractionManagerService.activeServiceSupportsAssistGesture();
+            return mVoiceInteractionManagerService.activeServiceSupportsAssist();
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to call activeServiceSupportsAssistGesture", e);
             return false;
         }
     }
 
-    private ComponentName getVoiceInteractorComponentName() {
+    public boolean canVoiceAssistBeLaunchedFromKeyguard() {
+        try {
+            return mVoiceInteractionManagerService.activeServiceSupportsLaunchFromKeyguard();
+        } catch (RemoteException e) {
+            Log.w(TAG, "Failed to call activeServiceSupportsLaunchFromKeyguard", e);
+            return false;
+        }
+    }
+
+    public ComponentName getVoiceInteractorComponentName() {
         try {
             return mVoiceInteractionManagerService.getActiveServiceComponentName();
         } catch (RemoteException e) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
index d8e3984..f59e864 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
@@ -110,21 +110,15 @@
     }
 
     private void handleRefreshState() {
-        if (mSecurityController.hasDeviceOwner()) {
+        boolean hasDeviceOwner = mSecurityController.hasDeviceOwner();
+        boolean hasVpn = mSecurityController.isVpnEnabled();
+
+        mIsVisible = (hasVpn || hasDeviceOwner);
+        mIsIconVisible = hasVpn;
+        if (hasDeviceOwner) {
             mFooterTextId = R.string.device_owned_footer;
-            mIsVisible = true;
-            mIsIconVisible = false;
-        } else if (mSecurityController.hasProfileOwner()) {
-            mFooterTextId = R.string.profile_owned_footer;
-            mIsVisible = true;
-            mIsIconVisible = false;
-        } else if (mSecurityController.isVpnEnabled()) {
-            mFooterTextId = R.string.vpn_footer;
-            mIsVisible = true;
-            mIsIconVisible = true;
         } else {
-            mIsVisible = false;
-            mIsIconVisible = false;
+            mFooterTextId = R.string.vpn_footer;
         }
         mMainHandler.post(mUpdateDisplayState);
     }
@@ -162,37 +156,17 @@
 
     private String getMessage(boolean hasDeviceOwner, boolean hasProfile, boolean hasVpn) {
         if (hasDeviceOwner) {
-            if (hasProfile) {
-                if (hasVpn) {
-                    return mContext.getString(
-                            R.string.monitoring_description_vpn_device_and_profile_owned,
-                            mSecurityController.getDeviceOwnerName(),
-                            mSecurityController.getProfileOwnerName());
-                } else {
-                    return mContext.getString(
-                            R.string.monitoring_description_device_and_profile_owned,
-                            mSecurityController.getDeviceOwnerName(),
-                            mSecurityController.getProfileOwnerName());
-                }
+            if (hasVpn) {
+                return mContext.getString(R.string.monitoring_description_vpn_device_owned,
+                        mSecurityController.getDeviceOwnerName());
             } else {
-                if (hasVpn) {
-                    return mContext.getString(R.string.monitoring_description_vpn_device_owned,
-                            mSecurityController.getDeviceOwnerName());
-                } else {
-                    return mContext.getString(R.string.monitoring_description_device_owned,
-                            mSecurityController.getDeviceOwnerName());
-                }
+                return mContext.getString(R.string.monitoring_description_device_owned,
+                        mSecurityController.getDeviceOwnerName());
             }
         } else if (hasProfile) {
-            if (hasVpn) {
-                return mContext.getString(
-                        R.string.monitoring_description_vpn_profile_owned,
-                        mSecurityController.getProfileOwnerName());
-            } else {
-                return mContext.getString(
-                        R.string.monitoring_description_profile_owned,
-                        mSecurityController.getProfileOwnerName());
-            }
+            return mContext.getString(
+                    R.string.monitoring_description_vpn_profile_owned,
+                    mSecurityController.getProfileOwnerName());
         } else {
             return mContext.getString(R.string.monitoring_description_vpn);
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index b5c1ca8..ebb07a0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -33,6 +33,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.FontSizeUtils;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSTile.DetailAdapter;
@@ -182,8 +183,11 @@
     public void setExpanded(boolean expanded) {
         if (mExpanded == expanded) return;
         mExpanded = expanded;
+        MetricsLogger.visibility(mContext, MetricsLogger.QS_PANEL, mExpanded);
         if (!mExpanded) {
             closeDetail();
+        } else {
+            logTiles();
         }
     }
 
@@ -243,6 +247,12 @@
         }
     }
 
+    private void drawTile(TileRecord r, QSTile.State state) {
+        final int visibility = state.visible ? VISIBLE : GONE;
+        setTileVisibility(r.tileView, visibility);
+        r.tileView.onStateChanged(state);
+    }
+
     private void addTile(final QSTile<?> tile) {
         final TileRecord r = new TileRecord();
         r.tile = tile;
@@ -251,9 +261,9 @@
         final QSTile.Callback callback = new QSTile.Callback() {
             @Override
             public void onStateChanged(QSTile.State state) {
-                int visibility = state.visible ? VISIBLE : GONE;
-                setTileVisibility(r.tileView, visibility);
-                r.tileView.onStateChanged(state);
+                if (!r.openingDetail) {
+                    drawTile(r, state);
+                }
             }
             @Override
             public void onShowDetail(boolean show) {
@@ -365,9 +375,14 @@
             mDetailContent.removeAllViews();
             mDetail.bringToFront();
             mDetailContent.addView(r.detailView);
+            MetricsLogger.visible(mContext, detailAdapter.getMetricsCategory());
             setDetailRecord(r);
             listener = mHideGridContentWhenDone;
+            if (r instanceof TileRecord) {
+                ((TileRecord) r).openingDetail = true;
+            }
         } else {
+            MetricsLogger.hidden(mContext, mDetailRecord.detailAdapter.getMetricsCategory());
             mClosingDetail = true;
             setGridContentVisibility(true);
             listener = mTeardownDetailWhenDone;
@@ -387,9 +402,21 @@
             }
         }
         mBrightnessView.setVisibility(newVis);
+        if (mGridContentVisible != visible) {
+            MetricsLogger.visibility(mContext, MetricsLogger.QS_PANEL, newVis);
+        }
         mGridContentVisible = visible;
     }
 
+    private void logTiles() {
+        for (int i = 0; i < mRecords.size(); i++) {
+            TileRecord tileRecord = mRecords.get(i);
+            if (tileRecord.tile.getState().visible) {
+                MetricsLogger.visible(mContext, tileRecord.tile.getMetricsCategory());
+            }
+        }
+    }
+
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         final int width = MeasureSpec.getSize(widthMeasureSpec);
@@ -539,6 +566,7 @@
         int row;
         int col;
         boolean scanState;
+        boolean openingDetail;
     }
 
     private final AnimatorListenerAdapter mTeardownDetailWhenDone = new AnimatorListenerAdapter() {
@@ -554,6 +582,7 @@
             // If we have been cancelled, remove the listener so that onAnimationEnd doesn't get
             // called, this will avoid accidentally turning off the grid when we don't want to.
             animation.removeListener(this);
+            redrawTile();
         };
 
         @Override
@@ -561,6 +590,15 @@
             // Only hide content if still in detail state.
             if (mDetailRecord != null) {
                 setGridContentVisibility(false);
+                redrawTile();
+            }
+        }
+
+        private void redrawTile() {
+            if (mDetailRecord instanceof TileRecord) {
+                final TileRecord tileRecord = (TileRecord) mDetailRecord;
+                tileRecord.openingDetail = false;
+                drawTile(tileRecord, tileRecord.tile.getState());
             }
         }
     };
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
index b9574dc..3b217df 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
@@ -24,11 +24,13 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
+import android.text.TextUtils;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.qs.QSTile.State;
 import com.android.systemui.statusbar.policy.BluetoothController;
 import com.android.systemui.statusbar.policy.CastController;
@@ -69,6 +71,15 @@
     abstract protected void handleClick();
     abstract protected void handleUpdateState(TState state, Object arg);
 
+    /**
+     * Declare the category of this tile.
+     *
+     * Categories are defined in {@link com.android.internal.logging.MetricsLogger}
+     * or if there is no relevant existing category you may define one in
+     * {@link com.android.systemui.qs.QSTile}.
+     */
+    abstract public int getMetricsCategory();
+
     protected QSTile(Host host) {
         mHost = host;
         mContext = host.getContext();
@@ -97,6 +108,7 @@
         View createDetailView(Context context, View convertView, ViewGroup parent);
         Intent getSettingsIntent();
         void setToggleState(boolean state);
+        int getMetricsCategory();
     }
 
     // safe to call from any thread
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
index 2bc31fc..49f8d1c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -23,6 +23,7 @@
 import android.net.ConnectivityManager;
 import android.provider.Settings.Global;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.qs.GlobalSetting;
 import com.android.systemui.qs.QSTile;
@@ -55,6 +56,7 @@
 
     @Override
     public void handleClick() {
+        MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
         setEnabled(!mState.value);
         mEnable.setAllowAnimation(true);
         mDisable.setAllowAnimation(true);
@@ -85,6 +87,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_AIRPLANEMODE;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (mState.value) {
             return mContext.getString(R.string.accessibility_quick_settings_airplane_changed_on);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index b42b5f6..ed954bb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -25,6 +25,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSDetailItems;
@@ -75,6 +76,7 @@
     @Override
     protected void handleClick() {
         final boolean isEnabled = (Boolean)mState.value;
+        MetricsLogger.action(mContext, getMetricsCategory(), !isEnabled);
         mController.setBluetoothEnabled(!isEnabled);
     }
 
@@ -132,6 +134,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_BLUETOOTH;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (mState.value) {
             return mContext.getString(R.string.accessibility_quick_settings_bluetooth_changed_on);
@@ -177,11 +184,17 @@
 
         @Override
         public void setToggleState(boolean state) {
+            MetricsLogger.action(mContext, MetricsLogger.QS_BLUETOOTH_TOGGLE, state);
             mController.setBluetoothEnabled(state);
             showDetail(false);
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsLogger.QS_BLUETOOTH_DETAILS;
+        }
+
+        @Override
         public View createDetailView(Context context, View convertView, ViewGroup parent) {
             mItems = QSDetailItems.convertOrInflate(context, convertView, parent);
             mItems.setTagSuffix("Bluetooth");
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index 5bf6fb5..c06ea66 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -24,6 +24,7 @@
 import android.view.View.OnAttachStateChangeListener;
 import android.view.ViewGroup;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSDetailItems;
 import com.android.systemui.qs.QSDetailItems.Item;
@@ -85,6 +86,7 @@
 
     @Override
     protected void handleClick() {
+        MetricsLogger.action(mContext, getMetricsCategory());
         showDetail(true);
     }
 
@@ -113,6 +115,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_CAST;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (!mState.value) {
             // We only announce when it's turned off to avoid vocal overflow.
@@ -164,6 +171,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsLogger.QS_CAST_DETAILS;
+        }
+
+        @Override
         public View createDetailView(Context context, View convertView, ViewGroup parent) {
             mItems = QSDetailItems.convertOrInflate(context, convertView, parent);
             mItems.setTagSuffix("Cast");
@@ -234,6 +246,7 @@
         @Override
         public void onDetailItemClick(Item item) {
             if (item == null || item.tag == null) return;
+            MetricsLogger.action(mContext, MetricsLogger.QS_CAST_SELECT);
             final CastDevice device = (CastDevice) item.tag;
             mController.startCasting(device);
         }
@@ -241,6 +254,7 @@
         @Override
         public void onDetailItemDisconnect(Item item) {
             if (item == null || item.tag == null) return;
+            MetricsLogger.action(mContext, MetricsLogger.QS_CAST_DISCONNECT);
             final CastDevice device = (CastDevice) item.tag;
             mController.stopCasting(device);
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
index 30f92b9..1721335 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -24,6 +24,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSTile;
 import com.android.systemui.qs.QSTileView;
@@ -75,6 +76,7 @@
 
     @Override
     protected void handleClick() {
+        MetricsLogger.action(mContext, getMetricsCategory());
         if (mDataController.isMobileDataSupported()) {
             showDetail(true);
         } else {
@@ -118,6 +120,11 @@
                 state.label);
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_CELLULAR;
+    }
+
     // Remove the period from the network name
     public static String removeTrailingPeriod(String string) {
         if (string == null) return null;
@@ -223,10 +230,16 @@
 
         @Override
         public void setToggleState(boolean state) {
+            MetricsLogger.action(mContext, MetricsLogger.QS_CELLULAR_TOGGLE, state);
             mDataController.setMobileDataEnabled(state);
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsLogger.QS_DATAUSAGEDETAIL;
+        }
+
+        @Override
         public View createDetailView(Context context, View convertView, ViewGroup parent) {
             final DataUsageDetailView v = (DataUsageDetailView) (convertView != null
                     ? convertView
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
index 4a33f55..c6fc6ff 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -18,6 +18,7 @@
 
 import android.provider.Settings.Secure;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSTile;
@@ -86,6 +87,7 @@
 
     @Override
     protected void handleClick() {
+        MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
         mSetting.setValue(mState.value ? 0 : 1);
         mEnable.setAllowAnimation(true);
         mDisable.setAllowAnimation(true);
@@ -115,6 +117,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_COLORINVERSION;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (mState.value) {
             return mContext.getString(
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index 5145bc7..8205798 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -29,6 +29,7 @@
 import android.view.View.OnAttachStateChangeListener;
 import android.view.ViewGroup;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSTile;
@@ -88,12 +89,12 @@
 
     @Override
     public void handleClick() {
+        MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
         if (mState.value) {
             mController.setZen(Global.ZEN_MODE_OFF, null, TAG);
         } else {
             int zen = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, Global.ZEN_MODE_ALARMS);
             mController.setZen(zen, null, TAG);
-            refreshState(zen); // this one's optimistic
             showDetail(true);
         }
     }
@@ -135,6 +136,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_DND;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (mState.value) {
             return mContext.getString(R.string.accessibility_quick_settings_dnd_changed_on);
@@ -202,6 +208,7 @@
 
         @Override
         public void setToggleState(boolean state) {
+            MetricsLogger.action(mContext, MetricsLogger.QS_DND_TOGGLE, state);
             if (!state) {
                 mController.setZen(Global.ZEN_MODE_OFF, null, TAG);
                 showDetail(false);
@@ -209,6 +216,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsLogger.QS_DND_DETAILS;
+        }
+
+        @Override
         public View createDetailView(Context context, View convertView, ViewGroup parent) {
             final ZenModePanel zmp = convertView != null ? (ZenModePanel) convertView
                     : (ZenModePanel) LayoutInflater.from(context).inflate(
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
index cb78deb..0369ab5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -18,6 +18,7 @@
 
 import android.app.ActivityManager;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSTile;
 import com.android.systemui.statusbar.policy.FlashlightController;
@@ -62,6 +63,7 @@
         if (ActivityManager.isUserAMonkey()) {
             return;
         }
+        MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
         boolean newState = !mState.value;
         refreshState(newState ? UserBoolean.USER_TRUE : UserBoolean.USER_FALSE);
         mFlashlightController.setFlashlight(newState);
@@ -84,6 +86,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_FLASHLIGHT;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (mState.value) {
             return mContext.getString(R.string.accessibility_quick_settings_flashlight_changed_on);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
index 6063f80..f28a24b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.qs.UsageTracker;
@@ -69,6 +70,7 @@
     @Override
     protected void handleClick() {
         final boolean isEnabled = (Boolean) mState.value;
+        MetricsLogger.action(mContext, getMetricsCategory(), !isEnabled);
         mController.setHotspotEnabled(!isEnabled);
         mEnable.setAllowAnimation(true);
         mDisable.setAllowAnimation(true);
@@ -97,6 +99,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_HOTSPOT;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (mState.value) {
             return mContext.getString(R.string.accessibility_quick_settings_hotspot_changed_on);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
index 2736530..19f4df6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
@@ -29,6 +29,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.qs.QSTile;
 
 import java.util.Arrays;
@@ -42,6 +43,7 @@
     private PendingIntent mOnLongClick;
     private String mOnLongClickUri;
     private int mCurrentUserId;
+    private String mIntentPackage;
 
     private IntentTile(Host host, String action) {
         super(host);
@@ -82,6 +84,7 @@
 
     @Override
     protected void handleClick() {
+        MetricsLogger.action(mContext, getMetricsCategory(), mIntentPackage);
         sendIntent("click", mOnClick, mOnClickUri);
     }
 
@@ -133,6 +136,13 @@
         mOnClickUri = intent.getStringExtra("onClickUri");
         mOnLongClick = intent.getParcelableExtra("onLongClick");
         mOnLongClickUri = intent.getStringExtra("onLongClickUri");
+        mIntentPackage = intent.getStringExtra("package");
+        mIntentPackage = mIntentPackage == null ? "" : mIntentPackage;
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_INTENT;
     }
 
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index 11ec722..e6fade4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.qs.tiles;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSTile;
 import com.android.systemui.statusbar.policy.KeyguardMonitor;
@@ -59,6 +60,7 @@
     @Override
     protected void handleClick() {
         final boolean wasEnabled = (Boolean) mState.value;
+        MetricsLogger.action(mContext, getMetricsCategory(), !wasEnabled);
         mController.setLocationEnabled(!wasEnabled);
         mEnable.setAllowAnimation(true);
         mDisable.setAllowAnimation(true);
@@ -87,6 +89,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_LOCATION;
+    }
+
+    @Override
     protected String composeChangeAnnouncement() {
         if (mState.value) {
             return mContext.getString(R.string.accessibility_quick_settings_location_changed_on);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
index f46b9a6..7c378f0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -18,6 +18,7 @@
 
 import android.content.res.Configuration;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSTile;
 import com.android.systemui.statusbar.policy.RotationLockController;
@@ -59,6 +60,7 @@
     @Override
     protected void handleClick() {
         if (mController == null) return;
+        MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
         final boolean newState = !mState.value;
         mController.setRotationLocked(newState);
         refreshState(newState ? UserBoolean.USER_TRUE : UserBoolean.USER_FALSE);
@@ -92,6 +94,11 @@
                 R.string.accessibility_rotation_lock_off);
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_ROTATIONLOCK;
+    }
+
     /**
      * Get the correct accessibility string based on the state
      *
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java
index 6bad652..d4f54b6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.qs.tiles;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.qs.PseudoGridView;
 import com.android.systemui.statusbar.policy.UserSwitcherController;
@@ -84,6 +85,7 @@
         public void onClick(View view) {
             UserSwitcherController.UserRecord tag =
                     (UserSwitcherController.UserRecord) view.getTag();
+            MetricsLogger.action(mContext, MetricsLogger.QS_SWITCH_USER);
             switchTo(tag);
         }
     }
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 d589366..c3f9e33 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -26,6 +26,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.settingslib.wifi.AccessPoint;
 import com.android.systemui.R;
 import com.android.systemui.qs.QSDetailItems;
@@ -94,6 +95,7 @@
     @Override
     protected void handleClick() {
         mState.copyTo(mStateBeforeClick);
+        MetricsLogger.action(mContext, getMetricsCategory(), !mState.enabled);
         mController.setWifiEnabled(!mState.enabled);
     }
 
@@ -159,6 +161,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsLogger.QS_WIFI;
+    }
+
+    @Override
     protected boolean shouldAnnouncementBeDelayed() {
         return mStateBeforeClick.enabled == mState.enabled;
     }
@@ -269,11 +276,17 @@
         @Override
         public void setToggleState(boolean state) {
             if (DEBUG) Log.d(TAG, "setToggleState " + state);
+            MetricsLogger.action(mContext, MetricsLogger.QS_WIFI_TOGGLE, state);
             mController.setWifiEnabled(state);
             showDetail(false);
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsLogger.QS_WIFI_DETAILS;
+        }
+
+        @Override
         public View createDetailView(Context context, View convertView, ViewGroup parent) {
             if (DEBUG) Log.d(TAG, "createDetailView convertView=" + (convertView != null));
             mAccessPoints = null;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 1001feb..ad97f91 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -39,7 +39,6 @@
 import com.android.systemui.recents.misc.DebugTrigger;
 import com.android.systemui.recents.misc.ReferenceCountedTrigger;
 import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.misc.Utilities;
 import com.android.systemui.recents.model.RecentsTaskLoadPlan;
 import com.android.systemui.recents.model.RecentsTaskLoader;
 import com.android.systemui.recents.model.Task;
@@ -392,15 +391,6 @@
         filter.addAction(Intent.ACTION_SCREEN_OFF);
         filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED);
         registerReceiver(mSystemBroadcastReceiver, filter);
-
-        // Private API calls to make the shadows look better
-        try {
-            Utilities.setShadowProperty("ambientRatio", String.valueOf(1.5f));
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        } catch (InvocationTargetException e) {
-            e.printStackTrace();
-        }
     }
 
     /** Inflates the debug overlay if debug mode is enabled. */
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 d60df9c..e3fb16a 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -438,6 +438,33 @@
         return info.loadLabel(mPm).toString();
     }
 
+    /** Returns the application label */
+    public String getApplicationLabel(Intent baseIntent, int userId) {
+        if (mPm == null) return null;
+
+        // If we are mocking, then return a mock label
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
+            return "Recent Task";
+        }
+
+        ResolveInfo ri = mPm.resolveActivityAsUser(baseIntent, 0, userId);
+        CharSequence label = (ri != null) ? ri.loadLabel(mPm) : null;
+        return (label != null) ? label.toString() : null;
+    }
+
+    /** Returns the content description for a given task */
+    public String getContentDescription(Intent baseIntent, int userId, String activityLabel,
+            Resources res) {
+        String applicationLabel = getApplicationLabel(baseIntent, userId);
+        if (applicationLabel == null) {
+            return getBadgedLabel(activityLabel, userId);
+        }
+        String badgedApplicationLabel = getBadgedLabel(applicationLabel, userId);
+        return applicationLabel.equals(activityLabel) ? badgedApplicationLabel
+                : res.getString(R.string.accessibility_recents_task_header,
+                        badgedApplicationLabel, activityLabel);
+    }
+
     /**
      * Returns the activity icon for the ActivityInfo for a user, badging if
      * necessary.
@@ -464,6 +491,16 @@
         return icon;
     }
 
+    /**
+     * Returns the given label for a user, badging if necessary.
+     */
+    public String getBadgedLabel(String label, int userId) {
+        if (userId != UserHandle.myUserId()) {
+            label = mPm.getUserBadgedLabel(label, new UserHandle(userId)).toString();
+        }
+        return label;
+    }
+
     /** Returns the package name of the home activity. */
     public String getHomeActivityPackageName() {
         if (mPm == null) return null;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java
index 84544ff..e810410 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java
@@ -22,27 +22,11 @@
 import android.graphics.Rect;
 import android.view.View;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 
 /* Common code */
 public class Utilities {
 
-    // Reflection methods for altering shadows
-    private static Method sPropertyMethod;
-    static {
-        try {
-            Class<?> c = Class.forName("android.view.DisplayListCanvas");
-            sPropertyMethod = c.getDeclaredMethod("setProperty", String.class, String.class);
-            if (!sPropertyMethod.isAccessible()) sPropertyMethod.setAccessible(true);
-        } catch (ClassNotFoundException e) {
-            e.printStackTrace();
-        } catch (NoSuchMethodException e) {
-            e.printStackTrace();
-        }
-    }
-
     /** Scales a rect about its centroid */
     public static void scaleRectAboutCenter(Rect r, float scale) {
         if (scale != 1.0f) {
@@ -163,12 +147,6 @@
                     (1f - overlayAlpha) * Color.blue(overlayColor)));
     }
 
-    /** Sets some private shadow properties. */
-    public static void setShadowProperty(String property, String value)
-            throws IllegalAccessException, InvocationTargetException {
-        sPropertyMethod.invoke(null, property, value);
-    }
-
     /**
      * Cancels an animation ensuring that if it has listeners, onCancel and onEnd
      * are not called.
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
index 5d98dda..40cd211 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
@@ -130,6 +130,8 @@
             // Load the label, icon, and color
             String activityLabel = loader.getAndUpdateActivityLabel(taskKey, t.taskDescription,
                     mSystemServicesProxy, infoHandle);
+            String contentDescription = loader.getAndUpdateContentDescription(taskKey,
+                    activityLabel, mSystemServicesProxy, res);
             Drawable activityIcon = loader.getAndUpdateActivityIcon(taskKey, t.taskDescription,
                     mSystemServicesProxy, res, infoHandle, false);
             int activityColor = loader.getActivityPrimaryColor(t.taskDescription, mConfig);
@@ -148,9 +150,9 @@
 
             // Add the task to the stack
             Task task = new Task(taskKey, (t.id != RecentsTaskLoader.INVALID_TASK_ID),
-                    t.affiliatedTaskId, t.affiliatedTaskColor, activityLabel, activityIcon,
-                    activityColor, (i == (taskCount - 1)), mConfig.lockToAppEnabled, icon,
-                    iconFilename);
+                    t.affiliatedTaskId, t.affiliatedTaskColor, activityLabel, contentDescription,
+                    activityIcon, activityColor, (i == (taskCount - 1)), mConfig.lockToAppEnabled,
+                    icon, iconFilename);
             task.thumbnail = loader.getAndUpdateThumbnail(taskKey, mSystemServicesProxy, false);
             if (DEBUG) Log.d(TAG, "\tthumbnail: " + taskKey + ", " + task.thumbnail);
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
index 3192fe6..b2aa2b6 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
@@ -259,6 +259,7 @@
     DrawableLruCache mApplicationIconCache;
     BitmapLruCache mThumbnailCache;
     StringLruCache mActivityLabelCache;
+    StringLruCache mContentDescriptionCache;
     TaskResourceLoadQueue mLoadQueue;
     TaskResourceLoader mLoader;
 
@@ -298,6 +299,7 @@
         mApplicationIconCache = new DrawableLruCache(iconCacheSize);
         mThumbnailCache = new BitmapLruCache(thumbnailCacheSize);
         mActivityLabelCache = new StringLruCache(100);
+        mContentDescriptionCache = new StringLruCache(100);
         mLoader = new TaskResourceLoader(mLoadQueue, mApplicationIconCache, mThumbnailCache,
                 mDefaultThumbnail, mDefaultApplicationIcon);
     }
@@ -348,6 +350,24 @@
         return label;
     }
 
+    /** Returns the content description using as many cached values as we can. */
+    public String getAndUpdateContentDescription(Task.TaskKey taskKey, String activityLabel,
+            SystemServicesProxy ssp, Resources res) {
+        // Return the cached content description if it exists
+        String label = mContentDescriptionCache.getAndInvalidateIfModified(taskKey);
+        if (label != null) {
+            return label;
+        }
+        label = ssp.getContentDescription(taskKey.baseIntent, taskKey.userId, activityLabel, res);
+        if (label != null) {
+            mContentDescriptionCache.put(taskKey, label);
+        } else {
+            Log.w(TAG, "Missing content description for " + taskKey.baseIntent.getComponent()
+                    + " u=" + taskKey.userId);
+        }
+        return label;
+    }
+
     /** Returns the activity icon using as many cached values as we can. */
     public Drawable getAndUpdateActivityIcon(Task.TaskKey taskKey,
             ActivityManager.TaskDescription td, SystemServicesProxy ssp,
@@ -541,6 +561,7 @@
                 mApplicationIconCache.evictAll();
                 // The cache is small, only clear the label cache when we are critical
                 mActivityLabelCache.evictAll();
+                mContentDescriptionCache.evictAll();
                 break;
             default:
                 break;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
index 0cd55d7..c14adf4 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
@@ -124,6 +124,7 @@
     public boolean isLaunchTarget;
     public Drawable applicationIcon;
     public Drawable activityIcon;
+    public String contentDescription;
     public String activityLabel;
     public int colorPrimary;
     public boolean useLightOnPrimaryColor;
@@ -140,8 +141,8 @@
     }
 
     public Task(TaskKey key, boolean isActive, int taskAffiliation, int taskAffiliationColor,
-                String activityTitle, Drawable activityIcon, int colorPrimary,
-                boolean lockToThisTask, boolean lockToTaskEnabled, Bitmap icon,
+                String activityTitle, String contentDescription, Drawable activityIcon,
+                int colorPrimary, boolean lockToThisTask, boolean lockToTaskEnabled, Bitmap icon,
                 String iconFilename) {
         boolean isInAffiliationGroup = (taskAffiliation != key.id);
         boolean hasAffiliationGroupColor = isInAffiliationGroup && (taskAffiliationColor != 0);
@@ -149,6 +150,7 @@
         this.taskAffiliation = taskAffiliation;
         this.taskAffiliationColor = taskAffiliationColor;
         this.activityLabel = activityTitle;
+        this.contentDescription = contentDescription;
         this.activityIcon = activityIcon;
         this.colorPrimary = hasAffiliationGroupColor ? taskAffiliationColor : colorPrimary;
         this.useLightOnPrimaryColor = Utilities.computeContrastBetweenColors(this.colorPrimary,
@@ -166,6 +168,7 @@
         this.taskAffiliation = o.taskAffiliation;
         this.taskAffiliationColor = o.taskAffiliationColor;
         this.activityLabel = o.activityLabel;
+        this.contentDescription = o.contentDescription;
         this.activityIcon = o.activityIcon;
         this.colorPrimary = o.colorPrimary;
         this.useLightOnPrimaryColor = o.useLightOnPrimaryColor;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
index 60a91bf..f397bc3 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
@@ -190,10 +190,12 @@
         } else if (t.applicationIcon != null) {
             mApplicationIcon.setImageDrawable(t.applicationIcon);
         }
-        mApplicationIcon.setContentDescription(t.activityLabel);
+        mApplicationIcon.setContentDescription(t.contentDescription);
         if (!mActivityDescription.getText().toString().equals(t.activityLabel)) {
             mActivityDescription.setText(t.activityLabel);
         }
+        mActivityDescription.setContentDescription(t.contentDescription);
+
         // Try and apply the system ui tint
         int existingBgColor = getBackgroundColor();
         if (existingBgColor != t.colorPrimary) {
@@ -207,7 +209,7 @@
         mDismissButton.setImageDrawable(t.useLightOnPrimaryColor ?
                 mLightDismissDrawable : mDarkDismissDrawable);
         mDismissButton.setContentDescription(String.format(mDismissContentDescription,
-                t.activityLabel));
+                t.contentDescription));
         mMoveTaskButton.setVisibility((mConfig.multiStackEnabled) ? View.VISIBLE : View.INVISIBLE);
         if (mConfig.multiStackEnabled) {
             updateResizeTaskBarIcon(t);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 26c3b4e..588ec26 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -238,6 +238,8 @@
     protected DismissView mDismissView;
     protected EmptyShadeView mEmptyShadeView;
 
+    private NotificationClicker mNotificationClicker = new NotificationClicker();
+
     @Override  // NotificationData.Environment
     public boolean isDeviceProvisioned() {
         return mDeviceProvisioned;
@@ -1292,13 +1294,7 @@
             row.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
         }
 
-        PendingIntent contentIntent = sbn.getNotification().contentIntent;
-        if (contentIntent != null) {
-            final View.OnClickListener listener = makeClicker(contentIntent, sbn.getKey());
-            row.setOnClickListener(listener);
-        } else {
-            row.setOnClickListener(null);
-        }
+        mNotificationClicker.register(row, sbn);
 
         // set up the adaptive layout
         View contentViewLocal = null;
@@ -1559,35 +1555,38 @@
         }
     }
 
-    public NotificationClicker makeClicker(PendingIntent intent, String notificationKey) {
-        return new NotificationClicker(intent, notificationKey);
-    }
-
-    protected class NotificationClicker implements View.OnClickListener {
-        private PendingIntent mIntent;
-        private final String mNotificationKey;
-
-        public NotificationClicker(PendingIntent intent, String notificationKey) {
-            mIntent = intent;
-            mNotificationKey = notificationKey;
-        }
-
+    private final class NotificationClicker implements View.OnClickListener {
         public void onClick(final View v) {
+            if (!(v instanceof ExpandableNotificationRow)) {
+                Log.e(TAG, "NotificationClicker called on a view that is not a notification row.");
+                return;
+            }
+
+            final ExpandableNotificationRow row = (ExpandableNotificationRow) v;
+            final StatusBarNotification sbn = row.getStatusBarNotification();
+            if (sbn == null) {
+                Log.e(TAG, "NotificationClicker called on an unclickable notification,");
+                return;
+            }
+
+            final PendingIntent intent = sbn.getNotification().contentIntent;
+            final String notificationKey = sbn.getKey();
+
             if (NOTIFICATION_CLICK_DEBUG) {
-                Log.d(TAG, "Clicked on content of " + mNotificationKey);
+                Log.d(TAG, "Clicked on content of " + notificationKey);
             }
             final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing();
-            final boolean afterKeyguardGone = mIntent.isActivity()
-                    && PreviewInflater.wouldLaunchResolverActivity(mContext, mIntent.getIntent(),
+            final boolean afterKeyguardGone = intent.isActivity()
+                    && PreviewInflater.wouldLaunchResolverActivity(mContext, intent.getIntent(),
                             mCurrentUserId);
             dismissKeyguardThenExecute(new OnDismissAction() {
                 public boolean onDismiss() {
-                    if (mHeadsUpManager != null && mHeadsUpManager.isHeadsUp(mNotificationKey)) {
+                    if (mHeadsUpManager != null && mHeadsUpManager.isHeadsUp(notificationKey)) {
                         // Release the HUN notification to the shade.
                         //
                         // In most cases, when FLAG_AUTO_CANCEL is set, the notification will
                         // become canceled shortly by NoMan, but we can't assume that.
-                        mHeadsUpManager.releaseImmediately(mNotificationKey);
+                        mHeadsUpManager.releaseImmediately(notificationKey);
                     }
                     new Thread() {
                         @Override
@@ -1606,9 +1605,9 @@
                             } catch (RemoteException e) {
                             }
 
-                            if (mIntent != null) {
+                            if (intent != null) {
                                 try {
-                                    mIntent.send();
+                                    intent.send();
                                 } catch (PendingIntent.CanceledException e) {
                                     // the stack trace isn't very helpful here.
                                     // Just log the exception message.
@@ -1616,14 +1615,14 @@
 
                                     // TODO: Dismiss Keyguard.
                                 }
-                                if (mIntent.isActivity()) {
+                                if (intent.isActivity()) {
                                     overrideActivityPendingAppTransition(keyguardShowing
                                             && !afterKeyguardGone);
                                 }
                             }
 
                             try {
-                                mBarService.onNotificationClick(mNotificationKey);
+                                mBarService.onNotificationClick(notificationKey);
                             } catch (RemoteException ex) {
                                 // system process is dead if we're here.
                             }
@@ -1635,10 +1634,19 @@
                             true /* force */, true /* delayed */);
                     visibilityChanged(false);
 
-                    return mIntent != null && mIntent.isActivity();
+                    return intent != null && intent.isActivity();
                 }
             }, afterKeyguardGone);
         }
+
+        public void register(ExpandableNotificationRow row, StatusBarNotification sbn) {
+            final PendingIntent contentIntent = sbn.getNotification().contentIntent;
+            if (contentIntent != null) {
+                row.setOnClickListener(this);
+            } else {
+                row.setOnClickListener(null);
+            }
+        }
     }
 
     public void animateCollapsePanels(int flags, boolean force) {
@@ -2037,13 +2045,8 @@
             publicContentView.reapply(mContext, entry.getPublicContentView(), mOnClickHandler);
         }
         // update the contentIntent
-        final PendingIntent contentIntent = notification.getNotification().contentIntent;
-        if (contentIntent != null) {
-            final View.OnClickListener listener = makeClicker(contentIntent, notification.getKey());
-            entry.row.setOnClickListener(listener);
-        } else {
-            entry.row.setOnClickListener(null);
-        }
+        mNotificationClicker.register(entry.row, notification);
+
         entry.row.setStatusBarNotification(notification);
         entry.row.notifyContentUpdated();
         entry.row.resetHeight();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 4542054..80fdd28 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -157,7 +157,8 @@
 
     public void setSystemUiVisibility(int vis, int mask) {
         synchronized (mList) {
-            mHandler.removeMessages(MSG_SET_SYSTEMUI_VISIBILITY);
+            // Don't coalesce these, since it might have one time flags set such as
+            // STATUS_BAR_UNHIDE which might get lost.
             mHandler.obtainMessage(MSG_SET_SYSTEMUI_VISIBILITY, vis, mask, null).sendToTarget();
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
index e632cc8..17e2cb5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
@@ -59,13 +59,6 @@
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         int ownMaxHeight = mMaxViewHeight;
-        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
-        boolean hasFixedHeight = heightMode == MeasureSpec.EXACTLY;
-        boolean isHeightLimited = heightMode == MeasureSpec.AT_MOST;
-        if (hasFixedHeight || isHeightLimited) {
-            int size = MeasureSpec.getSize(heightMeasureSpec);
-            ownMaxHeight = Math.min(ownMaxHeight, size);
-        }
         int newHeightSpec = MeasureSpec.makeMeasureSpec(ownMaxHeight, MeasureSpec.AT_MOST);
         int maxChildHeight = 0;
         int childCount = getChildCount();
@@ -92,8 +85,7 @@
                 mMatchParentViews.add(child);
             }
         }
-        int ownHeight = hasFixedHeight ? ownMaxHeight :
-                isHeightLimited ? Math.min(ownMaxHeight, maxChildHeight) : maxChildHeight;
+        int ownHeight = Math.min(ownMaxHeight, maxChildHeight);
         newHeightSpec = MeasureSpec.makeMeasureSpec(ownHeight, MeasureSpec.EXACTLY);
         for (View child : mMatchParentViews) {
             child.measure(getChildMeasureSpec(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index b2bb021..f6629dd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -53,18 +53,21 @@
 
     private boolean mNoSimsVisible = false;
     private boolean mVpnVisible = false;
+    private boolean mEthernetVisible = false;
+    private int mEthernetIconId = 0;
     private boolean mWifiVisible = false;
     private int mWifiStrengthId = 0;
     private boolean mIsAirplaneMode = false;
     private int mAirplaneIconId = 0;
     private int mAirplaneContentDescription;
     private String mWifiDescription;
+    private String mEthernetDescription;
     private ArrayList<PhoneState> mPhoneStates = new ArrayList<PhoneState>();
     private int mIconTint = Color.WHITE;
     private float mDarkIntensity;
 
-    ViewGroup mWifiGroup;
-    ImageView mVpn, mWifi, mAirplane, mNoSims, mWifiDark, mNoSimsDark;
+    ViewGroup mEthernetGroup, mWifiGroup;
+    ImageView mVpn, mEthernet, mWifi, mAirplane, mNoSims, mEthernetDark, mWifiDark, mNoSimsDark;
     View mWifiAirplaneSpacer;
     View mWifiSignalSpacer;
     LinearLayout mMobileSignalGroup;
@@ -116,6 +119,9 @@
         super.onAttachedToWindow();
 
         mVpn            = (ImageView) findViewById(R.id.vpn);
+        mEthernetGroup  = (ViewGroup) findViewById(R.id.ethernet_combo);
+        mEthernet       = (ImageView) findViewById(R.id.ethernet);
+        mEthernetDark   = (ImageView) findViewById(R.id.ethernet_dark);
         mWifiGroup      = (ViewGroup) findViewById(R.id.wifi_combo);
         mWifi           = (ImageView) findViewById(R.id.wifi_signal);
         mWifiDark       = (ImageView) findViewById(R.id.wifi_signal_dark);
@@ -136,6 +142,8 @@
     @Override
     protected void onDetachedFromWindow() {
         mVpn            = null;
+        mEthernetGroup  = null;
+        mEthernet       = null;
         mWifiGroup      = null;
         mWifi           = null;
         mAirplane       = null;
@@ -183,6 +191,15 @@
     }
 
     @Override
+    public void setEthernetIndicators(boolean visible, int icon, String contentDescription) {
+        mEthernetVisible = visible;
+        mEthernetIconId = icon;
+        mEthernetDescription = contentDescription;
+
+        apply();
+    }
+
+    @Override
     public void setNoSims(boolean show) {
         mNoSimsVisible = show;
     }
@@ -234,6 +251,9 @@
     public boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) {
         // Standard group layout onPopulateAccessibilityEvent() implementations
         // ignore content description, so populate manually
+        if (mEthernetVisible && mEthernetGroup != null &&
+                mEthernetGroup.getContentDescription() != null)
+            event.getText().add(mEthernetGroup.getContentDescription());
         if (mWifiVisible && mWifiGroup != null && mWifiGroup.getContentDescription() != null)
             event.getText().add(mWifiGroup.getContentDescription());
         for (PhoneState state : mPhoneStates) {
@@ -246,6 +266,10 @@
     public void onRtlPropertiesChanged(int layoutDirection) {
         super.onRtlPropertiesChanged(layoutDirection);
 
+        if (mEthernet != null) {
+            mEthernet.setImageDrawable(null);
+        }
+
         if (mWifi != null) {
             mWifi.setImageDrawable(null);
         }
@@ -277,6 +301,21 @@
 
         mVpn.setVisibility(mVpnVisible ? View.VISIBLE : View.GONE);
         if (DEBUG) Log.d(TAG, String.format("vpn: %s", mVpnVisible ? "VISIBLE" : "GONE"));
+
+        if (mEthernetVisible) {
+            mEthernet.setImageResource(mEthernetIconId);
+            mEthernetDark.setImageResource(mEthernetIconId);
+            mEthernetGroup.setContentDescription(mEthernetDescription);
+            mEthernetGroup.setVisibility(View.VISIBLE);
+        } else {
+            mEthernetGroup.setVisibility(View.GONE);
+        }
+
+        if (DEBUG) Log.d(TAG,
+                String.format("ethernet: %s",
+                    (mEthernetVisible ? "VISIBLE" : "GONE")));
+
+
         if (mWifiVisible) {
             mWifi.setImageResource(mWifiStrengthId);
             mWifiDark.setImageResource(mWifiStrengthId);
@@ -327,7 +366,7 @@
         mNoSimsDark.setVisibility(mNoSimsVisible ? View.VISIBLE : View.GONE);
 
         boolean anythingVisible = mNoSimsVisible || mWifiVisible || mIsAirplaneMode
-                || anyMobileVisible || mVpnVisible;
+                || anyMobileVisible || mVpnVisible || mEthernetVisible;
         setPaddingRelative(0, 0, anythingVisible ? mEndPadding : mEndPaddingNothingVisible, 0);
     }
 
@@ -345,6 +384,7 @@
         setTint(mAirplane, mIconTint);
         applyDarkIntensity(mDarkIntensity, mNoSims, mNoSimsDark);
         applyDarkIntensity(mDarkIntensity, mWifi, mWifiDark);
+        applyDarkIntensity(mDarkIntensity, mEthernet, mEthernetDark);
         for (int i = 0; i < mPhoneStates.size(); i++) {
             mPhoneStates.get(i).setIconTint(mIconTint, mDarkIntensity);
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java
index 23810f9..ee5eb38 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java
@@ -25,4 +25,5 @@
  */
 public interface ActivityStarter {
     public void startActivity(Intent intent, boolean dismissShade);
+    void preventNextAnimation();
 }
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 8343497..8bffdc9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java
@@ -131,6 +131,10 @@
         mCenterIcon = mCallback.getCenterIcon();
         mRightIcon = mCallback.getRightIcon();
         mRightIcon.setIsLeft(false);
+        updatePreviews();
+    }
+
+    public void updatePreviews() {
         mLeftIcon.setPreviewView(mCallback.getLeftPreview());
         mRightIcon.setPreviewView(mCallback.getRightPreview());
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index fabc1a6..efc3ea0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -25,17 +25,13 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
-import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.InsetDrawable;
-import android.hardware.fingerprint.FingerprintManager;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.UserHandle;
-import android.os.Vibrator;
 import android.provider.MediaStore;
-import android.provider.Settings;
 import android.telecom.TelecomManager;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -54,6 +50,7 @@
 import com.android.systemui.EventLogConstants;
 import com.android.systemui.EventLogTags;
 import com.android.systemui.R;
+import com.android.systemui.assist.AssistManager;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.KeyguardAffordanceView;
 import com.android.systemui.statusbar.KeyguardIndicationController;
@@ -85,12 +82,12 @@
     private static final long TRANSIENT_FP_ERROR_TIMEOUT = 1300;
 
     private KeyguardAffordanceView mCameraImageView;
-    private KeyguardAffordanceView mPhoneImageView;
+    private KeyguardAffordanceView mLeftAffordanceView;
     private LockIcon mLockIcon;
     private TextView mIndicationText;
     private ViewGroup mPreviewContainer;
 
-    private View mPhonePreview;
+    private View mLeftPreview;
     private View mCameraPreview;
 
     private ActivityStarter mActivityStarter;
@@ -104,6 +101,8 @@
 
     private final Interpolator mLinearOutSlowInInterpolator;
     private boolean mPrewarmSent;
+    private boolean mLeftIsVoiceAssist;
+    private AssistManager mAssistManager;
 
     public KeyguardBottomAreaView(Context context) {
         this(context, null);
@@ -133,8 +132,12 @@
                 label = getResources().getString(R.string.unlock_label);
             } else if (host == mCameraImageView) {
                 label = getResources().getString(R.string.camera_label);
-            } else if (host == mPhoneImageView) {
-                label = getResources().getString(R.string.phone_label);
+            } else if (host == mLeftAffordanceView) {
+                if (mLeftIsVoiceAssist) {
+                    label = getResources().getString(R.string.voice_assist_label);
+                } else {
+                    label = getResources().getString(R.string.phone_label);
+                }
             }
             info.addAction(new AccessibilityAction(ACTION_CLICK, label));
         }
@@ -149,8 +152,8 @@
                 } else if (host == mCameraImageView) {
                     launchCamera();
                     return true;
-                } else if (host == mPhoneImageView) {
-                    launchPhone();
+                } else if (host == mLeftAffordanceView) {
+                    launchLeftAffordance();
                     return true;
                 }
             }
@@ -164,29 +167,28 @@
         mLockPatternUtils = new LockPatternUtils(mContext);
         mPreviewContainer = (ViewGroup) findViewById(R.id.preview_container);
         mCameraImageView = (KeyguardAffordanceView) findViewById(R.id.camera_button);
-        mPhoneImageView = (KeyguardAffordanceView) findViewById(R.id.phone_button);
+        mLeftAffordanceView = (KeyguardAffordanceView) findViewById(R.id.left_button);
         mLockIcon = (LockIcon) findViewById(R.id.lock_icon);
         mIndicationText = (TextView) findViewById(R.id.keyguard_indication_text);
         watchForCameraPolicyChanges();
         updateCameraVisibility();
-        updatePhoneVisibility();
         mUnlockMethodCache = UnlockMethodCache.getInstance(getContext());
         mUnlockMethodCache.addListener(this);
         mLockIcon.update();
         setClipChildren(false);
         setClipToPadding(false);
         mPreviewInflater = new PreviewInflater(mContext, new LockPatternUtils(mContext));
-        inflatePreviews();
+        inflateCameraPreview();
         mLockIcon.setOnClickListener(this);
         mLockIcon.setOnLongClickListener(this);
         mCameraImageView.setOnClickListener(this);
-        mPhoneImageView.setOnClickListener(this);
+        mLeftAffordanceView.setOnClickListener(this);
         initAccessibility();
     }
 
     private void initAccessibility() {
         mLockIcon.setAccessibilityDelegate(mAccessibilityDelegate);
-        mPhoneImageView.setAccessibilityDelegate(mAccessibilityDelegate);
+        mLeftAffordanceView.setAccessibilityDelegate(mAccessibilityDelegate);
         mCameraImageView.setAccessibilityDelegate(mAccessibilityDelegate);
     }
 
@@ -247,9 +249,26 @@
         mCameraImageView.setVisibility(visible ? View.VISIBLE : View.GONE);
     }
 
-    private void updatePhoneVisibility() {
-        boolean visible = isPhoneVisible();
-        mPhoneImageView.setVisibility(visible ? View.VISIBLE : View.GONE);
+    private void updateLeftAffordanceIcon() {
+        mLeftIsVoiceAssist = canLaunchVoiceAssist();
+        int drawableId;
+        int contentDescription;
+        if (mLeftIsVoiceAssist) {
+            mLeftAffordanceView.setVisibility(View.VISIBLE);
+            drawableId = R.drawable.ic_mic_26dp;
+            contentDescription = R.string.accessibility_voice_assist_button;
+        } else {
+            boolean visible = isPhoneVisible();
+            mLeftAffordanceView.setVisibility(visible ? View.VISIBLE : View.GONE);
+            drawableId = R.drawable.ic_phone_24dp;
+            contentDescription = R.string.accessibility_phone_button;
+        }
+        mLeftAffordanceView.setImageDrawable(mContext.getDrawable(drawableId));
+        mLeftAffordanceView.setContentDescription(mContext.getString(contentDescription));
+    }
+
+    public boolean isLeftVoiceAssist() {
+        return mLeftIsVoiceAssist;
     }
 
     private boolean isPhoneVisible() {
@@ -287,9 +306,9 @@
     @Override
     public void onStateChanged(boolean accessibilityEnabled, boolean touchExplorationEnabled) {
         mCameraImageView.setClickable(touchExplorationEnabled);
-        mPhoneImageView.setClickable(touchExplorationEnabled);
+        mLeftAffordanceView.setClickable(touchExplorationEnabled);
         mCameraImageView.setFocusable(accessibilityEnabled);
-        mPhoneImageView.setFocusable(accessibilityEnabled);
+        mLeftAffordanceView.setFocusable(accessibilityEnabled);
         mLockIcon.update();
     }
 
@@ -297,8 +316,8 @@
     public void onClick(View v) {
         if (v == mCameraImageView) {
             launchCamera();
-        } else if (v == mPhoneImageView) {
-            launchPhone();
+        } else if (v == mLeftAffordanceView) {
+            launchLeftAffordance();
         } if (v == mLockIcon) {
             if (!mAccessibilityController.isAccessibilityEnabled()) {
                 handleTrustCircleClick();
@@ -363,6 +382,7 @@
                 @Override
                 public void run() {
                     mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+                    mActivityStarter.preventNextAnimation();
                 }
             });
         } else {
@@ -373,7 +393,35 @@
         }
     }
 
-    public void launchPhone() {
+    public void launchLeftAffordance() {
+        if (mLeftIsVoiceAssist) {
+            launchVoiceAssist();
+        } else {
+            launchPhone();
+        }
+    }
+
+    private void launchVoiceAssist() {
+        Runnable runnable = new Runnable() {
+            @Override
+            public void run() {
+                mAssistManager.launchVoiceAssistFromKeyguard();
+                mActivityStarter.preventNextAnimation();
+            }
+        };
+        if (mPhoneStatusBar.isKeyguardCurrentlySecure()) {
+            AsyncTask.execute(runnable);
+        } else {
+            mPhoneStatusBar.executeRunnableDismissingKeyguard(runnable, false /* dismissShade */,
+                    false /* afterKeyguardGone */);
+        }
+    }
+
+    private boolean canLaunchVoiceAssist() {
+        return mAssistManager.canVoiceAssistBeLaunchedFromKeyguard();
+    }
+
+    private void launchPhone() {
         final TelecomManager tm = TelecomManager.from(mContext);
         if (tm.isInCall()) {
             AsyncTask.execute(new Runnable() {
@@ -397,19 +445,19 @@
         }
     }
 
-    public KeyguardAffordanceView getPhoneView() {
-        return mPhoneImageView;
+    public KeyguardAffordanceView getLeftView() {
+        return mLeftAffordanceView;
     }
 
-    public KeyguardAffordanceView getCameraView() {
+    public KeyguardAffordanceView getRightView() {
         return mCameraImageView;
     }
 
-    public View getPhonePreview() {
-        return mPhonePreview;
+    public View getLeftPreview() {
+        return mLeftPreview;
     }
 
-    public View getCameraPreview() {
+    public View getRightPreview() {
         return mCameraPreview;
     }
 
@@ -432,23 +480,35 @@
         updateCameraVisibility();
     }
 
-    private void inflatePreviews() {
-        mPhonePreview = mPreviewInflater.inflatePreview(PHONE_INTENT);
+    private void inflateCameraPreview() {
         mCameraPreview = mPreviewInflater.inflatePreview(getCameraIntent());
-        if (mPhonePreview != null) {
-            mPreviewContainer.addView(mPhonePreview);
-            mPhonePreview.setVisibility(View.INVISIBLE);
-        }
         if (mCameraPreview != null) {
             mPreviewContainer.addView(mCameraPreview);
             mCameraPreview.setVisibility(View.INVISIBLE);
         }
     }
 
+    private void updateLeftPreview() {
+        View previewBefore = mLeftPreview;
+        if (previewBefore != null) {
+            mPreviewContainer.removeView(previewBefore);
+        }
+        if (mLeftIsVoiceAssist) {
+            mLeftPreview = mPreviewInflater.inflatePreviewFromService(
+                    mAssistManager.getVoiceInteractorComponentName());
+        } else {
+            mLeftPreview = mPreviewInflater.inflatePreview(PHONE_INTENT);
+        }
+        if (mLeftPreview != null) {
+            mPreviewContainer.addView(mLeftPreview);
+            mLeftPreview.setVisibility(View.INVISIBLE);
+        }
+    }
+
     public void startFinishDozeAnimation() {
         long delay = 0;
-        if (mPhoneImageView.getVisibility() == View.VISIBLE) {
-            startFinishDozeAnimationElement(mPhoneImageView, delay);
+        if (mLeftAffordanceView.getVisibility() == View.VISIBLE) {
+            startFinishDozeAnimationElement(mLeftAffordanceView, delay);
             delay += DOZE_ANIMATION_STAGGER_DELAY;
         }
         startFinishDozeAnimationElement(mLockIcon, delay);
@@ -543,4 +603,14 @@
             KeyguardIndicationController keyguardIndicationController) {
         mIndicationController = keyguardIndicationController;
     }
+
+    public void setAssistManager(AssistManager assistManager) {
+        mAssistManager = assistManager;
+        updateLeftAffordance();
+    }
+
+    public void updateLeftAffordance() {
+        updateLeftAffordanceIcon();
+        updateLeftPreview();
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index c62ad66..7077a17 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -144,7 +144,7 @@
         @Override
         public void onClick(View view) {
             ((InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE))
-                    .showInputMethodPicker();
+                    .showInputMethodPicker(true /* showAuxiliarySubtypes */);
         }
     };
 
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 a8ecc42..9ef9211 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -39,6 +39,7 @@
 import android.widget.FrameLayout;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.keyguard.KeyguardStatusView;
 import com.android.systemui.EventLogConstants;
 import com.android.systemui.EventLogTags;
@@ -73,6 +74,10 @@
     private static final float HEADER_RUBBERBAND_FACTOR = 2.05f;
     private static final float LOCK_ICON_ACTIVE_SCALE = 1.2f;
 
+    private static final String COUNTER_PANEL_OPEN = "panel_open";
+    private static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs";
+    private static final String COUNTER_PANEL_OPEN_PEEK = "panel_open_peek";
+
     public static final long DOZE_ANIMATION_DURATION = 700;
 
     private KeyguardAffordanceHelper mAfforanceHelper;
@@ -541,6 +546,8 @@
         initDownStates(event);
         if (mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
             mIsExpansionFromHeadsUp = true;
+            MetricsLogger.count(mContext, COUNTER_PANEL_OPEN, 1);
+            MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_PEEK, 1);
             return true;
         }
         if (!isFullyCollapsed() && onQsIntercept(event)) {
@@ -617,7 +624,7 @@
             case MotionEvent.ACTION_UP:
                 trackMovement(event);
                 if (mQsTracking) {
-                    flingQsWithCurrentVelocity(
+                    flingQsWithCurrentVelocity(y,
                             event.getActionMasked() == MotionEvent.ACTION_CANCEL);
                     mQsTracking = false;
                 }
@@ -655,9 +662,24 @@
         super.requestDisallowInterceptTouchEvent(disallowIntercept);
     }
 
-    private void flingQsWithCurrentVelocity(boolean isCancelMotionEvent) {
+    private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) {
         float vel = getCurrentVelocity();
-        flingSettings(vel, flingExpandsQs(vel) && !isCancelMotionEvent);
+        final boolean expandsQs = flingExpandsQs(vel);
+        if (expandsQs) {
+            logQsSwipeDown(y);
+        }
+        flingSettings(vel, expandsQs && !isCancelMotionEvent);
+    }
+
+    private void logQsSwipeDown(float y) {
+        float vel = getCurrentVelocity();
+        final int gesture = mStatusBarState == StatusBarState.KEYGUARD
+                ? EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS
+                : EventLogConstants.SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS;
+        EventLogTags.writeSysuiLockscreenGesture(
+                gesture,
+                (int) ((y - mInitialTouchY) / mStatusBar.getDisplayDensity()),
+                (int) (vel / mStatusBar.getDisplayDensity()));
     }
 
     private boolean flingExpandsQs(float vel) {
@@ -699,6 +721,7 @@
             return true;
         }
         if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()) {
+            MetricsLogger.count(mContext, COUNTER_PANEL_OPEN, 1);
             updateVerticalPanelPosition(event.getX());
         }
         super.onTouchEvent(event);
@@ -706,7 +729,8 @@
     }
 
     private boolean handleQsTouch(MotionEvent event) {
-        if (event.getActionMasked() == MotionEvent.ACTION_DOWN && getExpandedFraction() == 1f
+        final int action = event.getActionMasked();
+        if (action == MotionEvent.ACTION_DOWN && getExpandedFraction() == 1f
                 && mStatusBar.getBarState() != StatusBarState.KEYGUARD && !mQsExpanded
                 && mQsExpansionEnabled) {
 
@@ -727,17 +751,23 @@
                 return true;
             }
         }
-        if (event.getActionMasked() == MotionEvent.ACTION_CANCEL
-                || event.getActionMasked() == MotionEvent.ACTION_UP) {
+        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
             mConflictingQsExpansionGesture = false;
         }
-        if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()
+        if (action == MotionEvent.ACTION_DOWN && isFullyCollapsed()
                 && mQsExpansionEnabled) {
             mTwoFingerQsExpandPossible = true;
         }
-        if (mTwoFingerQsExpandPossible && event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN
-                && event.getPointerCount() == 2
+        final int pointerCount = event.getPointerCount();
+        final boolean twoFingerDrag = action == MotionEvent.ACTION_POINTER_DOWN
+                && pointerCount == 2;
+        final boolean stylusClickDrag = action == MotionEvent.ACTION_DOWN
+                && pointerCount == 1 && event.getToolType(0) == MotionEvent.TOOL_TYPE_STYLUS
+                && (event.isButtonPressed(MotionEvent.BUTTON_SECONDARY)
+                        || event.isButtonPressed(MotionEvent.BUTTON_TERTIARY));
+        if (mTwoFingerQsExpandPossible && (twoFingerDrag || stylusClickDrag)
                 && event.getY(event.getActionIndex()) < mStatusBarMinHeight) {
+            MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_QS, 1);
             mQsExpandImmediate = true;
             requestPanelHeightUpdate();
 
@@ -799,6 +829,7 @@
         }
         final float y = event.getY(pointerIndex);
         final float x = event.getX(pointerIndex);
+        final float h = y - mInitialTouchY;
 
         switch (event.getActionMasked()) {
             case MotionEvent.ACTION_DOWN:
@@ -826,7 +857,6 @@
                 break;
 
             case MotionEvent.ACTION_MOVE:
-                final float h = y - mInitialTouchY;
                 setQsExpansion(h + mInitialHeightOnTouch);
                 if (h >= getFalsingThreshold()) {
                     mQsTouchAboveFalsingThreshold = true;
@@ -842,9 +872,10 @@
                 float fraction = getQsExpansionFraction();
                 if ((fraction != 0f || y >= mInitialTouchY)
                         && (fraction != 1f || y <= mInitialTouchY)) {
-                    flingQsWithCurrentVelocity(
+                    flingQsWithCurrentVelocity(y,
                             event.getActionMasked() == MotionEvent.ACTION_CANCEL);
                 } else {
+                    logQsSwipeDown(y);
                     mScrollYOverride = -1;
                 }
                 if (mVelocityTracker != null) {
@@ -952,6 +983,10 @@
         } else {
             mKeyguardStatusBar.setAlpha(1f);
             mKeyguardStatusBar.setVisibility(keyguardShowing ? View.VISIBLE : View.INVISIBLE);
+            if (keyguardShowing && oldState != mStatusBarState) {
+                mKeyguardBottomArea.updateLeftAffordance();
+                mAfforanceHelper.updatePreviews();
+            }
         }
         resetVerticalPanelPosition();
         updateQsState();
@@ -1815,6 +1850,9 @@
             if (mQsExpanded) {
                 flingSettings(0 /* vel */, false /* expand */);
             } else if (mQsExpansionEnabled) {
+                EventLogTags.writeSysuiLockscreenGesture(
+                        EventLogConstants.SYSUI_TAP_TO_OPEN_QS,
+                        0, 0);
                 flingSettings(0 /* vel */, true /* expand */);
             }
         }
@@ -1831,7 +1869,7 @@
         if (start) {
             EventLogTags.writeSysuiLockscreenGesture(
                     EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_DIALER, lengthDp, velocityDp);
-            mKeyguardBottomArea.launchPhone();
+            mKeyguardBottomArea.launchLeftAffordance();
         } else {
             EventLogTags.writeSysuiLockscreenGesture(
                     EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA, lengthDp, velocityDp);
@@ -1912,15 +1950,19 @@
         if (rightIcon) {
             mStatusBar.onCameraHintStarted();
         } else {
-            mStatusBar.onPhoneHintStarted();
+            if (mKeyguardBottomArea.isLeftVoiceAssist()) {
+                mStatusBar.onVoiceAssistHintStarted();
+            } else {
+                mStatusBar.onPhoneHintStarted();
+            }
         }
     }
 
     @Override
     public KeyguardAffordanceView getLeftIcon() {
         return getLayoutDirection() == LAYOUT_DIRECTION_RTL
-                ? mKeyguardBottomArea.getCameraView()
-                : mKeyguardBottomArea.getPhoneView();
+                ? mKeyguardBottomArea.getRightView()
+                : mKeyguardBottomArea.getLeftView();
     }
 
     @Override
@@ -1931,22 +1973,22 @@
     @Override
     public KeyguardAffordanceView getRightIcon() {
         return getLayoutDirection() == LAYOUT_DIRECTION_RTL
-                ? mKeyguardBottomArea.getPhoneView()
-                : mKeyguardBottomArea.getCameraView();
+                ? mKeyguardBottomArea.getLeftView()
+                : mKeyguardBottomArea.getRightView();
     }
 
     @Override
     public View getLeftPreview() {
         return getLayoutDirection() == LAYOUT_DIRECTION_RTL
-                ? mKeyguardBottomArea.getCameraPreview()
-                : mKeyguardBottomArea.getPhonePreview();
+                ? mKeyguardBottomArea.getRightPreview()
+                : mKeyguardBottomArea.getLeftPreview();
     }
 
     @Override
     public View getRightPreview() {
         return getLayoutDirection() == LAYOUT_DIRECTION_RTL
-                ? mKeyguardBottomArea.getPhonePreview()
-                : mKeyguardBottomArea.getCameraPreview();
+                ? mKeyguardBottomArea.getLeftPreview()
+                : mKeyguardBottomArea.getRightPreview();
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
index f3d4c7f..d5209ea 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
@@ -80,6 +80,14 @@
         }
     }
 
+    public void setBouncerShowing(boolean showing) {
+        if (mPanelHolder != null) {
+            mPanelHolder.setImportantForAccessibility(
+                    showing ? IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+                            : IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+        }
+    }
+
     public float getBarHeight() {
         return getMeasuredHeight();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 85f312c..38812ce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -46,6 +46,7 @@
 public abstract class PanelView extends FrameLayout {
     public static final boolean DEBUG = PanelBar.DEBUG;
     public static final String TAG = PanelView.class.getSimpleName();
+
     private final void logf(String fmt, Object... args) {
         Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args));
     }
@@ -77,6 +78,7 @@
     private boolean mTouchStartedInEmptyArea;
     private boolean mMotionAborted;
     private boolean mUpwardsWhenTresholdReached;
+    private boolean mAnimatingOnDown;
 
     private ValueAnimator mHeightAnimator;
     private ObjectAnimator mPeekAnimator;
@@ -459,8 +461,8 @@
         switch (event.getActionMasked()) {
             case MotionEvent.ACTION_DOWN:
                 mStatusBar.userActivity();
-                if (mHeightAnimator != null && !mHintAnimationRunning ||
-                        mPeekPending || mPeekAnimator != null) {
+                mAnimatingOnDown = mHeightAnimator != null;
+                if (mAnimatingOnDown && mClosing && !mHintAnimationRunning || mPeekPending || mPeekAnimator != null) {
                     cancelHeightAnimator();
                     cancelPeek();
                     mTouchSlopExceeded = true;
@@ -501,8 +503,10 @@
             case MotionEvent.ACTION_MOVE:
                 final float h = y - mInitialTouchY;
                 trackMovement(event);
-                if (scrolledToBottom || mTouchStartedInEmptyArea) {
-                    if (h < -mTouchSlop && h < -Math.abs(x - mInitialTouchX)) {
+                if (scrolledToBottom || mTouchStartedInEmptyArea || mAnimatingOnDown) {
+                    float hAbs = Math.abs(h);
+                    if ((h < -mTouchSlop || (mAnimatingOnDown && hAbs > mTouchSlop))
+                            && hAbs > Math.abs(x - mInitialTouchX)) {
                         cancelHeightAnimator();
                         startExpandMotion(x, y, true /* startTracking */, mExpandedHeight);
                         return true;
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 9a6a80e..da65a01 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -76,6 +76,7 @@
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
+import android.view.ThreadedRenderer;
 import android.view.VelocityTracker;
 import android.view.View;
 import android.view.ViewGroup.LayoutParams;
@@ -91,6 +92,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.keyguard.KeyguardHostView.OnDismissAction;
 import com.android.keyguard.ViewMediatorCallback;
@@ -100,7 +102,7 @@
 import com.android.systemui.EventLogTags;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
-import com.android.systemui.assist.AssistGestureManager;
+import com.android.systemui.assist.AssistManager;
 import com.android.systemui.doze.DozeHost;
 import com.android.systemui.doze.DozeLog;
 import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -297,7 +299,6 @@
     int mTrackingPosition; // the position of the top of the tracking view.
 
     // Tracking finger for opening/closing.
-    int mEdgeBorder; // corresponds to R.dimen.status_bar_edge_ignore
     boolean mTracking;
     VelocityTracker mVelocityTracker;
 
@@ -323,7 +324,7 @@
     private int mNavigationIconHints = 0;
     private HandlerThread mHandlerThread;
 
-    private AssistGestureManager mAssistGestureManager;
+    private AssistManager mAssistManager;
 
     // ensure quick settings is disabled until the current user makes it through the setup wizard
     private boolean mUserSetup = false;
@@ -528,6 +529,7 @@
             = new HashMap<>();
     private HashSet<Entry> mHeadsUpEntriesToRemoveOnSwitch = new HashSet<>();
     private RankingMap mLatestRankingMap;
+    private boolean mNoAnimationOnNextBarModeChange;
 
     @Override
     public void start() {
@@ -645,8 +647,8 @@
                         new NavigationBarView.OnVerticalChangedListener() {
                     @Override
                     public void onVerticalChanged(boolean isVertical) {
-                        if (mAssistGestureManager != null) {
-                            mAssistGestureManager.onConfigurationChanged();
+                        if (mAssistManager != null) {
+                            mAssistManager.onConfigurationChanged();
                         }
                         mNotificationPanel.setQsScrimEnabled(!isVertical);
                     }
@@ -662,6 +664,8 @@
             // no window manager? good luck with that
         }
 
+        mAssistManager = new AssistManager(this, context);
+
         // figure out which pixel-format to use for the status bar.
         mPixelFormat = PixelFormat.OPAQUE;
 
@@ -691,6 +695,7 @@
         mDismissView.setOnButtonClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
+                MetricsLogger.action(mContext, MetricsLogger.ACTION_DISMISS_ALL_NOTES);
                 clearAllNotifications();
             }
         });
@@ -719,13 +724,12 @@
         mKeyguardBottomArea =
                 (KeyguardBottomAreaView) mStatusBarWindow.findViewById(R.id.keyguard_bottom_area);
         mKeyguardBottomArea.setActivityStarter(this);
+        mKeyguardBottomArea.setAssistManager(mAssistManager);
         mKeyguardIndicationController = new KeyguardIndicationController(mContext,
                 (KeyguardIndicationTextView) mStatusBarWindow.findViewById(
                         R.id.keyguard_indication_text));
         mKeyguardBottomArea.setKeyguardIndicationController(mKeyguardIndicationController);
 
-        mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);
-
         // set the inital view visibility
         setAreThereNotifications();
 
@@ -752,7 +756,7 @@
                 // noop
             }
         });
-        mNetworkController = new NetworkControllerImpl(mContext);
+        mNetworkController = new NetworkControllerImpl(mContext, mHandlerThread.getLooper());
         mHotspotController = new HotspotControllerImpl(mContext);
         mBluetoothController = new BluetoothControllerImpl(mContext, mHandlerThread.getLooper());
         mSecurityController = new SecurityControllerImpl(mContext);
@@ -842,7 +846,6 @@
         mBroadcastReceiver.onReceive(mContext,
                 new Intent(pm.isScreenOn() ? Intent.ACTION_SCREEN_ON : Intent.ACTION_SCREEN_OFF));
 
-        mAssistGestureManager = new AssistGestureManager(this, context);
 
         // receive broadcasts
         IntentFilter filter = new IntentFilter();
@@ -858,6 +861,12 @@
         // listen for USER_SETUP_COMPLETE setting (per-user)
         resetUserSetupObserver();
 
+        // disable profiling bars, since they overlap and clutter the output on app windows
+        ThreadedRenderer.overrideProperty("disableProfileBars", "true");
+
+        // Private API call to make the shadows look better for Recents
+        ThreadedRenderer.overrideProperty("ambientRatio", String.valueOf(1.5f));
+
         return mStatusBarView;
     }
 
@@ -965,7 +974,7 @@
 
     public void invokeAssistGesture(boolean vibrate) {
         mHandler.removeCallbacks(mInvokeAssist);
-        mAssistGestureManager.onGestureInvoked(vibrate);
+        mAssistManager.onGestureInvoked(vibrate);
     }
 
     public int getStatusBarHeight() {
@@ -1045,7 +1054,7 @@
         mNavigationBarView.getBackButton().setLongClickable(true);
         mNavigationBarView.getBackButton().setOnLongClickListener(mLongPressBackRecentsListener);
         mNavigationBarView.getHomeButton().setOnTouchListener(mHomeActionListener);
-        mAssistGestureManager.onConfigurationChanged();
+        mAssistManager.onConfigurationChanged();
     }
 
     // For small-screen devices (read: phones) that lack hardware navigation buttons
@@ -1701,6 +1710,7 @@
      * State is one or more of the DISABLE constants from StatusBarManager.
      */
     public void disable(int state1, int state2, boolean animate) {
+        animate &= mStatusBarWindowState != WINDOW_STATE_HIDDEN;
         mDisabledUnmodified1 = state1;
         mDisabledUnmodified2 = state2;
         state1 = adjustDisableFlags(state1);
@@ -1806,6 +1816,11 @@
         startActivityDismissingKeyguard(intent, false, dismissShade);
     }
 
+    @Override
+    public void preventNextAnimation() {
+        overrideActivityPendingAppTransition(true /* keyguardShowing */);
+    }
+
     public void setQsExpanded(boolean expanded) {
         mStatusBarWindowManager.setQsExpanded(expanded);
     }
@@ -1855,6 +1870,7 @@
     public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) {
         if (inPinnedMode) {
             mStatusBarWindowManager.setHeadsUpShowing(true);
+            mStatusBarWindowManager.setForceStatusBarVisible(true);
         } else {
             Runnable endRunnable = new Runnable() {
                 @Override
@@ -1925,6 +1941,10 @@
         return mHeadsUpManager.isSnoozed(sbn.getPackageName());
     }
 
+    public boolean isKeyguardCurrentlySecure() {
+        return !mUnlockMethodCache.isCurrentlyInsecure();
+    }
+
     /**
      * All changes to the status bar and notifications funnel through here and are batched.
      */
@@ -2115,6 +2135,7 @@
 
         // Shrink the window to the size of the status bar only
         mStatusBarWindowManager.setStatusBarExpanded(false);
+        mStatusBarWindowManager.setForceStatusBarVisible(false);
         mStatusBarView.setFocusable(true);
 
         // Close any "App info" popups that might have snuck on-screen
@@ -2255,6 +2276,12 @@
                 setAreThereNotifications();
             }
 
+            // ready to unhide
+            if ((vis & View.STATUS_BAR_UNHIDE) != 0) {
+                mSystemUiVisibility &= ~View.STATUS_BAR_UNHIDE;
+                mNoAnimationOnNextBarModeChange = true;
+            }
+
             // update status bar mode
             final int sbMode = computeBarMode(oldVal, newVal, mStatusBarView.getBarTransitions(),
                     View.STATUS_BAR_TRANSIENT, View.STATUS_BAR_TRANSLUCENT);
@@ -2286,10 +2313,6 @@
                 }
             }
 
-            // ready to unhide
-            if ((vis & View.STATUS_BAR_UNHIDE) != 0) {
-                mSystemUiVisibility &= ~View.STATUS_BAR_UNHIDE;
-            }
             if ((vis & View.NAVIGATION_BAR_UNHIDE) != 0) {
                 mSystemUiVisibility &= ~View.NAVIGATION_BAR_UNHIDE;
             }
@@ -2334,17 +2357,21 @@
 
     private void checkBarModes() {
         if (mDemoMode) return;
-        checkBarMode(mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions());
+        checkBarMode(mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions(),
+                mNoAnimationOnNextBarModeChange);
         if (mNavigationBarView != null) {
             checkBarMode(mNavigationBarMode,
-                    mNavigationBarWindowState, mNavigationBarView.getBarTransitions());
+                    mNavigationBarWindowState, mNavigationBarView.getBarTransitions(),
+                    mNoAnimationOnNextBarModeChange);
         }
+        mNoAnimationOnNextBarModeChange = false;
     }
 
-    private void checkBarMode(int mode, int windowState, BarTransitions transitions) {
+    private void checkBarMode(int mode, int windowState, BarTransitions transitions,
+            boolean noAnimation) {
         final boolean powerSave = mBatteryController.isPowerSave();
-        final boolean anim = (mScreenOn == null || mScreenOn) && windowState != WINDOW_STATE_HIDDEN
-                && !powerSave;
+        final boolean anim = !noAnimation && (mScreenOn == null || mScreenOn)
+                && windowState != WINDOW_STATE_HIDDEN && !powerSave;
         if (powerSave && getBarState() == StatusBarState.SHADE) {
             mode = MODE_WARNING;
         }
@@ -2651,6 +2678,23 @@
         final boolean afterKeyguardGone = PreviewInflater.wouldLaunchResolverActivity(
                 mContext, intent, mCurrentUserId);
         final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing();
+        Runnable runnable = new Runnable() {
+            public void run() {
+                intent.setFlags(
+                        Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                mContext.startActivityAsUser(
+                        intent, new UserHandle(UserHandle.USER_CURRENT));
+                overrideActivityPendingAppTransition(
+                        keyguardShowing && !afterKeyguardGone);
+            }
+        };
+        executeRunnableDismissingKeyguard(runnable, dismissShade, afterKeyguardGone);
+    }
+
+    public void executeRunnableDismissingKeyguard(final Runnable runnable,
+            final boolean dismissShade,
+            final boolean afterKeyguardGone) {
+        final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing();
         dismissKeyguardThenExecute(new OnDismissAction() {
             @Override
             public boolean onDismiss() {
@@ -2661,12 +2705,9 @@
                                 ActivityManagerNative.getDefault()
                                         .keyguardWaitingForActivityDrawn();
                             }
-                            intent.setFlags(
-                                    Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                            mContext.startActivityAsUser(
-                                    intent, new UserHandle(UserHandle.USER_CURRENT));
-                            overrideActivityPendingAppTransition(
-                                    keyguardShowing && !afterKeyguardGone);
+                            if (runnable != null) {
+                                runnable.run();
+                            }
                         } catch (RemoteException e) {
                         }
                     }
@@ -2818,8 +2859,6 @@
         mNaturalBarHeight = res.getDimensionPixelSize(
                 com.android.internal.R.dimen.status_bar_height);
 
-        mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);
-
         mRowMinHeight =  res.getDimensionPixelSize(R.dimen.notification_min_height);
         mRowMaxHeight =  res.getDimensionPixelSize(R.dimen.notification_max_height);
 
@@ -3022,7 +3061,7 @@
             mHandlerThread = null;
         }
         mContext.unregisterReceiver(mBroadcastReceiver);
-        mAssistGestureManager.destroy();
+        mAssistManager.destroy();
     }
 
     private boolean mDemoModeAllowed;
@@ -3470,6 +3509,10 @@
         mKeyguardIndicationController.showTransientIndication(R.string.camera_hint);
     }
 
+    public void onVoiceAssistHintStarted() {
+        mKeyguardIndicationController.showTransientIndication(R.string.voice_hint);
+    }
+
     public void onPhoneHintStarted() {
         mKeyguardIndicationController.showTransientIndication(R.string.phone_hint);
     }
@@ -3582,6 +3625,7 @@
     @Override
     public void setBouncerShowing(boolean bouncerShowing) {
         super.setBouncerShowing(bouncerShowing);
+        mStatusBarView.setBouncerShowing(bouncerShowing);
         disable(mDisabledUnmodified1, mDisabledUnmodified2, true /* animate */);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
index 84a9f64..e7e4384 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
@@ -166,6 +166,7 @@
 
     private void apply(State state) {
         applyKeyguardFlags(state);
+        applyForceStatusBarVisibleFlag(state);
         applyFocusableFlag(state);
         adjustScreenOrientation(state);
         applyHeight(state);
@@ -178,6 +179,16 @@
         }
     }
 
+    private void applyForceStatusBarVisibleFlag(State state) {
+        if (state.forceStatusBarVisible) {
+            mLpChanged.privateFlags |= WindowManager
+                    .LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT;
+        } else {
+            mLpChanged.privateFlags &= ~WindowManager
+                    .LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT;
+        }
+    }
+
     private void applyModalFlag(State state) {
         if (state.headsUpShowing) {
             mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
@@ -240,6 +251,11 @@
         apply(mCurrentState);
     }
 
+    public void setForceStatusBarVisible(boolean forceStatusBarVisible) {
+        mCurrentState.forceStatusBarVisible = forceStatusBarVisible;
+        apply(mCurrentState);
+    }
+
     private static class State {
         boolean keyguardShowing;
         boolean keyguardOccluded;
@@ -250,6 +266,7 @@
         boolean keyguardFadingAway;
         boolean qsExpanded;
         boolean headsUpShowing;
+        boolean forceStatusBarVisible;
 
         /**
          * The {@link BaseStatusBar} state from the status bar.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java
index 18983ff..5893cb2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.WifiManager.ActionListener;
+import android.os.Looper;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
@@ -58,10 +59,10 @@
 
     private int mCurrentUser;
 
-    public AccessPointControllerImpl(Context context) {
+    public AccessPointControllerImpl(Context context, Looper bgLooper) {
         mContext = context;
         mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
-        mWifiTracker = new WifiTracker(context, this, false, true);
+        mWifiTracker = new WifiTracker(context, this, bgLooper, false, true);
         mCurrentUser = ActivityManager.getCurrentUser();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java
index 63fcbc5..8f86e2d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java
@@ -35,4 +35,9 @@
     };
 
     static final int WIFI_NO_CONNECTION = R.string.accessibility_no_wifi;
+
+    static final int[] ETHERNET_CONNECTION_VALUES = {
+        R.string.accessibility_ethernet_disconnected,
+        R.string.accessibility_ethernet_connected,
+    };
 }
diff --git a/media/java/android/media/routing/IMediaRouter.aidl b/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetIcons.java
similarity index 64%
rename from media/java/android/media/routing/IMediaRouter.aidl
rename to packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetIcons.java
index 0abb258..b391bd9 100644
--- a/media/java/android/media/routing/IMediaRouter.aidl
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetIcons.java
@@ -1,4 +1,5 @@
-/* Copyright (C) 2014 The Android Open Source Project
+/*
+ * 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.
@@ -13,10 +14,13 @@
  * limitations under the License.
  */
 
-package android.media.routing;
+package com.android.systemui.statusbar.policy;
 
-/** @hide */
-interface IMediaRouter {
+import com.android.systemui.R;
 
+class EthernetIcons {
+    static final int[][] ETHERNET_ICONS = {
+            { R.drawable.stat_sys_ethernet },
+            { R.drawable.stat_sys_ethernet_fully },
+    };
 }
-
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetSignalController.java
new file mode 100644
index 0000000..9c044c4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/EthernetSignalController.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.statusbar.policy;
+
+import android.content.Context;
+import android.net.NetworkCapabilities;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;
+import com.android.systemui.statusbar.policy.NetworkControllerImpl.SignalCluster;
+
+import java.util.List;
+import java.util.Objects;
+
+
+public class EthernetSignalController extends
+        SignalController<SignalController.State, SignalController.IconGroup> {
+
+    public EthernetSignalController(Context context,
+            List<NetworkSignalChangedCallback> signalCallbacks,
+            List<SignalCluster> signalClusters, NetworkControllerImpl networkController) {
+        super("EthernetSignalController", context, NetworkCapabilities.TRANSPORT_ETHERNET,
+                signalCallbacks, signalClusters, networkController);
+        mCurrentState.iconGroup = mLastState.iconGroup = new IconGroup(
+                "Ethernet Icons",
+                EthernetIcons.ETHERNET_ICONS,
+                null,
+                AccessibilityContentDescriptions.ETHERNET_CONNECTION_VALUES,
+                0, 0, 0, 0,
+                AccessibilityContentDescriptions.ETHERNET_CONNECTION_VALUES[0]);
+    }
+
+    @Override
+    public void notifyListeners() {
+        boolean ethernetVisible = mCurrentState.connected;
+        String contentDescription = getStringIfExists(getContentDescription());
+
+        // TODO: wire up data transfer using WifiSignalPoller.
+        int signalClustersLength = mSignalClusters.size();
+        for (int i = 0; i < signalClustersLength; i++) {
+            mSignalClusters.get(i).setEthernetIndicators(ethernetVisible, getCurrentIconId(),
+                    contentDescription);
+        }
+    }
+
+    @Override
+    public SignalController.State cleanState() {
+        return new SignalController.State();
+    }
+
+    public void setConnected(boolean connected) {
+        mCurrentState.connected = connected;
+        notifyListenersIfNecessary();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataControllerImpl.java
index f2b2f66..a7fdadc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataControllerImpl.java
@@ -162,7 +162,7 @@
                 usage.warningLevel = DEFAULT_WARNING_LEVEL;
             }
             if (usage != null) {
-                usage.carrier = mNetworkController.getMobileNetworkName();
+                usage.carrier = mNetworkController.getMobileDataNetworkName();
             }
             return usage;
         } catch (RemoteException e) {
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 c3c6b12..22bf47c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -84,6 +84,7 @@
         mapIconSets();
 
         mLastState.networkName = mCurrentState.networkName = mNetworkNameDefault;
+        mLastState.networkNameData = mCurrentState.networkNameData = mNetworkNameDefault;
         mLastState.enabled = mCurrentState.enabled = hasMobileData;
         mLastState.iconGroup = mCurrentState.iconGroup = mDefaultIcons;
         // Get initial data sim state.
@@ -294,6 +295,7 @@
         if (action.equals(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION)) {
             updateNetworkName(intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_SPN, false),
                     intent.getStringExtra(TelephonyIntents.EXTRA_SPN),
+                    intent.getStringExtra(TelephonyIntents.EXTRA_DATA_SPN),
                     intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_PLMN, false),
                     intent.getStringExtra(TelephonyIntents.EXTRA_PLMN));
             notifyListenersIfNecessary();
@@ -322,14 +324,18 @@
     /**
      * Updates the network's name based on incoming spn and plmn.
      */
-    void updateNetworkName(boolean showSpn, String spn, boolean showPlmn, String plmn) {
+    void updateNetworkName(boolean showSpn, String spn, String dataSpn,
+            boolean showPlmn, String plmn) {
         if (CHATTY) {
-            Log.d("CarrierLabel", "updateNetworkName showSpn=" + showSpn + " spn=" + spn
+            Log.d("CarrierLabel", "updateNetworkName showSpn=" + showSpn
+                    + " spn=" + spn + " dataSpn=" + dataSpn
                     + " showPlmn=" + showPlmn + " plmn=" + plmn);
         }
         StringBuilder str = new StringBuilder();
+        StringBuilder strData = new StringBuilder();
         if (showPlmn && plmn != null) {
             str.append(plmn);
+            strData.append(plmn);
         }
         if (showSpn && spn != null) {
             if (str.length() != 0) {
@@ -342,6 +348,17 @@
         } else {
             mCurrentState.networkName = mNetworkNameDefault;
         }
+        if (showSpn && dataSpn != null) {
+            if (strData.length() != 0) {
+                strData.append(mNetworkNameSeparator);
+            }
+            strData.append(dataSpn);
+        }
+        if (strData.length() != 0) {
+            mCurrentState.networkNameData = strData.toString();
+        } else {
+            mCurrentState.networkNameData = mNetworkNameDefault;
+        }
     }
 
     /**
@@ -492,6 +509,7 @@
 
     static class MobileState extends SignalController.State {
         String networkName;
+        String networkNameData;
         boolean dataSim;
         boolean dataConnected;
         boolean isEmergency;
@@ -505,6 +523,7 @@
             MobileState state = (MobileState) s;
             dataSim = state.dataSim;
             networkName = state.networkName;
+            networkNameData = state.networkNameData;
             dataConnected = state.dataConnected;
             inetForNetwork = state.inetForNetwork;
             isEmergency = state.isEmergency;
@@ -518,6 +537,7 @@
             builder.append(',');
             builder.append("dataSim=").append(dataSim).append(',');
             builder.append("networkName=").append(networkName).append(',');
+            builder.append("networkNameData=").append(networkNameData).append(',');
             builder.append("dataConnected=").append(dataConnected).append(',');
             builder.append("inetForNetwork=").append(inetForNetwork).append(',');
             builder.append("isEmergency=").append(isEmergency).append(',');
@@ -529,6 +549,7 @@
         public boolean equals(Object o) {
             return super.equals(o)
                     && Objects.equals(((MobileState) o).networkName, networkName)
+                    && Objects.equals(((MobileState) o).networkNameData, networkNameData)
                     && ((MobileState) o).dataSim == dataSim
                     && ((MobileState) o).dataConnected == dataConnected
                     && ((MobileState) o).isEmergency == isEmergency
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 9adf028..92e0365 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -28,6 +28,7 @@
 import android.net.wifi.WifiManager;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Looper;
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
@@ -73,6 +74,10 @@
     // Subcontrollers.
     @VisibleForTesting
     final WifiSignalController mWifiSignalController;
+
+    @VisibleForTesting
+    final EthernetSignalController mEthernetSignalController;
+
     @VisibleForTesting
     final Map<Integer, MobileSignalController> mMobileSignalControllers =
             new HashMap<Integer, MobileSignalController>();
@@ -111,12 +116,13 @@
     /**
      * Construct this controller object and register for updates.
      */
-    public NetworkControllerImpl(Context context) {
+    public NetworkControllerImpl(Context context, Looper bgLooper) {
         this(context, (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE),
                 (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
                 (WifiManager) context.getSystemService(Context.WIFI_SERVICE),
                 SubscriptionManager.from(context), Config.readConfig(context),
-                new AccessPointControllerImpl(context), new MobileDataControllerImpl(context));
+                new AccessPointControllerImpl(context, bgLooper),
+                new MobileDataControllerImpl(context));
         registerListeners();
     }
 
@@ -154,6 +160,9 @@
         mWifiSignalController = new WifiSignalController(mContext, mHasMobileDataFeature,
                 mSignalsChangedCallbacks, mSignalClusters, this);
 
+        mEthernetSignalController = new EthernetSignalController(mContext, mSignalsChangedCallbacks,
+                mSignalClusters, this);
+
         // AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it
         updateAirplaneMode(true /* force callback */);
     }
@@ -239,9 +248,9 @@
         return mDefaultSignalController;
     }
 
-    public String getMobileNetworkName() {
+    public String getMobileDataNetworkName() {
         MobileSignalController controller = getDataController();
-        return controller != null ? controller.getState().networkName : "";
+        return controller != null ? controller.getState().networkNameData : "";
     }
 
     public boolean isEmergencyOnly() {
@@ -281,6 +290,7 @@
                 R.string.accessibility_airplane_mode);
         cluster.setNoSims(mHasNoSims);
         mWifiSignalController.notifyListeners();
+        mEthernetSignalController.notifyListeners();
         for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) {
             mobileSignalController.notifyListeners();
         }
@@ -291,6 +301,7 @@
         cb.onAirplaneModeChanged(mAirplaneMode);
         cb.onNoSimVisibleChanged(mHasNoSims);
         mWifiSignalController.notifyListeners();
+        mEthernetSignalController.notifyListeners();
         for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) {
             mobileSignalController.notifyListeners();
         }
@@ -501,6 +512,7 @@
             mobileSignalController.notifyListeners();
         }
         mWifiSignalController.notifyListeners();
+        mEthernetSignalController.notifyListeners();
     }
 
     /**
@@ -560,6 +572,11 @@
         }
         mWifiSignalController.setInetCondition(
                 mValidatedTransports.get(mWifiSignalController.getTransportType()) ? 1 : 0);
+
+        mEthernetSignalController.setConnected(
+                mConnectedTransports.get(mEthernetSignalController.getTransportType()));
+        mEthernetSignalController.setInetCondition(
+                mValidatedTransports.get(mEthernetSignalController.getTransportType()) ? 1 : 0);
     }
 
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
@@ -586,6 +603,8 @@
         }
         mWifiSignalController.dump(pw);
 
+        mEthernetSignalController.dump(pw);
+
         mAccessPoints.dump(pw);
     }
 
@@ -731,6 +750,8 @@
         void setSubs(List<SubscriptionInfo> subs);
         void setNoSims(boolean show);
 
+        void setEthernetIndicators(boolean visible, int icon, String contentDescription);
+
         void setIsAirplaneMode(boolean is, int airplaneIcon, int contentDescription);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java
index 5d89e2f..4269c19 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.os.Bundle;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -50,6 +51,15 @@
 
     public View inflatePreview(Intent intent) {
         WidgetInfo info = getWidgetInfo(intent);
+        return inflatePreview(info);
+    }
+
+    public View inflatePreviewFromService(ComponentName componentName) {
+        WidgetInfo info = getWidgetInfoFromService(componentName);
+        return inflatePreview(info);
+    }
+
+    private KeyguardPreviewContainer inflatePreview(WidgetInfo info) {
         if (info == null) {
             return null;
         }
@@ -77,8 +87,36 @@
         return widgetView;
     }
 
-    private WidgetInfo getWidgetInfo(Intent intent) {
+    private WidgetInfo getWidgetInfoFromService(ComponentName componentName) {
+        PackageManager packageManager = mContext.getPackageManager();
+        // Look for the preview specified in the service meta-data
+        try {
+            Bundle metaData = packageManager.getServiceInfo(
+                    componentName, PackageManager.GET_META_DATA).metaData;
+            return getWidgetInfoFromMetaData(componentName.getPackageName(), metaData);
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.w(TAG, "Failed to load preview; " + componentName.flattenToShortString()
+                    + " not found", e);
+        }
+        return null;
+    }
+
+    private WidgetInfo getWidgetInfoFromMetaData(String contextPackage,
+            Bundle metaData) {
+        if (metaData == null) {
+            return null;
+        }
+        int layoutId = metaData.getInt(META_DATA_KEYGUARD_LAYOUT);
+        if (layoutId == 0) {
+            return null;
+        }
         WidgetInfo info = new WidgetInfo();
+        info.contextPackage = contextPackage;
+        info.layoutId = layoutId;
+        return info;
+    }
+
+    private WidgetInfo getWidgetInfo(Intent intent) {
         PackageManager packageManager = mContext.getPackageManager();
         final List<ResolveInfo> appList = packageManager.queryIntentActivitiesAsUser(
                 intent, PackageManager.MATCH_DEFAULT_ONLY, KeyguardUpdateMonitor.getCurrentUser());
@@ -94,16 +132,8 @@
         if (resolved == null || resolved.activityInfo == null) {
             return null;
         }
-        if (resolved.activityInfo.metaData == null || resolved.activityInfo.metaData.isEmpty()) {
-            return null;
-        }
-        int layoutId = resolved.activityInfo.metaData.getInt(META_DATA_KEYGUARD_LAYOUT);
-        if (layoutId == 0) {
-            return null;
-        }
-        info.contextPackage = resolved.activityInfo.packageName;
-        info.layoutId = layoutId;
-        return info;
+        return getWidgetInfoFromMetaData(resolved.activityInfo.packageName,
+                resolved.activityInfo.metaData);
     }
 
     public static boolean wouldLaunchResolverActivity(Context ctx, Intent intent,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java
index c204814..f3322a1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java
@@ -153,7 +153,11 @@
                 return getIcons().mSbDarkIcons[mCurrentState.inetCondition][mCurrentState.level];
             }
         } else if (mCurrentState.enabled) {
-            return getIcons().mSbDiscState;
+            if (light) {
+                return getIcons().mSbDiscState;
+            } else {
+                return getIcons().mSbDarkDiscState;
+            }
         } else {
             return getIcons().mSbNullState;
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
index 194bcfa..ad27c6e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -43,6 +43,7 @@
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.internal.util.UserIcons;
 import com.android.systemui.BitmapHelper;
 import com.android.systemui.GuestResumeSessionReceiver;
@@ -548,6 +549,11 @@
         @Override
         public void setToggleState(boolean state) {
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsLogger.QS_USERDETAIL;
+        }
     };
 
     private final KeyguardMonitor.Callback mCallback = new KeyguardMonitor.Callback() {
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 202063a..de28ac7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -582,7 +582,7 @@
             return row.getIntrinsicHeight();
         } else if (child instanceof ExpandableView) {
             ExpandableView expandableView = (ExpandableView) child;
-            return expandableView.getActualHeight();
+            return expandableView.getIntrinsicHeight();
         }
         return child == null? mCollapsedSize : child.getHeight();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
index 23a65e8..ca32567 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
@@ -93,7 +93,7 @@
     }
 
     @Override
-    protected void onTargetSelected(TargetInfo target, boolean alwaysCheck) {
+    protected boolean onTargetSelected(TargetInfo target, boolean alwaysCheck) {
         final ResolveInfo ri = target.getResolveInfo();
         try {
             IBinder b = ServiceManager.getService(USB_SERVICE);
@@ -129,5 +129,6 @@
         } catch (RemoteException e) {
             Log.e(TAG, "onIntentSelected failed", e);
         }
+        return true;
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
index 9434036..4bc45df 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
@@ -16,6 +16,9 @@
 
 package com.android.systemui.volume;
 
+import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
 import android.animation.LayoutTransition;
 import android.animation.ObjectAnimator;
 import android.animation.ValueAnimator;
@@ -23,6 +26,7 @@
 import android.app.Dialog;
 import android.app.KeyguardManager;
 import android.content.Context;
+import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.PixelFormat;
@@ -32,6 +36,7 @@
 import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
 import android.media.AudioSystem;
+import android.os.Debug;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -43,6 +48,8 @@
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.View.AccessibilityDelegate;
+import android.view.View.OnAttachStateChangeListener;
 import android.view.View.OnClickListener;
 import android.view.View.OnLayoutChangeListener;
 import android.view.View.OnTouchListener;
@@ -50,6 +57,9 @@
 import android.view.ViewGroup.MarginLayoutParams;
 import android.view.Window;
 import android.view.WindowManager;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
@@ -97,6 +107,9 @@
     private final ZenFooter mZenFooter;
     private final LayoutTransition mLayoutTransition;
     private final Object mSafetyWarningLock = new Object();
+    private final Accessibility mAccessibility = new Accessibility();
+    private final ColorStateList mActiveSliderTint;
+    private final ColorStateList mInactiveSliderTint;
 
     private boolean mShowing;
     private boolean mExpanded;
@@ -142,6 +155,8 @@
         lp.gravity = Gravity.TOP;
         window.setAttributes(lp);
 
+        mActiveSliderTint = loadColorStateList(R.color.system_accent_color);
+        mInactiveSliderTint = loadColorStateList(R.color.volume_slider_inactive);
         mDialog.setContentView(R.layout.volume_dialog);
         mDialogView = (ViewGroup) mDialog.findViewById(R.id.volume_dialog);
         mDialogContentView = (ViewGroup) mDialog.findViewById(R.id.volume_dialog_content);
@@ -174,10 +189,16 @@
         mZenFooter = (ZenFooter) mDialog.findViewById(R.id.volume_zen_footer);
         mZenFooter.init(zenModeController);
 
+        mAccessibility.init();
+
         controller.addCallback(mControllerCallbackH, mHandler);
         controller.getState();
     }
 
+    private ColorStateList loadColorStateList(int colorResId) {
+        return ColorStateList.valueOf(mContext.getColor(colorResId));
+    }
+
     private void updateWindowWidthH() {
         final ViewGroup.LayoutParams lp = mDialogView.getLayoutParams();
         final DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
@@ -409,10 +430,13 @@
 
     protected void rescheduleTimeoutH() {
         mHandler.removeMessages(H.DISMISS);
-        final int timeout = computeTimeoutH();
-        if (D.BUG) Log.d(TAG, "rescheduleTimeout " + timeout);
-        mHandler.sendMessageDelayed(mHandler
-                .obtainMessage(H.DISMISS, Events.DISMISS_REASON_TIMEOUT, 0), timeout);
+        int timeout = -1;
+        if (!mAccessibility.mFeedbackEnabled) {
+            timeout = computeTimeoutH();
+            mHandler.sendMessageDelayed(mHandler
+                    .obtainMessage(H.DISMISS, Events.DISMISS_REASON_TIMEOUT, 0), timeout);
+        }
+        if (D.BUG) Log.d(TAG, "rescheduleTimeout " + timeout + " " + Debug.getCaller());
         mController.userActivity();
     }
 
@@ -475,6 +499,8 @@
         if (res == mExpandButtonRes) return;
         mExpandButtonRes = res;
         mExpandButton.setImageResource(res);
+        mExpandButton.setContentDescription(mContext.getString(mExpanded ?
+                R.string.accessibility_volume_collapse : R.string.accessibility_volume_expand));
     }
 
     private boolean isVisibleH(VolumeRow row, boolean isActive) {
@@ -507,6 +533,8 @@
             }
             Util.setVisOrInvis(row.settingsButton, false);
             row.header.setAlpha(mExpanded && isActive ? 1 : 0.5f);
+            row.slider.setProgressTintList(isActive ? mActiveSliderTint : mInactiveSliderTint);
+            row.slider.setThumbTintList(isActive ? mActiveSliderTint : mInactiveSliderTint);
         }
     }
 
@@ -632,6 +660,7 @@
                 : (iconRes == R.drawable.ic_volume_media_bt || iconRes == row.iconRes)
                         ? Events.ICON_STATE_UNMUTE
                 : Events.ICON_STATE_UNKNOWN;
+        row.icon.setContentDescription(ss.name);
 
         // update slider
         updateVolumeRowSliderH(row, zenMuted);
@@ -770,6 +799,7 @@
         public void onConfigurationChanged() {
             updateWindowWidthH();
             mSpTexts.update();
+            mZenFooter.onConfigurationChanged();
         }
 
         @Override
@@ -931,6 +961,56 @@
         }
     }
 
+    private final class Accessibility {
+        private AccessibilityManager mMgr;
+        private boolean mFeedbackEnabled;
+
+        public void init() {
+            mMgr = (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
+            mDialogView.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {
+                @Override
+                public void onViewDetachedFromWindow(View v) {
+                    // noop
+                }
+
+                @Override
+                public void onViewAttachedToWindow(View v) {
+                    updateFeedbackEnabled();
+                }
+            });
+            mDialogView.setAccessibilityDelegate(new AccessibilityDelegate() {
+                @Override
+                public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child,
+                        AccessibilityEvent event) {
+                    rescheduleTimeoutH();
+                    return super.onRequestSendAccessibilityEvent(host, child, event);
+                }
+            });
+            mMgr.addAccessibilityStateChangeListener(new AccessibilityStateChangeListener() {
+                @Override
+                public void onAccessibilityStateChanged(boolean enabled) {
+                    updateFeedbackEnabled();
+                }
+            });
+            updateFeedbackEnabled();
+        }
+
+        private void updateFeedbackEnabled() {
+            mFeedbackEnabled = computeFeedbackEnabled();
+        }
+
+        private boolean computeFeedbackEnabled() {
+            final List<AccessibilityServiceInfo> services =
+                    mMgr.getEnabledAccessibilityServiceList(FEEDBACK_ALL_MASK);
+            for (AccessibilityServiceInfo asi : services) {
+                if ((asi.feedbackType & FEEDBACK_ALL_MASK) != 0) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
     private static class VolumeRow {
         private View view;
         private View space;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
index 8aded45..ccb2b5a 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
@@ -36,10 +36,11 @@
     private static final String TAG = Util.logTag(ZenFooter.class);
 
     private final Context mContext;
+    private final SpTexts mSpTexts;
 
     private TextView mSummaryLine1;
     private TextView mSummaryLine2;
-    private View mEndNowButton;
+    private TextView mEndNowButton;
     private int mZen = -1;
     private ZenModeConfig mConfig;
     private ZenModeController mController;
@@ -47,6 +48,7 @@
     public ZenFooter(Context context, AttributeSet attrs) {
         super(context, attrs);
         mContext = context;
+        mSpTexts = new SpTexts(mContext);
         setLayoutTransition(new LayoutTransition());
     }
 
@@ -55,7 +57,10 @@
         super.onFinishInflate();
         mSummaryLine1 = (TextView) findViewById(R.id.volume_zen_summary_line_1);
         mSummaryLine2 = (TextView) findViewById(R.id.volume_zen_summary_line_2);
-        mEndNowButton = findViewById(R.id.volume_zen_end_now);
+        mEndNowButton = (TextView) findViewById(R.id.volume_zen_end_now);
+        mSpTexts.add(mSummaryLine1);
+        mSpTexts.add(mSummaryLine2);
+        mSpTexts.add(mEndNowButton);
     }
 
     public void init(final ZenModeController controller) {
@@ -122,4 +127,8 @@
         Util.setText(mSummaryLine2, line2);
     }
 
+    public void onConfigurationChanged() {
+        mSpTexts.update();
+    }
+
 }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index 9f9c9ac..b3b6725 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -48,6 +48,7 @@
 import android.widget.RadioButton;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.statusbar.policy.ZenModeController;
@@ -598,6 +599,7 @@
                         if (childTag == null || childTag == tag) continue;
                         childTag.rb.setChecked(false);
                     }
+                    MetricsLogger.action(mContext, MetricsLogger.QS_DND_CONDITION_SELECT);
                     select(tag.condition);
                     announceConditionSelection(tag);
                 }
@@ -700,6 +702,7 @@
     }
 
     private void onClickTimeButton(View row, ConditionTag tag, boolean up) {
+        MetricsLogger.action(mContext, MetricsLogger.QS_DND_TIME, up);
         Condition newCondition = null;
         final int N = MINUTE_BUCKETS.length;
         if (mBucketIndex == -1) {
@@ -907,6 +910,7 @@
         public void onSelected(final Object value) {
             if (value != null && mZenButtons.isShown() && isAttachedToWindow()) {
                 final int zen = (Integer) value;
+                MetricsLogger.action(mContext, MetricsLogger.QS_DND_ZEN_SELECT, zen);
                 if (DEBUG) Log.d(mTag, "mZenButtonsCallback selected=" + zen);
                 final Uri realConditionId = getRealConditionId(mSessionExitCondition);
                 AsyncTask.execute(new Runnable() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index 5d40eed..29f461e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -234,6 +234,11 @@
         mPhoneStateListener.onDataActivity(dataActivity);
     }
 
+    public void setCarrierNetworkChange(boolean enable) {
+        Log.d(TAG, "setCarrierNetworkChange(" + enable + ")");
+        mPhoneStateListener.onCarrierNetworkChange(enable);
+    }
+
     protected void verifyHasNoSims(boolean hasNoSimsVisible) {
         ArgumentCaptor<Boolean> hasNoSimsArg = ArgumentCaptor.forClass(Boolean.class);
 
@@ -273,24 +278,34 @@
     }
 
     protected void verifyLastMobileDataIndicators(boolean visible, int icon, int typeIcon) {
-        ArgumentCaptor<Integer> iconArg = ArgumentCaptor.forClass(Integer.class);
+        verifyLastMobileDataIndicators(visible, icon, icon, typeIcon);
+    }
+
+    protected void verifyLastMobileDataIndicators(boolean visible, int strengthIcon,
+            int darkStrengthIcon, int typeIcon) {
+        ArgumentCaptor<Integer> strengthIconArg = ArgumentCaptor.forClass(Integer.class);
+        ArgumentCaptor<Integer> darkStrengthIconArg = ArgumentCaptor.forClass(Integer.class);
         ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
         ArgumentCaptor<Boolean> visibleArg = ArgumentCaptor.forClass(Boolean.class);
 
         // TODO: Verify all fields.
         Mockito.verify(mSignalCluster, Mockito.atLeastOnce()).setMobileDataIndicators(
-                visibleArg.capture(), iconArg.capture(), iconArg.capture(), typeIconArg.capture(),
+                visibleArg.capture(), strengthIconArg.capture(), darkStrengthIconArg.capture(),
+                typeIconArg.capture(),
                 ArgumentCaptor.forClass(String.class).capture(),
                 ArgumentCaptor.forClass(String.class).capture(),
                 ArgumentCaptor.forClass(Boolean.class).capture(),
                 ArgumentCaptor.forClass(Integer.class).capture());
 
-        assertEquals("Signal icon in status bar", icon, (int) iconArg.getValue());
+        assertEquals("Signal strength icon in status bar", strengthIcon,
+                (int) strengthIconArg.getValue());
+        assertEquals("Signal strength icon (dark mode) in status bar", darkStrengthIcon,
+                (int) darkStrengthIconArg.getValue());
         assertEquals("Data icon in status bar", typeIcon, (int) typeIconArg.getValue());
         assertEquals("Visibility in status bar", visible, (boolean) visibleArg.getValue());
     }
 
    protected void assertNetworkNameEquals(String expected) {
-       assertEquals("Network name", expected, mNetworkController.getMobileNetworkName());
+       assertEquals("Network name", expected, mNetworkController.getMobileDataNetworkName());
    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java
new file mode 100644
index 0000000..82ced9f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java
@@ -0,0 +1,40 @@
+package com.android.systemui.statusbar.policy;
+
+import android.net.NetworkCapabilities;
+
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+
+public class NetworkControllerEthernetTest extends NetworkControllerBaseTest {
+
+    public void testEthernetIcons() {
+        verifyLastEthernetIcon(false, 0);
+
+        setEthernetState(true, false);   // Connected, unvalidated.
+        verifyLastEthernetIcon(true, EthernetIcons.ETHERNET_ICONS[0][0]);
+
+        setEthernetState(true, true);    // Connected, validated.
+        verifyLastEthernetIcon(true, EthernetIcons.ETHERNET_ICONS[1][0]);
+
+        setEthernetState(true, false);   // Connected, unvalidated.
+        verifyLastEthernetIcon(true, EthernetIcons.ETHERNET_ICONS[0][0]);
+
+        setEthernetState(false, false);  // Disconnected.
+        verifyLastEthernetIcon(false, 0);
+    }
+
+    protected void setEthernetState(boolean connected, boolean validated) {
+        setConnectivity(validated ? 100 : 0, NetworkCapabilities.TRANSPORT_ETHERNET, connected);
+    }
+
+    protected void verifyLastEthernetIcon(boolean visible, int icon) {
+        ArgumentCaptor<Boolean> visibleArg = ArgumentCaptor.forClass(Boolean.class);
+        ArgumentCaptor<Integer> iconArg = ArgumentCaptor.forClass(Integer.class);
+
+        Mockito.verify(mSignalCluster, Mockito.atLeastOnce()).setEthernetIndicators(
+                visibleArg.capture(), iconArg.capture(),
+                ArgumentCaptor.forClass(String.class).capture());
+        assertEquals("Ethernet visible, in status bar", visible, (boolean) visibleArg.getValue());
+        assertEquals("Ethernet icon, in status bar", icon, (int) iconArg.getValue());
+    }
+}
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 aefb1bb..389ad6f 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
@@ -396,4 +396,65 @@
               false /* dataOut */);
 
     }
+
+    public void testCarrierNetworkChange_carrierNetworkChangeWhileConnected() {
+      int strength = SignalStrength.SIGNAL_STRENGTH_GREAT;
+
+      setupDefaultSignal();
+      setLevel(strength);
+
+      // API call is made
+      setCarrierNetworkChange(true /* enabled */);
+
+      // Boolean value is set, but we still have a signal, should be showing normal
+      verifyLastMobileDataIndicators(true /* visible */,
+              TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][strength] /* strengthIcon */,
+              DEFAULT_ICON /* typeIcon */);
+
+      // Lose voice but still have data
+      setVoiceRegState(ServiceState.STATE_OUT_OF_SERVICE);
+      verifyLastMobileDataIndicators(true /* visible */,
+              TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][strength] /* strengthIcon */,
+              DEFAULT_ICON /* typeIcon */);
+
+      // Voice but no data
+      setVoiceRegState(ServiceState.STATE_IN_SERVICE);
+      setDataRegState(ServiceState.STATE_OUT_OF_SERVICE);
+      verifyLastMobileDataIndicators(true /* visible */,
+              TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][strength] /* strengthIcon */,
+              DEFAULT_ICON /* typeIcon */);
+    }
+
+    public void testCarrierNetworkChange_carrierNetworkChangeWhileDisconnected() {
+      int strength = SignalStrength.SIGNAL_STRENGTH_GREAT;
+
+      setupDefaultSignal();
+      setLevel(strength);
+
+      // Verify baseline
+      verifyLastMobileDataIndicators(true /* visible */,
+              TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][strength] /* strengthIcon */,
+              DEFAULT_ICON /* typeIcon */);
+
+      // API call is made and all connectivity lost
+      setCarrierNetworkChange(true /* enabled */);
+      setVoiceRegState(ServiceState.STATE_OUT_OF_SERVICE);
+      setDataRegState(ServiceState.STATE_OUT_OF_SERVICE);
+
+      // Out of service and carrier network change is true, show special indicator
+      verifyLastMobileDataIndicators(true /* visible */,
+              TelephonyIcons.TELEPHONY_CARRIER_NETWORK_CHANGE[0][0] /* strengthIcon */,
+              TelephonyIcons.TELEPHONY_CARRIER_NETWORK_CHANGE_DARK[0][0] /* darkStrengthIcon */,
+              0 /* typeIcon */);
+
+      // Revert back
+      setCarrierNetworkChange(false /* enabled */);
+      setVoiceRegState(ServiceState.STATE_IN_SERVICE);
+      setDataRegState(ServiceState.STATE_IN_SERVICE);
+
+      // Verify back in previous state
+      verifyLastMobileDataIndicators(true /* visible */,
+              TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH[1][strength] /* strengthIcon */,
+              DEFAULT_ICON /* typeIcon */);
+    }
 }
diff --git a/packages/VpnDialogs/AndroidManifest.xml b/packages/VpnDialogs/AndroidManifest.xml
index 375c5d8..32e1e6d 100644
--- a/packages/VpnDialogs/AndroidManifest.xml
+++ b/packages/VpnDialogs/AndroidManifest.xml
@@ -24,7 +24,7 @@
     <application android:label="VpnDialogs"
             android:allowBackup="false" >
         <activity android:name=".ConfirmDialog"
-                android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert">
+                android:theme="@*android:style/Theme.Material.DayNight.Dialog.Alert">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.DEFAULT"/>
@@ -32,7 +32,7 @@
         </activity>
 
         <activity android:name=".ManageDialog"
-                android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
+                android:theme="@*android:style/Theme.Material.DayNight.Dialog.Alert"
                 android:noHistory="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
diff --git a/packages/WallpaperCropper/res/values/styles.xml b/packages/WallpaperCropper/res/values/styles.xml
index a34b25a..e438c84 100644
--- a/packages/WallpaperCropper/res/values/styles.xml
+++ b/packages/WallpaperCropper/res/values/styles.xml
@@ -15,13 +15,13 @@
 -->
 
 <resources>
-    <style name="Theme.WallpaperCropper" parent="@android:style/Theme.DeviceDefault">
+    <style name="Theme.WallpaperCropper" parent="@android:style/Theme.Material.DayNight">
         <item name="android:actionBarStyle">@style/WallpaperCropperActionBar</item>
         <item name="android:windowFullscreen">true</item>
         <item name="android:windowActionBarOverlay">true</item>
     </style>
 
-    <style name="WallpaperCropperActionBar" parent="android:style/Widget.DeviceDefault.ActionBar">
+    <style name="WallpaperCropperActionBar" parent="@android:style/Widget.Material.ActionBar">
         <item name="android:displayOptions">showCustom</item>
         <item name="android:background">#88000000</item>
     </style>
diff --git a/preloaded-classes b/preloaded-classes
index c94623a..d2ed762 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -1152,6 +1152,7 @@
 android.provider.Settings$System
 android.provider.Telephony$Mms
 android.renderscript.RenderScript
+android.security.AndroidKeyStoreBCWorkaroundProvider
 android.security.AndroidKeyStoreProvider
 android.speech.tts.TextToSpeechService
 android.speech.tts.TextToSpeechService$SpeechItemV1
diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java
index 3b61f9d..70a5821 100644
--- a/rs/java/android/renderscript/Allocation.java
+++ b/rs/java/android/renderscript/Allocation.java
@@ -1422,6 +1422,8 @@
     }
 
     /**
+     * @hide
+     *
      * This is only intended to be used by auto-generated code reflected from
      * the RenderScript script files and should not be used by developers.
      *
diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java
index e7f210b..4f10699 100644
--- a/rs/java/android/renderscript/RenderScript.java
+++ b/rs/java/android/renderscript/RenderScript.java
@@ -302,8 +302,12 @@
         long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
         long[] depFieldIDs) {
       validate();
-      return rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
+      long c = rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
           sizes, depClosures, depFieldIDs);
+      if (c == 0) {
+          throw new RSRuntimeException("Failed creating closure.");
+      }
+      return c;
     }
 
     native long rsnInvokeClosureCreate(long con, long invokeID, byte[] params,
@@ -311,8 +315,12 @@
     synchronized long nInvokeClosureCreate(long invokeID, byte[] params,
         long[] fieldIDs, long[] values, int[] sizes) {
       validate();
-      return rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
+      long c = rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
           values, sizes);
+      if (c == 0) {
+          throw new RSRuntimeException("Failed creating closure.");
+      }
+      return c;
     }
 
     native void rsnClosureSetArg(long con, long closureID, int index,
@@ -337,7 +345,11 @@
     synchronized long nScriptGroup2Create(String name, String cachePath,
                                           long[] closures) {
       validate();
-      return rsnScriptGroup2Create(mContext, name, cachePath, closures);
+      long g = rsnScriptGroup2Create(mContext, name, cachePath, closures);
+      if (g == 0) {
+          throw new RSRuntimeException("Failed creating script group.");
+      }
+      return g;
     }
 
     native void rsnScriptGroup2Execute(long con, long groupID);
diff --git a/rs/java/android/renderscript/Script.java b/rs/java/android/renderscript/Script.java
index 6a1efee..7cd6d09 100644
--- a/rs/java/android/renderscript/Script.java
+++ b/rs/java/android/renderscript/Script.java
@@ -182,9 +182,9 @@
         mRS.validateObject(ain);
         mRS.validateObject(aout);
 
-        if (ain == null && aout == null) {
+        if (ain == null && aout == null && sc == null) {
             throw new RSIllegalArgumentException(
-                "At least one of ain or aout is required to be non-null.");
+                "At least one of input allocation, output allocation, or LaunchOptions is required to be non-null.");
         }
 
         long[] in_ids = null;
diff --git a/rs/java/android/renderscript/ScriptIntrinsicBLAS.java b/rs/java/android/renderscript/ScriptIntrinsicBLAS.java
index a387aab..f7e81b0 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicBLAS.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicBLAS.java
@@ -1012,7 +1012,7 @@
             }
         } else {
             if (A != null) {
-                if (TransA != NO_TRANSPOSE) {
+                if (TransA == TRANSPOSE || TransA == CONJ_TRANSPOSE) {
                     aN = A.getType().getY();
                     aM = A.getType().getX();
                 } else {
@@ -1021,7 +1021,7 @@
                 }
             }
             if (B != null) {
-                if (TransB != NO_TRANSPOSE) {
+                if (TransB == TRANSPOSE || TransB == CONJ_TRANSPOSE) {
                     bN = B.getType().getY();
                     bM = B.getType().getX();
                 } else {
@@ -1039,14 +1039,8 @@
             if (cM != cN) {
                 throw new RSRuntimeException("Matrix C is not symmetric");
             }
-            if (TransA != NO_TRANSPOSE) {
-                if (aN != cM) {
-                    throw new RSRuntimeException("Called BLAS with invalid dimensions");
-                }
-            } else {
-                if (aM != cM) {
-                    throw new RSRuntimeException("Called BLAS with invalid dimensions");
-                }
+            if (aM != cM) {
+                throw new RSRuntimeException("Called BLAS with invalid dimensions");
             }
         } else if (A != null && B != null) {
             // A and B only
@@ -1272,7 +1266,7 @@
         validateUplo(Uplo);
         validateSYR2K(Element.F32(mRS), Trans, A, B, C);
         int K = -1;
-        if (Trans == TRANSPOSE) {
+        if (Trans != NO_TRANSPOSE) {
             K = A.getType().getY();
         } else {
             K = A.getType().getX();
@@ -1283,34 +1277,34 @@
         validateUplo(Uplo);
         validateSYR2K(Element.F64(mRS), Trans, A, B, C);
         int K = -1;
-        if (Trans == TRANSPOSE) {
+        if (Trans != NO_TRANSPOSE) {
             K = A.getType().getY();
         } else {
             K = A.getType().getX();
         }
-        mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_ssyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, A.getID(mRS), B.getID(mRS), beta, C.getID(mRS), 0, 0, 0, 0);
+        mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, A.getID(mRS), B.getID(mRS), beta, C.getID(mRS), 0, 0, 0, 0);
     }
     public void CSYR2K(@Uplo int Uplo, @Transpose int Trans, Float2 alpha, Allocation A, Allocation B, Float2 beta, Allocation C) {
         validateUplo(Uplo);
         validateSYR2K(Element.F32_2(mRS), Trans, A, B, C);
         int K = -1;
-        if (Trans == TRANSPOSE) {
+        if (Trans != NO_TRANSPOSE) {
             K = A.getType().getY();
         } else {
             K = A.getType().getX();
         }
-        mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ssyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
+        mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
     }
     public void ZSYR2K(@Uplo int Uplo, @Transpose int Trans, Double2 alpha, Allocation A, Allocation B, Double2 beta, Allocation C) {
         validateUplo(Uplo);
         validateSYR2K(Element.F64_2(mRS), Trans, A, B, C);
         int K = -1;
-        if (Trans == TRANSPOSE) {
+        if (Trans != NO_TRANSPOSE) {
             K = A.getType().getY();
         } else {
             K = A.getType().getX();
         }
-        mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ssyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
+        mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
     }
 
     static void validateTRMM(Element e, @Side int Side, @Transpose int TransA, Allocation A, Allocation B) {
@@ -1351,21 +1345,21 @@
         validateUplo(Uplo);
         validateDiag(Diag);
         validateTRMM(Element.F64(mRS), Side, TransA, A, B);
-        mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_strmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
-                                        alpha, A.getID(mRS), B.getID(mRS), 0.f, 0, 0, 0, 0, 0);
+        mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+                                        alpha, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0);
     }
     public void CTRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Float2 alpha, Allocation A, Allocation B) {
         validateUplo(Uplo);
         validateDiag(Diag);
         validateTRMM(Element.F32_2(mRS), Side, TransA, A, B);
-        mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_strmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+        mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
                                          alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
     }
     public void ZTRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Double2 alpha, Allocation A, Allocation B) {
         validateUplo(Uplo);
         validateDiag(Diag);
         validateTRMM(Element.F64_2(mRS), Side, TransA, A, B);
-        mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_strmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+        mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
                                    alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
     }
 
@@ -1409,21 +1403,21 @@
         validateUplo(Uplo);
         validateDiag(Diag);
         validateTRSM(Element.F64(mRS), Side, TransA, A, B);
-        mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_strsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+        mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
                                         alpha, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0);
     }
     public void CTRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Float2 alpha, Allocation A, Allocation B) {
         validateUplo(Uplo);
         validateDiag(Diag);
         validateTRSM(Element.F32_2(mRS), Side, TransA, A, B);
-        mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_strsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+        mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
                                          alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
     }
     public void ZTRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Double2 alpha, Allocation A, Allocation B) {
         validateUplo(Uplo);
         validateDiag(Diag);
         validateTRSM(Element.F64_2(mRS), Side, TransA, A, B);
-        mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_strsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+        mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
                                    alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
     }
 
diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp
index cbe87fc..1833a1c 100644
--- a/rs/jni/android_renderscript_RenderScript.cpp
+++ b/rs/jni/android_renderscript_RenderScript.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "libRS_jni"
+#define LOG_TAG "RenderScript_jni"
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -328,79 +328,167 @@
                jlong returnValue, jlongArray fieldIDArray,
                jlongArray valueArray, jintArray sizeArray,
                jlongArray depClosureArray, jlongArray depFieldIDArray) {
+  jlong ret = 0;
+
   jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
   jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
-  RsScriptFieldID* fieldIDs =
-      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
-  for (int i = 0; i< fieldIDs_length; i++) {
-    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
-  }
-
   jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
   jsize values_length = _env->GetArrayLength(valueArray);
-  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
-  for (int i = 0; i < values_length; i++) {
-    values[i] = (uintptr_t)jValues[i];
-  }
-
-  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
+  jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr);
   jsize sizes_length = _env->GetArrayLength(sizeArray);
-
   jlong* jDepClosures =
       _env->GetLongArrayElements(depClosureArray, nullptr);
   jsize depClosures_length = _env->GetArrayLength(depClosureArray);
-  RsClosure* depClosures =
-      (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
-  for (int i = 0; i < depClosures_length; i++) {
-    depClosures[i] = (RsClosure)jDepClosures[i];
-  }
-
   jlong* jDepFieldIDs =
       _env->GetLongArrayElements(depFieldIDArray, nullptr);
   jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
-  RsScriptFieldID* depFieldIDs =
-      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
-  for (int i = 0; i < depClosures_length; i++) {
+
+  size_t numValues, numDependencies;
+  RsScriptFieldID* fieldIDs;
+  uintptr_t* values;
+  RsClosure* depClosures;
+  RsScriptFieldID* depFieldIDs;
+
+  if (fieldIDs_length != values_length || values_length != sizes_length) {
+      ALOGE("Unmatched field IDs, values, and sizes in closure creation.");
+      goto exit;
+  }
+
+  numValues = (size_t)fieldIDs_length;
+
+  if (depClosures_length != depFieldIDs_length) {
+      ALOGE("Unmatched closures and field IDs for dependencies in closure creation.");
+      goto exit;
+  }
+
+  numDependencies = (size_t)depClosures_length;
+
+  if (numDependencies > numValues) {
+      ALOGE("Unexpected number of dependencies in closure creation");
+      goto exit;
+  }
+
+  if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) {
+      ALOGE("Too many arguments or globals in closure creation");
+      goto exit;
+  }
+
+  fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues);
+  if (fieldIDs == nullptr) {
+      goto exit;
+  }
+
+  for (size_t i = 0; i < numValues; i++) {
+    fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
+  }
+
+  values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues);
+  if (values == nullptr) {
+      goto exit;
+  }
+
+  for (size_t i = 0; i < numValues; i++) {
+    values[i] = (uintptr_t)jValues[i];
+  }
+
+  depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies);
+  if (depClosures == nullptr) {
+      goto exit;
+  }
+
+  for (size_t i = 0; i < numDependencies; i++) {
+    depClosures[i] = (RsClosure)jDepClosures[i];
+  }
+
+  depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies);
+  if (depFieldIDs == nullptr) {
+      goto exit;
+  }
+
+  for (size_t i = 0; i < numDependencies; i++) {
     depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
   }
 
-  return (jlong)(uintptr_t)rsClosureCreate(
+  ret = (jlong)(uintptr_t)rsClosureCreate(
       (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
-      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
-      (int*)sizes, (size_t)sizes_length,
-      depClosures, (size_t)depClosures_length,
-      depFieldIDs, (size_t)depFieldIDs_length);
+      fieldIDs, numValues, values, numValues,
+      (int*)jSizes, numValues,
+      depClosures, numDependencies,
+      depFieldIDs, numDependencies);
+
+exit:
+
+  _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT);
+  _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT);
+  _env->ReleaseIntArrayElements (sizeArray,       jSizes,       JNI_ABORT);
+  _env->ReleaseLongArrayElements(valueArray,      jValues,      JNI_ABORT);
+  _env->ReleaseLongArrayElements(fieldIDArray,    jFieldIDs,    JNI_ABORT);
+
+  return ret;
 }
 
 static jlong
 nInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
                      jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray,
                      jintArray sizeArray) {
+  jlong ret = 0;
+
   jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr);
   jsize jParamLength = _env->GetArrayLength(paramArray);
-
   jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
   jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
-  RsScriptFieldID* fieldIDs =
-      (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
-  for (int i = 0; i< fieldIDs_length; i++) {
+  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
+  jsize values_length = _env->GetArrayLength(valueArray);
+  jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr);
+  jsize sizes_length = _env->GetArrayLength(sizeArray);
+
+  size_t numValues;
+  RsScriptFieldID* fieldIDs;
+  uintptr_t* values;
+
+  if (fieldIDs_length != values_length || values_length != sizes_length) {
+      ALOGE("Unmatched field IDs, values, and sizes in closure creation.");
+      goto exit;
+  }
+
+  numValues = (size_t) fieldIDs_length;
+
+  if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) {
+      ALOGE("Too many arguments or globals in closure creation");
+      goto exit;
+  }
+
+  fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues);
+  if (fieldIDs == nullptr) {
+      goto exit;
+  }
+
+  for (size_t i = 0; i< numValues; i++) {
     fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
   }
 
-  jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
-  jsize values_length = _env->GetArrayLength(valueArray);
-  uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
-  for (int i = 0; i < values_length; i++) {
+  values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues);
+  if (values == nullptr) {
+      goto exit;
+  }
+
+  for (size_t i = 0; i < numValues; i++) {
     values[i] = (uintptr_t)jValues[i];
   }
 
-  jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
-  jsize sizes_length = _env->GetArrayLength(sizeArray);
-
-  return (jlong)(uintptr_t)rsInvokeClosureCreate(
+  ret = (jlong)(uintptr_t)rsInvokeClosureCreate(
       (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength,
-      fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
-      (int*)sizes, (size_t)sizes_length);
+      fieldIDs, numValues, values, numValues,
+      (int*)jSizes, numValues);
+
+exit:
+
+  _env->ReleaseIntArrayElements (sizeArray,       jSizes,       JNI_ABORT);
+  _env->ReleaseLongArrayElements(valueArray,      jValues,      JNI_ABORT);
+  _env->ReleaseLongArrayElements(fieldIDArray,    jFieldIDs,    JNI_ABORT);
+  _env->ReleaseByteArrayElements(paramArray,      jParams,      JNI_ABORT);
+
+  return ret;
 }
 
 static void
@@ -420,20 +508,40 @@
 static long
 nScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name,
                     jstring cacheDir, jlongArray closureArray) {
+  jlong ret = 0;
+
   AutoJavaStringToUTF8 nameUTF(_env, name);
   AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
 
   jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
   jsize numClosures = _env->GetArrayLength(closureArray);
-  RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
+
+  RsClosure* closures;
+
+  if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) {
+    ALOGE("Too many closures in script group");
+    goto exit;
+  }
+
+  closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
+  if (closures == nullptr) {
+      goto exit;
+  }
+
   for (int i = 0; i < numClosures; i++) {
     closures[i] = (RsClosure)jClosures[i];
   }
 
-  return (jlong)(uintptr_t)rsScriptGroup2Create(
+  ret = (jlong)(uintptr_t)rsScriptGroup2Create(
       (RsContext)con, nameUTF.c_str(), nameUTF.length(),
       cacheDirUTF.c_str(), cacheDirUTF.length(),
       closures, numClosures);
+
+exit:
+
+  _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT);
+
+  return ret;
 }
 
 static void
@@ -526,7 +634,7 @@
     call.alpha.c.r = alphaX;
     call.alpha.c.i = alphaY;
     call.beta.c.r = betaX;
-    call.beta.c.r = betaY;
+    call.beta.c.i = betaY;
     call.incX = incX;
     call.incY = incY;
     call.KL = KL;
@@ -561,7 +669,7 @@
     call.alpha.z.r = alphaX;
     call.alpha.z.i = alphaY;
     call.beta.z.r = betaX;
-    call.beta.z.r = betaY;
+    call.beta.z.i = betaY;
     call.incX = incX;
     call.incY = incY;
     call.KL = KL;
@@ -1102,9 +1210,8 @@
 nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
                             jobject jbitmap, jint usage)
 {
-    SkBitmap const * nativeBitmap =
-            GraphicsJNI::getSkBitmap(_env, jbitmap);
-    const SkBitmap& bitmap(*nativeBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap);
 
     bitmap.lockPixels();
     const void* ptr = bitmap.getPixels();
@@ -1119,9 +1226,8 @@
 nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type,
                                         jint mip, jobject jbitmap, jint usage)
 {
-    SkBitmap const * nativeBitmap =
-            GraphicsJNI::getSkBitmap(_env, jbitmap);
-    const SkBitmap& bitmap(*nativeBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap);
 
     bitmap.lockPixels();
     const void* ptr = bitmap.getPixels();
@@ -1136,9 +1242,8 @@
 nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip,
                                 jobject jbitmap, jint usage)
 {
-    SkBitmap const * nativeBitmap =
-            GraphicsJNI::getSkBitmap(_env, jbitmap);
-    const SkBitmap& bitmap(*nativeBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap);
 
     bitmap.lockPixels();
     const void* ptr = bitmap.getPixels();
@@ -1152,9 +1257,8 @@
 static void
 nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
 {
-    SkBitmap const * nativeBitmap =
-            GraphicsJNI::getSkBitmap(_env, jbitmap);
-    const SkBitmap& bitmap(*nativeBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap);
     int w = bitmap.width();
     int h = bitmap.height();
 
@@ -1169,9 +1273,8 @@
 static void
 nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject jbitmap)
 {
-    SkBitmap const * nativeBitmap =
-            GraphicsJNI::getSkBitmap(_env, jbitmap);
-    const SkBitmap& bitmap(*nativeBitmap);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(_env, jbitmap, &bitmap);
 
     bitmap.lockPixels();
     void* ptr = bitmap.getPixels();
@@ -1751,7 +1854,7 @@
                jintArray limits)
 {
     if (kLogApi) {
-        ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
+        ALOGD("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout);
     }
 
     jint   in_len = 0;
@@ -1761,8 +1864,14 @@
 
     if (ains != nullptr) {
         in_len = _env->GetArrayLength(ains);
-        in_ptr = _env->GetLongArrayElements(ains, nullptr);
+        if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) {
+            ALOGE("Too many arguments in kernel launch.");
+            // TODO (b/20758983): Report back to Java and throw an exception
+            return;
+        }
 
+        // TODO (b/20760800): Check in_ptr is not null
+        in_ptr = _env->GetLongArrayElements(ains, nullptr);
         if (sizeof(RsAllocation) == sizeof(jlong)) {
             in_allocs = (RsAllocation*)in_ptr;
 
@@ -1770,6 +1879,11 @@
             // Convert from 64-bit jlong types to the native pointer type.
 
             in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
+            if (in_allocs == nullptr) {
+                ALOGE("Failed launching kernel for lack of memory.");
+                _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
+                return;
+            }
 
             for (int index = in_len; --index >= 0;) {
                 in_allocs[index] = (RsAllocation)in_ptr[index];
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 17c7e0c..78cbac9 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -63,6 +63,7 @@
 import android.util.AttributeSet;
 import android.util.Pair;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.util.SparseIntArray;
 import android.util.TypedValue;
 import android.util.Xml;
@@ -171,6 +172,8 @@
 
     private final SparseIntArray mLoadedUserIds = new SparseIntArray();
 
+    private final SparseArray<ArraySet<String>> mWidgetPackages = new SparseArray<>();
+
     private final BackupRestoreController mBackupRestoreController;
 
     private final Context mContext;
@@ -572,7 +575,7 @@
             widget.host = host;
 
             host.widgets.add(widget);
-            mWidgets.add(widget);
+            addWidgetLocked(widget);
 
             saveGroupStateAsync(userId);
 
@@ -800,6 +803,8 @@
             widget.provider = provider;
             widget.options = (options != null) ? cloneIfLocalBinder(options) : new Bundle();
 
+            onWidgetProviderAddedOrChangedLocked(widget);
+
             // We need to provide a default value for the widget category if it is not specified
             if (!widget.options.containsKey(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY)) {
                 widget.options.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY,
@@ -1410,7 +1415,7 @@
         host.widgets.remove(widget);
         pruneHostLocked(host);
 
-        mWidgets.remove(widget);
+        removeWidgetLocked(widget);
 
         Provider provider = widget.provider;
         if (provider != null) {
@@ -1874,7 +1879,7 @@
             updateAppWidgetInstanceLocked(widget, null, false);
             // clear out references to this appWidgetId
             widget.host.widgets.remove(widget);
-            mWidgets.remove(widget);
+            removeWidgetLocked(widget);
             widget.provider = null;
             pruneHostLocked(widget.host);
             widget.host = null;
@@ -2277,14 +2282,14 @@
 
         if (version >= 0) {
             // Hooke'm up...
-            bindLoadedWidgets(loadedWidgets);
+            bindLoadedWidgetsLocked(loadedWidgets);
 
             // upgrade the database if needed
             performUpgradeLocked(version);
         } else {
             // failed reading, clean up
             Slog.w(TAG, "Failed to read state, clearing widgets and hosts.");
-            mWidgets.clear();
+            clearWidgetsLocked();
             mHosts.clear();
             final int N = mProviders.size();
             for (int i = 0; i < N; i++) {
@@ -2293,7 +2298,7 @@
         }
     }
 
-    private void bindLoadedWidgets(List<LoadedWidgetState> loadedWidgets) {
+    private void bindLoadedWidgetsLocked(List<LoadedWidgetState> loadedWidgets) {
         final int loadedWidgetCount = loadedWidgets.size();
         for (int i = loadedWidgetCount - 1; i >= 0; i--) {
             LoadedWidgetState loadedWidget = loadedWidgets.remove(i);
@@ -2314,7 +2319,7 @@
 
             widget.provider.widgets.add(widget);
             widget.host.widgets.add(widget);
-            mWidgets.add(widget);
+            addWidgetLocked(widget);
         }
     }
 
@@ -2346,6 +2351,91 @@
         return null;
     }
 
+    /**
+     * Adds the widget to mWidgets and tracks the package name in mWidgetPackages.
+     */
+    void addWidgetLocked(Widget widget) {
+        mWidgets.add(widget);
+
+        onWidgetProviderAddedOrChangedLocked(widget);
+    }
+
+    /**
+     * Checks if the provider is assigned and updates the mWidgetPackages to track packages
+     * that have bound widgets.
+     */
+    void onWidgetProviderAddedOrChangedLocked(Widget widget) {
+        if (widget.provider == null) return;
+
+        int userId = widget.provider.getUserId();
+        ArraySet<String> packages = mWidgetPackages.get(userId);
+        if (packages == null) {
+            mWidgetPackages.put(userId, packages = new ArraySet<String>());
+        }
+        packages.add(widget.provider.info.provider.getPackageName());
+    }
+
+    /**
+     * Removes a widget from mWidgets and updates the cache of bound widget provider packages.
+     * If there are other widgets with the same package, leaves it in the cache, otherwise it
+     * removes the associated package from the cache.
+     */
+    void removeWidgetLocked(Widget widget) {
+        mWidgets.remove(widget);
+
+        onWidgetRemovedLocked(widget);
+    }
+
+    private void onWidgetRemovedLocked(Widget widget) {
+        if (widget.provider == null) return;
+
+        final int userId = widget.provider.getUserId();
+        final String packageName = widget.provider.info.provider.getPackageName();
+        ArraySet<String> packages = mWidgetPackages.get(userId);
+        if (packages == null) {
+            return;
+        }
+        // Check if there is any other widget with the same package name.
+        // Remove packageName if none.
+        final int N = mWidgets.size();
+        for (int i = 0; i < N; i++) {
+            Widget w = mWidgets.get(i);
+            if (w.provider == null) continue;
+            if (w.provider.getUserId() == userId
+                    && packageName.equals(w.provider.info.provider.getPackageName())) {
+                return;
+            }
+        }
+        packages.remove(packageName);
+    }
+
+    /**
+     * Clears all widgets and associated cache of packages with bound widgets.
+     */
+    void clearWidgetsLocked() {
+        mWidgets.clear();
+
+        onWidgetsClearedLocked();
+    }
+
+    private void onWidgetsClearedLocked() {
+        mWidgetPackages.clear();
+    }
+
+    @Override
+    public boolean isBoundWidgetPackage(String packageName, int userId) {
+        if (Binder.getCallingUid() != Process.SYSTEM_UID) {
+            throw new SecurityException("Only the system process can call this");
+        }
+        synchronized (mLock) {
+            final ArraySet<String> packages = mWidgetPackages.get(userId);
+            if (packages != null) {
+                return packages.contains(packageName);
+            }
+        }
+        return false;
+    }
+
     private void saveStateLocked(int userId) {
         tagProvidersAndHosts();
 
@@ -2692,7 +2782,7 @@
                 // as we do not want to make host callbacks and provider broadcasts
                 // as the host and the provider will be killed.
                 if (hostInUser && (!hasProvider || providerInUser)) {
-                    mWidgets.remove(i);
+                    removeWidgetLocked(widget);
                     widget.host.widgets.remove(widget);
                     widget.host = null;
                     if (hasProvider) {
@@ -3751,7 +3841,7 @@
                                         Slog.i(TAG, "New restored id " + restoredId
                                                 + " now " + id);
                                     }
-                                    mWidgets.add(id);
+                                    addWidgetLocked(id);
                                 }
                                 if (id.provider.info != null) {
                                     stashProviderRestoreUpdateLocked(id.provider,
@@ -4013,7 +4103,7 @@
                         host.widgets.remove(widget);
                         provider.widgets.remove(widget);
                         unbindAppWidgetRemoteViewsServicesLocked(widget);
-                        mWidgets.remove(i);
+                        removeWidgetLocked(widget);
                     }
                 }
                 mPrunedApps.add(pkg);
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 1bed4f3..6c1023c 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -160,7 +160,7 @@
 public class BackupManagerService {
 
     private static final String TAG = "BackupManagerService";
-    static final boolean DEBUG = true;
+    static final boolean DEBUG = false;
     static final boolean MORE_DEBUG = false;
     static final boolean DEBUG_SCHEDULING = MORE_DEBUG || true;
 
@@ -9368,44 +9368,47 @@
                 throw new SecurityException("No permission to restore other packages");
             }
 
-            // So far so good; we're allowed to try to restore this package.  Now
-            // check whether there is data for it in the current dataset, falling back
-            // to the ancestral dataset if not.
-            long token = getAvailableRestoreToken(packageName);
-            if (DEBUG) Slog.v(TAG, "restorePackage pkg=" + packageName
-                    + " token=" + Long.toHexString(token));
-
-            // If we didn't come up with a place to look -- no ancestral dataset and
-            // the app has never been backed up from this device -- there's nothing
-            // to do but return failure.
-            if (token == 0) {
-                if (DEBUG) Slog.w(TAG, "No data available for this package; not restoring");
-                return -1;
-            }
-
-            String dirName;
-            try {
-                dirName = mRestoreTransport.transportDirName();
-            } catch (RemoteException e) {
-                // Transport went AWOL; fail.
-                Slog.e(TAG, "Unable to contact transport for restore");
-                return -1;
-            }
-
-            // Stop the session timeout until we finalize the restore
-            mBackupHandler.removeMessages(MSG_RESTORE_TIMEOUT);
-
-            // Ready to go:  enqueue the restore request and claim success
+            // So far so good; we're allowed to try to restore this package.
             long oldId = Binder.clearCallingIdentity();
-            mWakelock.acquire();
-            if (MORE_DEBUG) {
-                Slog.d(TAG, "restorePackage() : " + packageName);
+            try {
+                // Check whether there is data for it in the current dataset, falling back
+                // to the ancestral dataset if not.
+                long token = getAvailableRestoreToken(packageName);
+                if (DEBUG) Slog.v(TAG, "restorePackage pkg=" + packageName
+                        + " token=" + Long.toHexString(token));
+
+                // If we didn't come up with a place to look -- no ancestral dataset and
+                // the app has never been backed up from this device -- there's nothing
+                // to do but return failure.
+                if (token == 0) {
+                    if (DEBUG) Slog.w(TAG, "No data available for this package; not restoring");
+                    return -1;
+                }
+
+                String dirName;
+                try {
+                    dirName = mRestoreTransport.transportDirName();
+                } catch (RemoteException e) {
+                    // Transport went AWOL; fail.
+                    Slog.e(TAG, "Unable to contact transport for restore");
+                    return -1;
+                }
+
+                // Stop the session timeout until we finalize the restore
+                mBackupHandler.removeMessages(MSG_RESTORE_TIMEOUT);
+
+                // Ready to go:  enqueue the restore request and claim success
+                mWakelock.acquire();
+                if (MORE_DEBUG) {
+                    Slog.d(TAG, "restorePackage() : " + packageName);
+                }
+                Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
+                msg.obj = new RestoreParams(mRestoreTransport, dirName,
+                        observer, token, app, 0);
+                mBackupHandler.sendMessage(msg);
+            } finally {
+                Binder.restoreCallingIdentity(oldId);
             }
-            Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
-            msg.obj = new RestoreParams(mRestoreTransport, dirName,
-                    observer, token, app, 0);
-            mBackupHandler.sendMessage(msg);
-            Binder.restoreCallingIdentity(oldId);
             return 0;
         }
 
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index 17b4939..1366149 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -744,6 +744,11 @@
         }
     }
 
+    @Override
+    public int permissionToOpCode(String permission) {
+        return AppOpsManager.permissionToOpCode(permission);
+    }
+
     void finishOperationLocked(Op op) {
         if (op.nesting <= 1) {
             if (op.nesting == 1) {
diff --git a/services/core/java/com/android/server/AssetAtlasService.java b/services/core/java/com/android/server/AssetAtlasService.java
index 9e28b64..ebc810f 100644
--- a/services/core/java/com/android/server/AssetAtlasService.java
+++ b/services/core/java/com/android/server/AssetAtlasService.java
@@ -119,7 +119,6 @@
     // long0: SkBitmap*, the native bitmap object
     // long1: x position
     // long2: y position
-    // long3: rotated, 1 if the bitmap must be rotated, 0 otherwise
     private long[] mAtlasMap;
 
     /**
@@ -199,8 +198,6 @@
         private final ArrayList<Bitmap> mBitmaps;
         private final int mPixelCount;
 
-        private Bitmap mAtlasBitmap;
-
         Renderer(ArrayList<Bitmap> bitmaps, int pixelCount) {
             mBitmaps = bitmaps;
             mPixelCount = pixelCount;
@@ -238,7 +235,7 @@
         /**
          * Renders a list of bitmaps into the atlas. The position of each bitmap
          * was decided by the packing algorithm and will be honored by this
-         * method. If need be this method will also rotate bitmaps.
+         * method.
          *
          * @param buffer The buffer to render the atlas entries into
          * @param atlas The atlas to pack the bitmaps into
@@ -255,8 +252,9 @@
 
             // We always render the atlas into a bitmap. This bitmap is then
             // uploaded into the GraphicBuffer using OpenGL to swizzle the content
-            final Canvas canvas = acquireCanvas(buffer.getWidth(), buffer.getHeight());
-            if (canvas == null) return false;
+            final Bitmap atlasBitmap = Bitmap.createBitmap(
+                    buffer.getWidth(), buffer.getHeight(), Bitmap.Config.ARGB_8888);
+            final Canvas canvas = new Canvas(atlasBitmap);
 
             final Atlas.Entry entry = new Atlas.Entry();
 
@@ -265,73 +263,53 @@
             int mapIndex = 0;
 
             boolean result = false;
-            try {
-                final long startRender = System.nanoTime();
-                final int count = mBitmaps.size();
+            final long startRender = System.nanoTime();
+            final int count = mBitmaps.size();
 
-                for (int i = 0; i < count; i++) {
-                    final Bitmap bitmap = mBitmaps.get(i);
-                    if (atlas.pack(bitmap.getWidth(), bitmap.getHeight(), entry) != null) {
-                        // We have more bitmaps to pack than the current configuration
-                        // says, we were most likely not able to detect a change in the
-                        // list of preloaded drawables, abort and delete the configuration
-                        if (mapIndex >= mAtlasMap.length) {
-                            deleteDataFile();
-                            break;
-                        }
-
-                        canvas.save();
-                        canvas.translate(entry.x, entry.y);
-                        if (entry.rotated) {
-                            canvas.translate(bitmap.getHeight(), 0.0f);
-                            canvas.rotate(90.0f);
-                        }
-                        canvas.drawBitmap(bitmap, 0.0f, 0.0f, null);
-                        canvas.restore();
-                        atlasMap[mapIndex++] = bitmap.getSkBitmap();
-                        atlasMap[mapIndex++] = entry.x;
-                        atlasMap[mapIndex++] = entry.y;
-                        atlasMap[mapIndex++] = entry.rotated ? 1 : 0;
+            for (int i = 0; i < count; i++) {
+                final Bitmap bitmap = mBitmaps.get(i);
+                if (atlas.pack(bitmap.getWidth(), bitmap.getHeight(), entry) != null) {
+                    // We have more bitmaps to pack than the current configuration
+                    // says, we were most likely not able to detect a change in the
+                    // list of preloaded drawables, abort and delete the configuration
+                    if (mapIndex >= mAtlasMap.length) {
+                        deleteDataFile();
+                        break;
                     }
+
+                    canvas.save();
+                    canvas.translate(entry.x, entry.y);
+                    canvas.drawBitmap(bitmap, 0.0f, 0.0f, null);
+                    canvas.restore();
+                    atlasMap[mapIndex++] = bitmap.refSkPixelRef();
+                    atlasMap[mapIndex++] = entry.x;
+                    atlasMap[mapIndex++] = entry.y;
                 }
+            }
 
-                final long endRender = System.nanoTime();
-                result = nUploadAtlas(buffer, mAtlasBitmap);
+            final long endRender = System.nanoTime();
+            releaseCanvas(canvas, atlasBitmap);
+            result = nUploadAtlas(buffer, atlasBitmap);
+            atlasBitmap.recycle();
+            final long endUpload = System.nanoTime();
 
-                final long endUpload = System.nanoTime();
-                if (DEBUG_ATLAS) {
-                    float renderDuration = (endRender - startRender) / 1000.0f / 1000.0f;
-                    float uploadDuration = (endUpload - endRender) / 1000.0f / 1000.0f;
-                    Log.d(LOG_TAG, String.format("Rendered atlas in %.2fms (%.2f+%.2fms)",
-                            renderDuration + uploadDuration, renderDuration, uploadDuration));
-                }
-
-            } finally {
-                releaseCanvas(canvas);
+            if (DEBUG_ATLAS) {
+                float renderDuration = (endRender - startRender) / 1000.0f / 1000.0f;
+                float uploadDuration = (endUpload - endRender) / 1000.0f / 1000.0f;
+                Log.d(LOG_TAG, String.format("Rendered atlas in %.2fms (%.2f+%.2fms)",
+                        renderDuration + uploadDuration, renderDuration, uploadDuration));
             }
 
             return result;
         }
 
         /**
-         * Returns a Canvas for the specified buffer. If {@link #DEBUG_ATLAS_TEXTURE}
-         * is turned on, the returned Canvas will render into a local bitmap that
-         * will then be saved out to disk for debugging purposes.
-         * @param width
-         * @param height
-         */
-        private Canvas acquireCanvas(int width, int height) {
-            mAtlasBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-            return new Canvas(mAtlasBitmap);
-        }
-
-        /**
          * Releases the canvas used to render into the buffer. Calling this method
          * will release any resource previously acquired. If {@link #DEBUG_ATLAS_TEXTURE}
          * is turend on, calling this method will write the content of the atlas
          * to disk in /data/system/atlas.png for debugging.
          */
-        private void releaseCanvas(Canvas canvas) {
+        private void releaseCanvas(Canvas canvas, Bitmap atlasBitmap) {
             canvas.setBitmap(null);
             if (DEBUG_ATLAS_TEXTURE) {
 
@@ -340,7 +318,7 @@
 
                 try {
                     FileOutputStream out = new FileOutputStream(dataFile);
-                    mAtlasBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
+                    atlasBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                     out.close();
                 } catch (FileNotFoundException e) {
                     // Ignore
@@ -348,8 +326,6 @@
                     // Ignore
                 }
             }
-            mAtlasBitmap.recycle();
-            mAtlasBitmap = null;
         }
     }
 
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index ef82bb7..32b91d2 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -48,6 +48,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
 import android.util.Log;
 
 import java.io.FileDescriptor;
@@ -443,6 +444,16 @@
     /** Internal death rec list */
     Map<IBinder, ClientDeathRecipient> mBleApps = new HashMap<IBinder, ClientDeathRecipient>();
 
+    @Override
+    public boolean isBleScanAlwaysAvailable() {
+        try {
+            return (Settings.Global.getInt(mContentResolver,
+                    Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE)) != 0;
+        } catch (SettingNotFoundException e) {
+        }
+        return false;
+    }
+
     public int updateBleAppCount(IBinder token, boolean enable) {
         if (enable) {
             ClientDeathRecipient r = mBleApps.get(token);
@@ -501,7 +512,8 @@
     private void onBluetoothGattServiceUp() {
         if (DBG) Log.d(TAG,"BluetoothGatt Service is Up");
         try{
-            if (isBleAppPresent() == false && mBluetooth.getState() == BluetoothAdapter.STATE_BLE_ON) {
+            if (isBleAppPresent() == false && mBluetooth != null
+                  && mBluetooth.getState() == BluetoothAdapter.STATE_BLE_ON) {
                 mBluetooth.onLeServiceUp();
 
                 // waive WRITE_SECURE_SETTINGS permission check
@@ -520,32 +532,26 @@
      */
     private void sendBrEdrDownCallback() {
         if (DBG) Log.d(TAG,"Calling sendBrEdrDownCallback callbacks");
-        int n = mCallbacks.beginBroadcast();
+
+        if(mBluetooth == null) {
+            Log.w(TAG, "Bluetooth handle is null");
+            return;
+        }
 
         if (isBleAppPresent() == false) {
             try {
                 mBluetooth.onBrEdrDown();
             } catch(RemoteException e) {
-                Log.e(TAG,"Unable to call onBrEdrDown", e);
+                Log.e(TAG, "Call to onBrEdrDown() failed.", e);
             }
-        }
-        else{//need to stay at BLE ON. disconnect all Gatt connections
+        } else {
+            // Need to stay at BLE ON. Disconnect all Gatt connections
             try{
-                mBluetoothGatt.unregAll();//disconnectAll();
+                mBluetoothGatt.unregAll();
             } catch(RemoteException e) {
-                Log.e(TAG,"Unable to disconn all", e);
+                Log.e(TAG, "Unable to disconnect all apps.", e);
             }
         }
-
-        Log.d(TAG,"Broadcasting onBrEdrDown() to " + n + " receivers.");
-        for (int i=0; i <n; i++) {
-            try {
-                mCallbacks.getBroadcastItem(i).onBrEdrDown();
-            }  catch (RemoteException e) {
-                Log.e(TAG, "Unable to call sendBrEdrDownCallback() on callback #" + i, e);
-            }
-        }
-        mCallbacks.finishBroadcast();
     }
 
     /** @hide*/
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 1a75b8a..1dc2d7e71 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -190,7 +190,7 @@
     /** Set of ifaces that are costly. */
     private HashSet<String> mMeteredIfaces = Sets.newHashSet();
 
-    private Context mContext;
+    final private Context mContext;
     private int mNetworkPreference;
     // 0 is full bad, 100 is full good
     private int mDefaultInetConditionPublished = 0;
@@ -344,6 +344,11 @@
      */
     private static final int EVENT_PROMPT_UNVALIDATED = 29;
 
+    /**
+     * used internally to (re)configure mobile data always-on settings.
+     */
+    private static final int EVENT_CONFIGURE_MOBILE_DATA_ALWAYS_ON = 30;
+
     /** Handler used for internal events. */
     final private InternalHandler mHandler;
     /** Handler used for incoming {@link NetworkStateTracker} events. */
@@ -374,7 +379,7 @@
 
     private PacManager mPacManager = null;
 
-    private SettingsObserver mSettingsObserver;
+    final private SettingsObserver mSettingsObserver;
 
     private UserManager mUserManager;
 
@@ -555,13 +560,12 @@
             INetworkStatsService statsService, INetworkPolicyManager policyManager) {
         if (DBG) log("ConnectivityService starting up");
 
-        NetworkCapabilities netCap = new NetworkCapabilities();
-        netCap.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
-        netCap.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
-        mDefaultRequest = new NetworkRequest(netCap, TYPE_NONE, nextNetworkRequestId());
-        NetworkRequestInfo nri = new NetworkRequestInfo(null, mDefaultRequest, new Binder(),
-                NetworkRequestInfo.REQUEST);
-        mNetworkRequests.put(mDefaultRequest, nri);
+        mDefaultRequest = createInternetRequestForTransport(-1);
+        mNetworkRequests.put(mDefaultRequest, new NetworkRequestInfo(
+                null, mDefaultRequest, new Binder(), NetworkRequestInfo.REQUEST));
+
+        mDefaultMobileDataRequest = createInternetRequestForTransport(
+                NetworkCapabilities.TRANSPORT_CELLULAR);
 
         HandlerThread handlerThread = new HandlerThread("ConnectivityServiceThread");
         handlerThread.start();
@@ -696,8 +700,8 @@
             mInetLog = new ArrayList();
         }
 
-        mSettingsObserver = new SettingsObserver(mHandler, EVENT_APPLY_GLOBAL_HTTP_PROXY);
-        mSettingsObserver.observe(mContext);
+        mSettingsObserver = new SettingsObserver(mContext, mHandler);
+        registerSettingsCallbacks();
 
         mDataConnectionStats = new DataConnectionStats(mContext);
         mDataConnectionStats.startMonitoring();
@@ -707,6 +711,44 @@
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
     }
 
+    private NetworkRequest createInternetRequestForTransport(int transportType) {
+        NetworkCapabilities netCap = new NetworkCapabilities();
+        netCap.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
+        netCap.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
+        if (transportType > -1) {
+            netCap.addTransportType(transportType);
+        }
+        return new NetworkRequest(netCap, TYPE_NONE, nextNetworkRequestId());
+    }
+
+    private void handleMobileDataAlwaysOn() {
+        final boolean enable = (Settings.Global.getInt(
+                mContext.getContentResolver(), Settings.Global.MOBILE_DATA_ALWAYS_ON, 0) == 1);
+        final boolean isEnabled = (mNetworkRequests.get(mDefaultMobileDataRequest) != null);
+        if (enable == isEnabled) {
+            return;  // Nothing to do.
+        }
+
+        if (enable) {
+            handleRegisterNetworkRequest(new NetworkRequestInfo(
+                    null, mDefaultMobileDataRequest, new Binder(), NetworkRequestInfo.REQUEST));
+        } else {
+            handleReleaseNetworkRequest(mDefaultMobileDataRequest, Process.SYSTEM_UID);
+        }
+    }
+
+    private void registerSettingsCallbacks() {
+        // Watch for global HTTP proxy changes.
+        mSettingsObserver.observe(
+                Settings.Global.getUriFor(Settings.Global.HTTP_PROXY),
+                EVENT_APPLY_GLOBAL_HTTP_PROXY);
+
+        // Watch for whether or not to keep mobile data always on.
+        mSettingsObserver.observe(
+                Settings.Global.getUriFor(Settings.Global.MOBILE_DATA_ALWAYS_ON),
+                EVENT_CONFIGURE_MOBILE_DATA_ALWAYS_ON);
+    }
+
     private synchronized int nextNetworkRequestId() {
         return mNextNetworkRequestId++;
     }
@@ -1141,7 +1183,13 @@
         NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network);
         if (nai != null) {
             synchronized (nai) {
-                return new NetworkCapabilities(nai.networkCapabilities);
+                NetworkCapabilities nc = new NetworkCapabilities(nai.networkCapabilities);
+                if (nai.lastValidated) {
+                    nc.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
+                } else {
+                    nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
+                }
+                return nc;
             }
         }
         return null;
@@ -1485,6 +1533,9 @@
             mContext.registerReceiver(mUserPresentReceiver, filter);
         }
 
+        // Configure whether mobile data is always on.
+        mHandler.sendMessage(mHandler.obtainMessage(EVENT_CONFIGURE_MOBILE_DATA_ALWAYS_ON));
+
         mHandler.sendMessage(mHandler.obtainMessage(EVENT_SYSTEM_READY));
 
         mPermissionMonitor.startMonitoring();
@@ -2101,12 +2152,10 @@
                     + nri.request + " because their intents matched.");
             handleReleaseNetworkRequest(existingRequest.request, getCallingUid());
         }
-        handleRegisterNetworkRequest(msg);
+        handleRegisterNetworkRequest(nri);
     }
 
-    private void handleRegisterNetworkRequest(Message msg) {
-        final NetworkRequestInfo nri = (NetworkRequestInfo) (msg.obj);
-
+    private void handleRegisterNetworkRequest(NetworkRequestInfo nri) {
         mNetworkRequests.put(nri.request, nri);
 
         // TODO: This logic may be better replaced with a call to rematchNetworkAndRequests
@@ -2417,7 +2466,7 @@
                 }
                 case EVENT_REGISTER_NETWORK_REQUEST:
                 case EVENT_REGISTER_NETWORK_LISTENER: {
-                    handleRegisterNetworkRequest(msg);
+                    handleRegisterNetworkRequest((NetworkRequestInfo) msg.obj);
                     break;
                 }
                 case EVENT_REGISTER_NETWORK_REQUEST_WITH_INTENT: {
@@ -2440,6 +2489,10 @@
                     handlePromptUnvalidated((Network) msg.obj);
                     break;
                 }
+                case EVENT_CONFIGURE_MOBILE_DATA_ALWAYS_ON: {
+                    handleMobileDataAlwaysOn();
+                    break;
+                }
                 case EVENT_SYSTEM_READY: {
                     for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
                         nai.networkMonitor.systemReady = true;
@@ -2831,23 +2884,36 @@
     }
 
     private static class SettingsObserver extends ContentObserver {
-        private int mWhat;
-        private Handler mHandler;
-        SettingsObserver(Handler handler, int what) {
-            super(handler);
+        final private HashMap<Uri, Integer> mUriEventMap;
+        final private Context mContext;
+        final private Handler mHandler;
+
+        SettingsObserver(Context context, Handler handler) {
+            super(null);
+            mUriEventMap = new HashMap<Uri, Integer>();
+            mContext = context;
             mHandler = handler;
-            mWhat = what;
         }
 
-        void observe(Context context) {
-            ContentResolver resolver = context.getContentResolver();
-            resolver.registerContentObserver(Settings.Global.getUriFor(
-                    Settings.Global.HTTP_PROXY), false, this);
+        void observe(Uri uri, int what) {
+            mUriEventMap.put(uri, what);
+            final ContentResolver resolver = mContext.getContentResolver();
+            resolver.registerContentObserver(uri, false, this);
         }
 
         @Override
         public void onChange(boolean selfChange) {
-            mHandler.obtainMessage(mWhat).sendToTarget();
+            Slog.wtf(TAG, "Should never be reached.");
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            final Integer what = mUriEventMap.get(uri);
+            if (what != null) {
+                mHandler.obtainMessage(what.intValue()).sendToTarget();
+            } else {
+                loge("No matching event to send for URI=" + uri);
+            }
         }
     }
 
@@ -3637,6 +3703,10 @@
     // Note: if mDefaultRequest is changed, NetworkMonitor needs to be updated.
     private final NetworkRequest mDefaultRequest;
 
+    // Request used to optionally keep mobile data active even when higher
+    // priority networks like Wi-Fi are active.
+    private final NetworkRequest mDefaultMobileDataRequest;
+
     private NetworkAgentInfo getDefaultNetwork() {
         return mNetworkForRequestId.get(mDefaultRequest.requestId);
     }
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 4fda370..e856a93 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -145,10 +145,9 @@
     private static final char INPUT_METHOD_SEPARATOR = ':';
     private static final char INPUT_METHOD_SUBTYPE_SEPARATOR = ';';
 
-    static final int MSG_SHOW_IM_PICKER = 1;
-    static final int MSG_SHOW_IM_SUBTYPE_PICKER = 2;
-    static final int MSG_SHOW_IM_SUBTYPE_ENABLER = 3;
-    static final int MSG_SHOW_IM_CONFIG = 4;
+    static final int MSG_SHOW_IM_SUBTYPE_PICKER = 1;
+    static final int MSG_SHOW_IM_SUBTYPE_ENABLER = 2;
+    static final int MSG_SHOW_IM_CONFIG = 3;
 
     static final int MSG_UNBIND_INPUT = 1000;
     static final int MSG_BIND_INPUT = 1010;
@@ -1696,6 +1695,7 @@
                     vis = 0;
                 }
                 mImeWindowVis = vis;
+                mInputShown = ((mImeWindowVis & InputMethodService.IME_VISIBLE) != 0);
                 mBackDisposition = backDisposition;
                 final boolean iconVisibility = ((vis & (InputMethodService.IME_ACTIVE)) != 0)
                         && (mWindowManagerService.isHardKeyboardAvailable()
@@ -2039,11 +2039,9 @@
                         if (!mIWindowManager.inputMethodClientHasFocus(client)) {
                             if (DEBUG) Slog.w(TAG, "Ignoring hideSoftInput of uid "
                                     + uid + ": " + client);
-                            setImeWindowVisibilityStatusHiddenLocked();
                             return false;
                         }
                     } catch (RemoteException e) {
-                        setImeWindowVisibilityStatusHiddenLocked();
                         return false;
                     }
                 }
@@ -2239,7 +2237,8 @@
     }
 
     @Override
-    public void showInputMethodPickerFromClient(IInputMethodClient client) {
+    public void showInputMethodPickerFromClient(
+            IInputMethodClient client, int auxiliarySubtypeMode) {
         if (!calledFromValidUser()) {
             return;
         }
@@ -2252,7 +2251,8 @@
 
             // Always call subtype picker, because subtype picker is a superset of input method
             // picker.
-            mHandler.sendEmptyMessage(MSG_SHOW_IM_SUBTYPE_PICKER);
+            mHandler.sendMessage(mCaller.obtainMessageI(
+                    MSG_SHOW_IM_SUBTYPE_PICKER, auxiliarySubtypeMode));
         }
     }
 
@@ -2597,12 +2597,26 @@
     public boolean handleMessage(Message msg) {
         SomeArgs args;
         switch (msg.what) {
-            case MSG_SHOW_IM_PICKER:
-                showInputMethodMenu();
-                return true;
-
             case MSG_SHOW_IM_SUBTYPE_PICKER:
-                showInputMethodSubtypeMenu();
+                final boolean showAuxSubtypes;
+                switch (msg.arg1) {
+                    case InputMethodManager.SHOW_IM_PICKER_MODE_AUTO:
+                        // This is undocumented so far, but IMM#showInputMethodPicker() has been
+                        // implemented so that auxiliary subtypes will be excluded when the soft
+                        // keyboard is invisible.
+                        showAuxSubtypes = mInputShown;
+                        break;
+                    case InputMethodManager.SHOW_IM_PICKER_MODE_INCLUDE_AUXILIARY_SUBTYPES:
+                        showAuxSubtypes = true;
+                        break;
+                    case InputMethodManager.SHOW_IM_PICKER_MODE_EXCLUDE_AUXILIARY_SUBTYPES:
+                        showAuxSubtypes = false;
+                        break;
+                    default:
+                        Slog.e(TAG, "Unknown subtype picker mode = " + msg.arg1);
+                        return false;
+                }
+                showInputMethodMenu(showAuxSubtypes);
                 return true;
 
             case MSG_SHOW_IM_SUBTYPE_ENABLER:
@@ -2861,14 +2875,6 @@
 
     // ----------------------------------------------------------------------
 
-    private void showInputMethodMenu() {
-        showInputMethodMenuInternal(false);
-    }
-
-    private void showInputMethodSubtypeMenu() {
-        showInputMethodMenuInternal(true);
-    }
-
     private void showInputMethodAndSubtypeEnabler(String inputMethodId) {
         Intent intent = new Intent(Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
@@ -2893,8 +2899,8 @@
                 && mKeyguardManager.isKeyguardLocked() && mKeyguardManager.isKeyguardSecure();
     }
 
-    private void showInputMethodMenuInternal(boolean showSubtypes) {
-        if (DEBUG) Slog.v(TAG, "Show switching menu");
+    private void showInputMethodMenu(boolean showAuxSubtypes) {
+        if (DEBUG) Slog.v(TAG, "Show switching menu. showAuxSubtypes=" + showAuxSubtypes);
 
         final Context context = mContext;
         final boolean isScreenLocked = isScreenLocked();
@@ -2915,7 +2921,7 @@
 
             final List<ImeSubtypeListItem> imList =
                     mSwitchingController.getSortedInputMethodAndSubtypeListLocked(
-                            showSubtypes, mInputShown, isScreenLocked);
+                            true /* showSubtypes */, showAuxSubtypes, isScreenLocked);
 
             if (lastInputMethodSubtypeId == NOT_A_SUBTYPE_ID) {
                 final InputMethodSubtype currentSubtype = getCurrentInputMethodSubtypeLocked();
@@ -3016,7 +3022,7 @@
             };
             mDialogBuilder.setSingleChoiceItems(adapter, checkedItem, choiceListener);
 
-            if (showSubtypes && !isScreenLocked) {
+            if (!isScreenLocked) {
                 final OnClickListener positiveListener = new OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int whichButton) {
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index 5df74c5..ed2de4a 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -356,28 +356,23 @@
         return mStorage.hasPattern(userId);
     }
 
-    private void maybeUpdateKeystore(String password, int userHandle) {
+    private void setKeystorePassword(String password, int userHandle) {
         final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
         final KeyStore ks = KeyStore.getInstance();
 
         final List<UserInfo> profiles = um.getProfiles(userHandle);
-        boolean shouldReset = TextUtils.isEmpty(password);
-
-        // For historical reasons, don't wipe a non-empty keystore if we have a single user with a
-        // single profile.
-        if (userHandle == UserHandle.USER_OWNER && profiles.size() == 1) {
-            if (!ks.isEmpty()) {
-                shouldReset = false;
-            }
-        }
-
         for (UserInfo pi : profiles) {
-            final int profileUid = UserHandle.getUid(pi.id, Process.SYSTEM_UID);
-            if (shouldReset) {
-                ks.resetUid(profileUid);
-            } else {
-                ks.passwordUid(password, profileUid);
-            }
+            ks.onUserPasswordChanged(pi.id, password);
+        }
+    }
+
+    private void unlockKeystore(String password, int userHandle) {
+        final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
+        final KeyStore ks = KeyStore.getInstance();
+
+        final List<UserInfo> profiles = um.getProfiles(userHandle);
+        for (UserInfo pi : profiles) {
+            ks.unlock(pi.id, password);
         }
     }
 
@@ -423,7 +418,7 @@
         if (pattern == null) {
             getGateKeeperService().clearSecureUserId(userId);
             mStorage.writePatternHash(null, userId);
-            maybeUpdateKeystore(null, userId);
+            setKeystorePassword(null, userId);
             return;
         }
 
@@ -451,7 +446,7 @@
         if (password == null) {
             getGateKeeperService().clearSecureUserId(userId);
             mStorage.writePasswordHash(null, userId);
-            maybeUpdateKeystore(null, userId);
+            setKeystorePassword(null, userId);
             return;
         }
 
@@ -484,7 +479,7 @@
                 toEnrollBytes);
 
         if (hash != null) {
-            maybeUpdateKeystore(toEnroll, userId);
+            setKeystorePassword(toEnroll, userId);
         }
 
         return hash;
@@ -530,7 +525,7 @@
             byte[] hash = mLockPatternUtils.patternToHash(
                     mLockPatternUtils.stringToPattern(pattern));
             if (Arrays.equals(hash, storedHash.hash)) {
-                maybeUpdateKeystore(pattern, userId);
+                unlockKeystore(pattern, userId);
                 // migrate password to GateKeeper
                 setLockPattern(pattern, null, userId);
                 if (!hasChallenge) {
@@ -556,7 +551,7 @@
         }
 
         // pattern has matched
-        maybeUpdateKeystore(pattern, userId);
+        unlockKeystore(pattern, userId);
         return token;
 
     }
@@ -599,7 +594,7 @@
         if (storedHash.version == CredentialHash.VERSION_LEGACY) {
             byte[] hash = mLockPatternUtils.passwordToHash(password, userId);
             if (Arrays.equals(hash, storedHash.hash)) {
-                maybeUpdateKeystore(password, userId);
+                unlockKeystore(password, userId);
                 // migrate password to GateKeeper
                 setLockPassword(password, null, userId);
                 if (!hasChallenge) {
@@ -625,7 +620,7 @@
         }
 
         // password has matched
-        maybeUpdateKeystore(password, userId);
+        unlockKeystore(password, userId);
         return token;
     }
 
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index 0925fa5..93ac51a 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -242,6 +242,7 @@
 
     private static final int VERSION_INIT = 1;
     private static final int VERSION_ADD_PRIMARY = 2;
+    private static final int VERSION_FIX_PRIMARY = 3;
 
     private static final String TAG_VOLUMES = "volumes";
     private static final String ATTR_VERSION = "version";
@@ -1187,8 +1188,17 @@
         mHandler.obtainMessage(H_SYSTEM_READY).sendToTarget();
     }
 
+    private String getDefaultPrimaryStorageUuid() {
+        if (SystemProperties.getBoolean(StorageManager.PROP_PRIMARY_PHYSICAL, false)) {
+            return StorageManager.UUID_PRIMARY_PHYSICAL;
+        } else {
+            return StorageManager.UUID_PRIVATE_INTERNAL;
+        }
+    }
+
     private void readSettingsLocked() {
         mRecords.clear();
+        mPrimaryStorageUuid = getDefaultPrimaryStorageUuid();
 
         FileInputStream fis = null;
         try {
@@ -1202,16 +1212,13 @@
                     final String tag = in.getName();
                     if (TAG_VOLUMES.equals(tag)) {
                         final int version = readIntAttribute(in, ATTR_VERSION, VERSION_INIT);
-                        if (version >= VERSION_ADD_PRIMARY) {
+                        final boolean primaryPhysical = SystemProperties.getBoolean(
+                                StorageManager.PROP_PRIMARY_PHYSICAL, false);
+                        final boolean validAttr = (version >= VERSION_FIX_PRIMARY)
+                                || (version >= VERSION_ADD_PRIMARY && !primaryPhysical);
+                        if (validAttr) {
                             mPrimaryStorageUuid = readStringAttribute(in,
                                     ATTR_PRIMARY_STORAGE_UUID);
-                        } else {
-                            if (SystemProperties.getBoolean(StorageManager.PROP_PRIMARY_PHYSICAL,
-                                    false)) {
-                                mPrimaryStorageUuid = StorageManager.UUID_PRIMARY_PHYSICAL;
-                            } else {
-                                mPrimaryStorageUuid = StorageManager.UUID_PRIVATE_INTERNAL;
-                            }
                         }
 
                     } else if (TAG_VOLUME.equals(tag)) {
@@ -1240,7 +1247,7 @@
             out.setOutput(fos, "utf-8");
             out.startDocument(null, true);
             out.startTag(null, TAG_VOLUMES);
-            writeIntAttribute(out, ATTR_VERSION, VERSION_ADD_PRIMARY);
+            writeIntAttribute(out, ATTR_VERSION, VERSION_FIX_PRIMARY);
             writeStringAttribute(out, ATTR_PRIMARY_STORAGE_UUID, mPrimaryStorageUuid);
             final int size = mRecords.size();
             for (int i = 0; i < size; i++) {
@@ -1482,7 +1489,7 @@
             // If this had been primary storage, revert back to internal and
             // reset vold so we bind into new volume into place.
             if (Objects.equals(mPrimaryStorageUuid, fsUuid)) {
-                mPrimaryStorageUuid = StorageManager.UUID_PRIVATE_INTERNAL;
+                mPrimaryStorageUuid = getDefaultPrimaryStorageUuid();
                 resetIfReadyAndConnected();
             }
 
@@ -1497,11 +1504,13 @@
                 final String fsUuid = mRecords.keyAt(i);
                 mCallbacks.notifyVolumeForgotten(fsUuid);
             }
-
             mRecords.clear();
-            writeSettingsLocked();
 
-            mPrimaryStorageUuid = StorageManager.UUID_PRIVATE_INTERNAL;
+            if (!Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, mPrimaryStorageUuid)) {
+                mPrimaryStorageUuid = getDefaultPrimaryStorageUuid();
+            }
+
+            writeSettingsLocked();
             resetIfReadyAndConnected();
         }
     }
@@ -1522,13 +1531,8 @@
         waitForReady();
 
         synchronized (mLock) {
-            final VolumeInfo from = Preconditions.checkNotNull(
-                    findStorageForUuid(mPrimaryStorageUuid));
-            final VolumeInfo to = Preconditions.checkNotNull(
-                    findStorageForUuid(volumeUuid));
-
-            if (Objects.equals(from, to)) {
-                throw new IllegalArgumentException("Primary storage already at " + from);
+            if (Objects.equals(mPrimaryStorageUuid, volumeUuid)) {
+                throw new IllegalArgumentException("Primary storage already at " + volumeUuid);
             }
 
             if (mMoveCallback != null) {
@@ -1537,10 +1541,26 @@
             mMoveCallback = callback;
             mMoveTargetUuid = volumeUuid;
 
-            try {
-                mConnector.execute("volume", "move_storage", from.id, to.id);
-            } catch (NativeDaemonConnectorException e) {
-                throw e.rethrowAsParcelableException();
+            // When moving to/from primary physical volume, we probably just nuked
+            // the current storage location, so we have nothing to move.
+            if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, mPrimaryStorageUuid)
+                    || Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, volumeUuid)) {
+                Slog.d(TAG, "Skipping move to/from primary physical");
+                onMoveStatusLocked(MOVE_STATUS_COPY_FINISHED);
+                onMoveStatusLocked(PackageManager.MOVE_SUCCEEDED);
+                resetIfReadyAndConnected();
+
+            } else {
+                final VolumeInfo from = Preconditions.checkNotNull(
+                        findStorageForUuid(mPrimaryStorageUuid));
+                final VolumeInfo to = Preconditions.checkNotNull(
+                        findStorageForUuid(volumeUuid));
+
+                try {
+                    mConnector.execute("volume", "move_storage", from.id, to.id);
+                } catch (NativeDaemonConnectorException e) {
+                    throw e.rethrowAsParcelableException();
+                }
             }
         }
     }
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 8c6e290..bc93268 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -678,7 +678,7 @@
             handleRemoveListLocked();
         }
         broadcastCallStateChanged(state, incomingNumber,
-                SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
     }
 
     public void notifyCallStateForSubscriber(int subId, int state, String incomingNumber) {
@@ -1374,6 +1374,12 @@
         mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
     }
 
+    /**
+     * Broadcasts an intent notifying apps of a phone state change. {@code subId} can be
+     * a valid subId, in which case this function fires a subId-specific intent, or it
+     * can be {@code SubscriptionManager.INVALID_SUBSCRIPTION_ID}, in which case we send
+     * a global state change broadcast ({@code TelephonyManager.ACTION_PHONE_STATE_CHANGED}).
+     */
     private void broadcastCallStateChanged(int state, String incomingNumber, int subId) {
         long ident = Binder.clearCallingIdentity();
         try {
@@ -1394,7 +1400,14 @@
         if (!TextUtils.isEmpty(incomingNumber)) {
             intent.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER, incomingNumber);
         }
-        intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
+
+        // If a valid subId was specified, we should fire off a subId-specific state
+        // change intent and include the subId.
+        if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+            intent.setAction(PhoneConstants.ACTION_SUBSCRIPTION_PHONE_STATE_CHANGED);
+            intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
+        }
+
         mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
                 android.Manifest.permission.READ_PHONE_STATE,
                 AppOpsManager.OP_READ_PHONE_STATE);
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 3dece49..fa4d204 100755
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -26,6 +26,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 import android.app.ActivityThread;
 import android.os.Build;
@@ -119,14 +120,13 @@
     // at the same time.
     final int mMaxStartingBackground;
 
-    final SparseArray<ServiceMap> mServiceMap = new SparseArray<ServiceMap>();
+    final SparseArray<ServiceMap> mServiceMap = new SparseArray<>();
 
     /**
      * All currently bound service connections.  Keys are the IBinder of
      * the client's IServiceConnection.
      */
-    final ArrayMap<IBinder, ArrayList<ConnectionRecord>> mServiceConnections
-            = new ArrayMap<IBinder, ArrayList<ConnectionRecord>>();
+    final ArrayMap<IBinder, ArrayList<ConnectionRecord>> mServiceConnections = new ArrayMap<>();
 
     /**
      * List of services that we have been asked to start,
@@ -134,20 +134,20 @@
      * while waiting for their corresponding application thread to get
      * going.
      */
-    final ArrayList<ServiceRecord> mPendingServices
-            = new ArrayList<ServiceRecord>();
+    final ArrayList<ServiceRecord> mPendingServices = new ArrayList<>();
 
     /**
      * List of services that are scheduled to restart following a crash.
      */
-    final ArrayList<ServiceRecord> mRestartingServices
-            = new ArrayList<ServiceRecord>();
+    final ArrayList<ServiceRecord> mRestartingServices = new ArrayList<>();
 
     /**
      * List of services that are in the process of being destroyed.
      */
-    final ArrayList<ServiceRecord> mDestroyingServices
-            = new ArrayList<ServiceRecord>();
+    final ArrayList<ServiceRecord> mDestroyingServices = new ArrayList<>();
+
+    /** Temporary list for holding the results of calls to {@link #collectPackageServicesLocked} */
+    private ArrayList<ServiceRecord> mTmpCollectionResults = null;
 
     /** Amount of time to allow a last ANR message to exist before freeing the memory. */
     static final int LAST_ANR_LIFETIME_DURATION_MSECS = 2 * 60 * 60 * 1000; // Two hours
@@ -162,10 +162,6 @@
         }
     };
 
-    static final class DelayingProcess extends ArrayList<ServiceRecord> {
-        long timeoout;
-    }
-
     /**
      * Information about services for a single user.
      */
@@ -2076,14 +2072,16 @@
         }
     }
 
-    private boolean collectForceStopServicesLocked(String name, int userId,
-            boolean evenPersistent, boolean doit,
-            ArrayMap<ComponentName, ServiceRecord> services,
-            ArrayList<ServiceRecord> result) {
+    private boolean collectPackageServicesLocked(String packageName, Set<String> filterByClasses,
+            boolean evenPersistent, boolean doit, ArrayMap<ComponentName, ServiceRecord> services) {
         boolean didSomething = false;
-        for (int i=0; i<services.size(); i++) {
+        for (int i = services.size() - 1; i >= 0; i--) {
             ServiceRecord service = services.valueAt(i);
-            if ((name == null || service.packageName.equals(name))
+            final boolean sameComponent = packageName == null
+                    || (service.packageName.equals(packageName)
+                        && (filterByClasses == null
+                            || filterByClasses.contains(service.name.getClassName())));
+            if (sameComponent
                     && (service.app == null || evenPersistent || !service.app.persistent)) {
                 if (!doit) {
                     return true;
@@ -2098,19 +2096,27 @@
                 }
                 service.app = null;
                 service.isolatedProc = null;
-                result.add(service);
+                if (mTmpCollectionResults == null) {
+                    mTmpCollectionResults = new ArrayList<>();
+                }
+                mTmpCollectionResults.add(service);
             }
         }
         return didSomething;
     }
 
-    boolean forceStopLocked(String name, int userId, boolean evenPersistent, boolean doit) {
+    boolean bringDownDisabledPackageServicesLocked(String packageName, Set<String> filterByClasses,
+            int userId, boolean evenPersistent, boolean doit) {
         boolean didSomething = false;
-        ArrayList<ServiceRecord> services = new ArrayList<ServiceRecord>();
+
+        if (mTmpCollectionResults != null) {
+            mTmpCollectionResults.clear();
+        }
+
         if (userId == UserHandle.USER_ALL) {
-            for (int i=0; i<mServiceMap.size(); i++) {
-                didSomething |= collectForceStopServicesLocked(name, userId, evenPersistent,
-                        doit, mServiceMap.valueAt(i).mServicesByName, services);
+            for (int i = mServiceMap.size() - 1; i >= 0; i--) {
+                didSomething |= collectPackageServicesLocked(packageName, filterByClasses,
+                        evenPersistent, doit, mServiceMap.valueAt(i).mServicesByName);
                 if (!doit && didSomething) {
                     return true;
                 }
@@ -2119,22 +2125,24 @@
             ServiceMap smap = mServiceMap.get(userId);
             if (smap != null) {
                 ArrayMap<ComponentName, ServiceRecord> items = smap.mServicesByName;
-                didSomething = collectForceStopServicesLocked(name, userId, evenPersistent,
-                        doit, items, services);
+                didSomething = collectPackageServicesLocked(packageName, filterByClasses,
+                        evenPersistent, doit, items);
             }
         }
 
-        int N = services.size();
-        for (int i=0; i<N; i++) {
-            bringDownServiceLocked(services.get(i));
+        if (mTmpCollectionResults != null) {
+            for (int i = mTmpCollectionResults.size() - 1; i >= 0; i--) {
+                bringDownServiceLocked(mTmpCollectionResults.get(i));
+            }
+            mTmpCollectionResults.clear();
         }
         return didSomething;
     }
 
     void cleanUpRemovedTaskLocked(TaskRecord tr, ComponentName component, Intent baseIntent) {
-        ArrayList<ServiceRecord> services = new ArrayList<ServiceRecord>();
+        ArrayList<ServiceRecord> services = new ArrayList<>();
         ArrayMap<ComponentName, ServiceRecord> alls = getServices(tr.userId);
-        for (int i=0; i<alls.size(); i++) {
+        for (int i = alls.size() - 1; i >= 0; i--) {
             ServiceRecord sr = alls.valueAt(i);
             if (sr.packageName.equals(component.getPackageName())) {
                 services.add(sr);
@@ -2142,7 +2150,7 @@
         }
 
         // Take care of any running services associated with the app.
-        for (int i=0; i<services.size(); i++) {
+        for (int i = services.size() - 1; i >= 0; i--) {
             ServiceRecord sr = services.get(i);
             if (sr.startRequested) {
                 if ((sr.serviceInfo.flags&ServiceInfo.FLAG_STOP_WITH_TASK) != 0) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index ddcfb15..76ee3bc 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -47,6 +47,7 @@
 import android.app.usage.UsageEvents;
 import android.app.usage.UsageStatsManagerInternal;
 import android.appwidget.AppWidgetManager;
+import android.content.pm.PermissionInfo;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Point;
@@ -374,6 +375,10 @@
     // Delay in notifying task stack change listeners (in millis)
     static final int NOTIFY_TASK_STACK_CHANGE_LISTENERS_DELAY = 1000;
 
+    // Necessary ApplicationInfo flags to mark an app as persistent
+    private static final int PERSISTENT_MASK =
+            ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT;
+
     /** All system services */
     SystemServiceManager mSystemServiceManager;
 
@@ -413,6 +418,11 @@
     ActivityRecord mFocusedActivity = null;
 
     /**
+     * User id of the last activity mFocusedActivity was set to.
+     */
+    private int mLastFocusedUserId;
+
+    /**
      * List of intents that were used to start the most recent tasks.
      */
     private final RecentTasks mRecentTasks;
@@ -2560,19 +2570,32 @@
                 mWindowManager.setFocusedApp(r.appToken, true);
             }
             applyUpdateLockStateLocked(r);
-            if (last != null && last.userId != mFocusedActivity.userId) {
+            if (mFocusedActivity.userId != mLastFocusedUserId) {
                 mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG);
                 mHandler.sendMessage(mHandler.obtainMessage(FOREGROUND_PROFILE_CHANGED_MSG,
                                 mFocusedActivity.userId, 0));
+                mLastFocusedUserId = mFocusedActivity.userId;
             }
         }
-        EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY, mCurrentUserId,
+        EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY,
+                mFocusedActivity == null ? -1 : mFocusedActivity.userId,
                 mFocusedActivity == null ? "NULL" : mFocusedActivity.shortComponentName);
     }
 
     final void clearFocusedActivity(ActivityRecord r) {
         if (mFocusedActivity == r) {
+            ActivityStack stack = mStackSupervisor.getFocusedStack();
+            if (stack != null) {
+                ActivityRecord top = stack.topActivity();
+                if (top != null && top.userId != mLastFocusedUserId) {
+                    mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG);
+                    mHandler.sendMessage(mHandler.obtainMessage(FOREGROUND_PROFILE_CHANGED_MSG,
+                                    top.userId, 0));
+                    mLastFocusedUserId = top.userId;
+                }
+            }
             mFocusedActivity = null;
+            EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY, -1, "NULL");
         }
     }
 
@@ -3185,6 +3208,10 @@
                     debugFlags |= Zygote.DEBUG_ENABLE_JIT;
                 }
             }
+            String genCFIDebugProperty = SystemProperties.get("debug.gencfi");
+            if ("true".equals(genCFIDebugProperty)) {
+                debugFlags |= Zygote.DEBUG_GENERATE_CFI;
+            }
             if ("1".equals(SystemProperties.get("debug.jni.logging"))) {
                 debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING;
             }
@@ -5340,39 +5367,117 @@
         return N > 0;
     }
 
-    private final boolean forceStopPackageLocked(String name, int appId,
+    private void cleanupDisabledPackageComponentsLocked(
+            String packageName, int userId, String[] changedClasses) {
+
+        Set<String> disabledClasses = null;
+        boolean packageDisabled = false;
+        IPackageManager pm = AppGlobals.getPackageManager();
+
+        if (changedClasses == null) {
+            // Nothing changed...
+            return;
+        }
+
+        // Determine enable/disable state of the package and its components.
+        int enabled = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+        for (int i = changedClasses.length - 1; i >= 0; i--) {
+            final String changedClass = changedClasses[i];
+
+            if (changedClass.equals(packageName)) {
+                try {
+                    // Entire package setting changed
+                    enabled = pm.getApplicationEnabledSetting(packageName,
+                            (userId != UserHandle.USER_ALL) ? userId : UserHandle.USER_OWNER);
+                } catch (RemoteException e) {
+                    // Can't happen...
+                }
+                packageDisabled = enabled != PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                        && enabled != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+                if (packageDisabled) {
+                    // Entire package is disabled.
+                    // No need to continue to check component states.
+                    disabledClasses = null;
+                    break;
+                }
+            } else {
+                try {
+                    enabled = pm.getComponentEnabledSetting(
+                            new ComponentName(packageName, changedClass),
+                            (userId != UserHandle.USER_ALL) ? userId : UserHandle.USER_OWNER);
+                } catch (RemoteException e) {
+                    // Can't happen...
+                }
+                if (enabled != PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                        && enabled != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
+                    if (disabledClasses == null) {
+                        disabledClasses = new ArraySet<>(changedClasses.length);
+                    }
+                    disabledClasses.add(changedClass);
+                }
+            }
+        }
+
+        if (!packageDisabled && disabledClasses == null) {
+            // Nothing to do here...
+            return;
+        }
+
+        // Clean-up disabled activities.
+        if (mStackSupervisor.finishDisabledPackageActivitiesLocked(
+                packageName, disabledClasses, true, false, userId) && mBooted) {
+            mStackSupervisor.resumeTopActivitiesLocked();
+            mStackSupervisor.scheduleIdleLocked();
+        }
+
+        // Clean-up disabled tasks
+        cleanupDisabledPackageTasksLocked(packageName, disabledClasses, userId);
+
+        // Clean-up disabled services.
+        mServices.bringDownDisabledPackageServicesLocked(
+                packageName, disabledClasses, userId, false, true);
+
+        // Clean-up disabled providers.
+        ArrayList<ContentProviderRecord> providers = new ArrayList<>();
+        mProviderMap.collectPackageProvidersLocked(
+                packageName, disabledClasses, true, false, userId, providers);
+        for (int i = providers.size() - 1; i >= 0; i--) {
+            removeDyingProviderLocked(null, providers.get(i), true);
+        }
+    }
+
+    private final boolean forceStopPackageLocked(String packageName, int appId,
             boolean callerWillRestart, boolean purgeCache, boolean doit,
             boolean evenPersistent, boolean uninstalling, int userId, String reason) {
         int i;
-        int N;
 
-        if (userId == UserHandle.USER_ALL && name == null) {
+        if (userId == UserHandle.USER_ALL && packageName == null) {
             Slog.w(TAG, "Can't force stop all processes of all users, that is insane!");
         }
 
-        if (appId < 0 && name != null) {
+        if (appId < 0 && packageName != null) {
             try {
                 appId = UserHandle.getAppId(
-                        AppGlobals.getPackageManager().getPackageUid(name, 0));
+                        AppGlobals.getPackageManager().getPackageUid(packageName, 0));
             } catch (RemoteException e) {
             }
         }
 
         if (doit) {
-            if (name != null) {
-                Slog.i(TAG, "Force stopping " + name + " appid=" + appId
+            if (packageName != null) {
+                Slog.i(TAG, "Force stopping " + packageName + " appid=" + appId
                         + " user=" + userId + ": " + reason);
             } else {
                 Slog.i(TAG, "Force stopping u" + userId + ": " + reason);
             }
 
             final ArrayMap<String, SparseArray<Long>> pmap = mProcessCrashTimes.getMap();
-            for (int ip=pmap.size()-1; ip>=0; ip--) {
+            for (int ip = pmap.size() - 1; ip >= 0; ip--) {
                 SparseArray<Long> ba = pmap.valueAt(ip);
-                for (i=ba.size()-1; i>=0; i--) {
+                for (i = ba.size() - 1; i >= 0; i--) {
                     boolean remove = false;
                     final int entUid = ba.keyAt(i);
-                    if (name != null) {
+                    if (packageName != null) {
                         if (userId == UserHandle.USER_ALL) {
                             if (UserHandle.getAppId(entUid) == appId) {
                                 remove = true;
@@ -5395,46 +5500,47 @@
             }
         }
 
-        boolean didSomething = killPackageProcessesLocked(name, appId, userId,
+        boolean didSomething = killPackageProcessesLocked(packageName, appId, userId,
                 -100, callerWillRestart, true, doit, evenPersistent,
-                name == null ? ("stop user " + userId) : ("stop " + name));
+                packageName == null ? ("stop user " + userId) : ("stop " + packageName));
 
-        if (mStackSupervisor.forceStopPackageLocked(name, doit, evenPersistent, userId)) {
+        if (mStackSupervisor.finishDisabledPackageActivitiesLocked(
+                packageName, null, doit, evenPersistent, userId)) {
             if (!doit) {
                 return true;
             }
             didSomething = true;
         }
 
-        if (mServices.forceStopLocked(name, userId, evenPersistent, doit)) {
+        if (mServices.bringDownDisabledPackageServicesLocked(
+                packageName, null, userId, evenPersistent, doit)) {
             if (!doit) {
                 return true;
             }
             didSomething = true;
         }
 
-        if (name == null) {
+        if (packageName == null) {
             // Remove all sticky broadcasts from this user.
             mStickyBroadcasts.remove(userId);
         }
 
-        ArrayList<ContentProviderRecord> providers = new ArrayList<ContentProviderRecord>();
-        if (mProviderMap.collectForceStopProviders(name, appId, doit, evenPersistent,
+        ArrayList<ContentProviderRecord> providers = new ArrayList<>();
+        if (mProviderMap.collectPackageProvidersLocked(packageName, null, doit, evenPersistent,
                 userId, providers)) {
             if (!doit) {
                 return true;
             }
             didSomething = true;
         }
-        N = providers.size();
-        for (i=0; i<N; i++) {
+        for (i = providers.size() - 1; i >= 0; i--) {
             removeDyingProviderLocked(null, providers.get(i), true);
         }
 
         // Remove transient permissions granted from/to this package/user
-        removeUriPermissionsForPackageLocked(name, userId, false);
+        removeUriPermissionsForPackageLocked(packageName, userId, false);
 
-        if (name == null || uninstalling) {
+        if (packageName == null || uninstalling) {
             // Remove pending intents.  For now we only do this when force
             // stopping users, because we have some problems when doing this
             // for packages -- app widgets are not currently cleaned up for
@@ -5453,7 +5559,7 @@
                         it.remove();
                         continue;
                     }
-                    if (name == null) {
+                    if (packageName == null) {
                         // Stopping user, remove all objects for the user.
                         if (pir.key.userId != userId) {
                             // Not the same user, skip it.
@@ -5468,7 +5574,7 @@
                             // Different user, skip it.
                             continue;
                         }
-                        if (!pir.key.packageName.equals(name)) {
+                        if (!pir.key.packageName.equals(packageName)) {
                             // Different package, skip it.
                             continue;
                         }
@@ -5487,10 +5593,10 @@
         }
 
         if (doit) {
-            if (purgeCache && name != null) {
+            if (purgeCache && packageName != null) {
                 AttributeCache ac = AttributeCache.instance();
                 if (ac != null) {
-                    ac.removePackage(name);
+                    ac.removePackage(packageName);
                 }
             }
             if (mBooted) {
@@ -6615,6 +6721,18 @@
             return mActivityManagerService.mContext.getPackageManager()
                     .getPackagesForUid(uid);
         }
+
+        @Override
+        public boolean isRuntimePermission(String permission) {
+            try {
+                PermissionInfo info = mActivityManagerService.mContext.getPackageManager()
+                        .getPermissionInfo(permission, 0);
+                return info.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS;
+            } catch (NameNotFoundException nnfe) {
+                Slog.e(TAG, "No such permission: "+ permission, nnfe);
+            }
+            return false;
+        }
     }
 
     class IntentFirewallInterface implements IntentFirewall.AMSInterface {
@@ -8296,29 +8414,20 @@
         }
     }
 
-    private void removeTasksByRemovedPackageComponentsLocked(String packageName, int userId) {
-        final IPackageManager pm = AppGlobals.getPackageManager();
-        final HashSet<ComponentName> componentsKnownToExist = new HashSet<ComponentName>();
+    private void cleanupDisabledPackageTasksLocked(String packageName, Set<String> filterByClasses,
+            int userId) {
 
         for (int i = mRecentTasks.size() - 1; i >= 0; i--) {
             TaskRecord tr = mRecentTasks.get(i);
-            if (tr.userId != userId) continue;
+            if (userId != UserHandle.USER_ALL && tr.userId != userId) {
+                continue;
+            }
 
             ComponentName cn = tr.intent.getComponent();
-            if (cn != null && cn.getPackageName().equals(packageName)) {
-                // Skip if component still exists in the package.
-                if (componentsKnownToExist.contains(cn)) continue;
-
-                try {
-                    ActivityInfo info = pm.getActivityInfo(cn, 0, userId);
-                    if (info != null) {
-                        componentsKnownToExist.add(cn);
-                    } else {
-                        removeTaskByIdLocked(tr.taskId, false);
-                    }
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Activity info query failed. component=" + cn, e);
-                }
+            final boolean sameComponent = cn != null && cn.getPackageName().equals(packageName)
+                    && (filterByClasses == null || filterByClasses.contains(cn.getClassName()));
+            if (sameComponent) {
+                removeTaskByIdLocked(tr.taskId, false);
             }
         }
     }
@@ -9738,10 +9847,10 @@
         String proc = customProcess != null ? customProcess : info.processName;
         BatteryStatsImpl.Uid.Proc ps = null;
         BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();
+        final int userId = UserHandle.getUserId(info.uid);
         int uid = info.uid;
         if (isolated) {
             if (isolatedUid == 0) {
-                int userId = UserHandle.getUserId(uid);
                 int stepsLeft = Process.LAST_ISOLATED_UID - Process.FIRST_ISOLATED_UID + 1;
                 while (true) {
                     if (mNextIsolatedProcessUid < Process.FIRST_ISOLATED_UID
@@ -9765,7 +9874,13 @@
                 uid = isolatedUid;
             }
         }
-        return new ProcessRecord(stats, info, proc, uid);
+        final ProcessRecord r = new ProcessRecord(stats, info, proc, uid);
+        if (!mBooted && !mBooting
+                && userId == UserHandle.USER_OWNER
+                && (info.flags & PERSISTENT_MASK) == PERSISTENT_MASK) {
+            r.persistent = true;
+        }
+        return r;
     }
 
     final ProcessRecord addAppLocked(ApplicationInfo info, boolean isolated,
@@ -9797,8 +9912,7 @@
                     + info.packageName + ": " + e);
         }
 
-        if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))
-                == (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {
+        if ((info.flags & PERSISTENT_MASK) == PERSISTENT_MASK) {
             app.persistent = true;
             app.maxAdj = ProcessList.PERSISTENT_PROC_ADJ;
         }
@@ -10737,9 +10851,7 @@
 
     @Override
     public void killUid(int uid, String reason) {
-        if (Binder.getCallingUid() != Process.SYSTEM_UID) {
-            throw new SecurityException("killUid only available to the system");
-        }
+        enforceCallingPermission(Manifest.permission.KILL_UID, "killUid");
         synchronized (this) {
             killPackageProcessesLocked(null, UserHandle.getAppId(uid), UserHandle.getUserId(uid),
                     ProcessList.FOREGROUND_APP_ADJ-1, false, true, true, false,
@@ -14088,6 +14200,7 @@
         boolean dumpDetails = false;
         boolean dumpFullDetails = false;
         boolean dumpDalvik = false;
+        boolean dumpSummaryOnly = false;
         boolean oomOnly = false;
         boolean isCompact = false;
         boolean localOnly = false;
@@ -14108,6 +14221,9 @@
                 dumpDalvik = true;
             } else if ("-c".equals(opt)) {
                 isCompact = true;
+            } else if ("-s".equals(opt)) {
+                dumpDetails = true;
+                dumpSummaryOnly = true;
             } else if ("--oom".equals(opt)) {
                 oomOnly = true;
             } else if ("--local".equals(opt)) {
@@ -14115,10 +14231,11 @@
             } else if ("--package".equals(opt)) {
                 packages = true;
             } else if ("-h".equals(opt)) {
-                pw.println("meminfo dump options: [-a] [-d] [-c] [--oom] [process]");
+                pw.println("meminfo dump options: [-a] [-d] [-c] [-s] [--oom] [process]");
                 pw.println("  -a: include all available information for each process.");
                 pw.println("  -d: include dalvik details.");
                 pw.println("  -c: dump in a compact machine-parseable representation.");
+                pw.println("  -s: dump only summary of application memory usage.");
                 pw.println("  --oom: only show processes organized by oom adj.");
                 pw.println("  --local: only collect details locally, don't call process.");
                 pw.println("  --package: interpret process arg as package, dumping all");
@@ -14179,7 +14296,7 @@
                             mi.dalvikPrivateDirty = (int)tmpLong[0];
                         }
                         ActivityThread.dumpMemInfoTable(pw, mi, isCheckinRequest, dumpFullDetails,
-                                dumpDalvik, pid, r.baseName, 0, 0, 0, 0, 0, 0);
+                                dumpDalvik, dumpSummaryOnly, pid, r.baseName, 0, 0, 0, 0, 0, 0);
                         if (isCheckinRequest) {
                             pw.println();
                         }
@@ -14245,7 +14362,7 @@
                 if (dumpDetails) {
                     if (localOnly) {
                         ActivityThread.dumpMemInfoTable(pw, mi, isCheckinRequest, dumpFullDetails,
-                                dumpDalvik, pid, r.processName, 0, 0, 0, 0, 0, 0);
+                                dumpDalvik, dumpSummaryOnly, pid, r.processName, 0, 0, 0, 0, 0, 0);
                         if (isCheckinRequest) {
                             pw.println();
                         }
@@ -14253,7 +14370,7 @@
                         try {
                             pw.flush();
                             thread.dumpMemInfo(fd, mi, isCheckinRequest, dumpFullDetails,
-                                    dumpDalvik, innerArgs);
+                                    dumpDalvik, dumpSummaryOnly, innerArgs);
                         } catch (RemoteException e) {
                             if (!isCheckinRequest) {
                                 pw.println("Got RemoteException!");
@@ -16038,7 +16155,9 @@
                                         mBatteryStatsService.notePackageUninstalled(ssp);
                                     }
                                 } else {
-                                    removeTasksByRemovedPackageComponentsLocked(ssp, userId);
+                                    cleanupDisabledPackageComponentsLocked(ssp, userId,
+                                            intent.getStringArrayExtra(
+                                                    Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST));
                                     if (userId == UserHandle.USER_OWNER) {
                                         mTaskPersister.addOtherDeviceTasksToRecentsLocked(ssp);
                                     }
@@ -16056,9 +16175,6 @@
                                 intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
                         mCompatModePackages.handlePackageAddedLocked(ssp, replacing);
 
-                        if (replacing) {
-                            removeTasksByRemovedPackageComponentsLocked(ssp, userId);
-                        }
                         if (userId == UserHandle.USER_OWNER) {
                             mTaskPersister.addOtherDeviceTasksToRecentsLocked(ssp);
                         }
@@ -19835,6 +19951,14 @@
                 return token;
             }
         }
+
+        @Override
+        public ComponentName getHomeActivityForUser(int userId) {
+            synchronized (ActivityManagerService.this) {
+                ActivityRecord homeActivity = mStackSupervisor.getHomeActivityForUser(userId);
+                return homeActivity == null ? null : homeActivity.realActivity;
+            }
+        }
     }
 
     private final class SleepTokenImpl extends SleepToken {
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 62d70d2..a86df2d 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -81,6 +81,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * State and management of a single stack of activities.
@@ -4000,7 +4001,8 @@
         }
     }
 
-    boolean forceStopPackageLocked(String name, boolean doit, boolean evenPersistent, int userId) {
+    boolean finishDisabledPackageActivitiesLocked(String packageName, Set<String> filterByClasses,
+            boolean doit, boolean evenPersistent, int userId) {
         boolean didSomething = false;
         TaskRecord lastTask = null;
         ComponentName homeActivity = null;
@@ -4009,10 +4011,12 @@
             int numActivities = activities.size();
             for (int activityNdx = 0; activityNdx < numActivities; ++activityNdx) {
                 ActivityRecord r = activities.get(activityNdx);
-                final boolean samePackage = r.packageName.equals(name)
-                        || (name == null && r.userId == userId);
+                final boolean sameComponent =
+                        (r.packageName.equals(packageName) && (filterByClasses == null
+                                || filterByClasses.contains(r.realActivity.getClassName())))
+                        || (packageName == null && r.userId == userId);
                 if ((userId == UserHandle.USER_ALL || r.userId == userId)
-                        && (samePackage || r.task == lastTask)
+                        && (sameComponent || r.task == lastTask)
                         && (r.app == null || evenPersistent || !r.app.persistent)) {
                     if (!doit) {
                         if (r.finishing) {
@@ -4032,7 +4036,7 @@
                     }
                     didSomething = true;
                     Slog.i(TAG, "  Force finishing activity " + r);
-                    if (samePackage) {
+                    if (sameComponent) {
                         if (r.app != null) {
                             r.app.removed = true;
                         }
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 8c98f9f..cb5ba8e 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -118,6 +118,7 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 public final class ActivityStackSupervisor implements DisplayListener {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStackSupervisor" : TAG_AM;
@@ -2507,14 +2508,16 @@
     /**
      * @return true if some activity was finished (or would have finished if doit were true).
      */
-    boolean forceStopPackageLocked(String name, boolean doit, boolean evenPersistent, int userId) {
+    boolean finishDisabledPackageActivitiesLocked(String packageName, Set<String> filterByClasses,
+            boolean doit, boolean evenPersistent, int userId) {
         boolean didSomething = false;
         for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
             final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
             final int numStacks = stacks.size();
             for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) {
                 final ActivityStack stack = stacks.get(stackNdx);
-                if (stack.forceStopPackageLocked(name, doit, evenPersistent, userId)) {
+                if (stack.finishDisabledPackageActivitiesLocked(
+                        packageName, filterByClasses, doit, evenPersistent, userId)) {
                     didSomething = true;
                 }
             }
@@ -2653,6 +2656,10 @@
     }
 
     ActivityRecord getHomeActivity() {
+        return getHomeActivityForUser(UserHandle.USER_ALL);
+    }
+
+    ActivityRecord getHomeActivityForUser(int userId) {
         final ArrayList<TaskRecord> tasks = mHomeStack.getAllTasks();
         for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) {
             final TaskRecord task = tasks.get(taskNdx);
@@ -2660,7 +2667,8 @@
                 final ArrayList<ActivityRecord> activities = task.mActivities;
                 for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
                     final ActivityRecord r = activities.get(activityNdx);
-                    if (r.isHomeActivity()) {
+                    if (r.isHomeActivity()
+                            && ((userId == UserHandle.USER_ALL) || (r.userId == userId))) {
                         return r;
                     }
                 }
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index e5c5dff..e89ef57 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -85,7 +85,7 @@
      * a bunch of processes to execute IntentReceiver components.  Background-
      * and foreground-priority broadcasts are queued separately.
      */
-    final ArrayList<BroadcastRecord> mParallelBroadcasts = new ArrayList<BroadcastRecord>();
+    final ArrayList<BroadcastRecord> mParallelBroadcasts = new ArrayList<>();
 
     /**
      * List of all active broadcasts that are to be executed one at a time.
@@ -94,7 +94,7 @@
      * broadcasts, separate background- and foreground-priority queues are
      * maintained.
      */
-    final ArrayList<BroadcastRecord> mOrderedBroadcasts = new ArrayList<BroadcastRecord>();
+    final ArrayList<BroadcastRecord> mOrderedBroadcasts = new ArrayList<>();
 
     /**
      * Historical data of past broadcasts, for debugging.  This is a ring buffer
diff --git a/services/core/java/com/android/server/am/ProviderMap.java b/services/core/java/com/android/server/am/ProviderMap.java
index 7da8c48..a1dc3e3 100644
--- a/services/core/java/com/android/server/am/ProviderMap.java
+++ b/services/core/java/com/android/server/am/ProviderMap.java
@@ -31,6 +31,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Keeps track of content providers by authority (name) and class. It separates the mapping by
@@ -184,13 +185,17 @@
         }
     }
 
-    private boolean collectForceStopProvidersLocked(String name, int appId,
-            boolean doit, boolean evenPersistent, int userId,
+    private boolean collectPackageProvidersLocked(String packageName,
+            Set<String> filterByClasses, boolean doit, boolean evenPersistent,
             HashMap<ComponentName, ContentProviderRecord> providers,
             ArrayList<ContentProviderRecord> result) {
         boolean didSomething = false;
         for (ContentProviderRecord provider : providers.values()) {
-            if ((name == null || provider.info.packageName.equals(name))
+            final boolean sameComponent = packageName == null
+                    || (provider.info.packageName.equals(packageName)
+                        && (filterByClasses == null
+                            || filterByClasses.contains(provider.name.getClassName())));
+            if (sameComponent
                     && (provider.proc == null || evenPersistent || !provider.proc.persistent)) {
                 if (!doit) {
                     return true;
@@ -202,18 +207,18 @@
         return didSomething;
     }
 
-    boolean collectForceStopProviders(String name, int appId,
+    boolean collectPackageProvidersLocked(String packageName, Set<String> filterByClasses,
             boolean doit, boolean evenPersistent, int userId,
             ArrayList<ContentProviderRecord> result) {
-        boolean didSomething = collectForceStopProvidersLocked(name, appId, doit,
-                evenPersistent, userId, mSingletonByClass, result);
+        boolean didSomething = collectPackageProvidersLocked(packageName, filterByClasses,
+                doit, evenPersistent, mSingletonByClass, result);
         if (!doit && didSomething) {
             return true;
         }
         if (userId == UserHandle.USER_ALL) {
-            for (int i=0; i<mProvidersByClassPerUser.size(); i++) {
-                if (collectForceStopProvidersLocked(name, appId, doit, evenPersistent,
-                        userId, mProvidersByClassPerUser.valueAt(i), result)) {
+            for (int i = 0; i < mProvidersByClassPerUser.size(); i++) {
+                if (collectPackageProvidersLocked(packageName, filterByClasses,
+                        doit, evenPersistent, mProvidersByClassPerUser.valueAt(i), result)) {
                     if (!doit) {
                         return true;
                     }
@@ -224,8 +229,8 @@
             HashMap<ComponentName, ContentProviderRecord> items
                     = getProvidersByClass(userId);
             if (items != null) {
-                didSomething |= collectForceStopProvidersLocked(name, appId, doit,
-                        evenPersistent, userId, items, result);
+                didSomething |= collectPackageProvidersLocked(packageName, filterByClasses,
+                        doit, evenPersistent, items, result);
             }
         }
         return didSomething;
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index eb28ed0..2149b7a 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -20,9 +20,13 @@
 import static android.media.AudioManager.RINGER_MODE_NORMAL;
 import static android.media.AudioManager.RINGER_MODE_SILENT;
 import static android.media.AudioManager.RINGER_MODE_VIBRATE;
+import static android.os.Process.FIRST_APPLICATION_UID;
 
+import android.Manifest;
 import android.app.ActivityManager;
+import android.app.ActivityManagerInternal;
 import android.app.ActivityManagerNative;
+import android.app.AppGlobals;
 import android.app.AppOpsManager;
 import android.app.KeyguardManager;
 import android.bluetooth.BluetoothA2dp;
@@ -37,7 +41,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.UserInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
@@ -65,6 +72,7 @@
 import android.media.VolumePolicy;
 import android.media.MediaPlayer.OnCompletionListener;
 import android.media.MediaPlayer.OnErrorListener;
+import android.media.audiopolicy.AudioMix;
 import android.media.audiopolicy.AudioPolicy;
 import android.media.audiopolicy.AudioPolicyConfig;
 import android.media.audiopolicy.IAudioPolicyCallback;
@@ -81,11 +89,13 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.os.Vibrator;
 import android.provider.Settings;
 import android.provider.Settings.System;
 import android.telecom.TelecomManager;
 import android.text.TextUtils;
+import android.util.AndroidRuntimeException;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
@@ -101,6 +111,7 @@
 import com.android.internal.util.XmlUtils;
 import com.android.server.EventLogTags;
 import com.android.server.LocalServices;
+import com.android.server.pm.UserManagerService;
 
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -206,6 +217,7 @@
     private static final int MSG_PERSIST_MUSIC_ACTIVE_MS = 22;
     private static final int MSG_PERSIST_MICROPHONE_MUTE = 23;
     private static final int MSG_UNMUTE_STREAM = 24;
+    private static final int MSG_DYN_POLICY_MIX_STATE_UPDATE = 25;
     // start of messages handled under wakelock
     //   these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(),
     //   and not with sendMsg(..., ..., SENDMSG_QUEUE, ...)
@@ -643,6 +655,8 @@
         intentFilter.addAction(Intent.ACTION_SCREEN_ON);
         intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
         intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
+        intentFilter.addAction(Intent.ACTION_USER_BACKGROUND);
+        intentFilter.addAction(Intent.ACTION_USER_FOREGROUND);
         intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
 
         intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
@@ -666,7 +680,7 @@
             setRotationForAudioSystem();
         }
 
-        context.registerReceiver(mReceiver, intentFilter);
+        context.registerReceiverAsUser(mReceiver, UserHandle.ALL, intentFilter, null, null);
 
         LocalServices.addService(AudioManagerInternal.class, new AudioServiceInternal());
     }
@@ -4337,6 +4351,9 @@
                 case MSG_UNMUTE_STREAM:
                     onUnmuteStream(msg.arg1, msg.arg2);
                     break;
+                case MSG_DYN_POLICY_MIX_STATE_UPDATE:
+                    onDynPolicyMixStateUpdate((String) msg.obj, msg.arg1);
+                    break;
             }
         }
     }
@@ -4970,10 +4987,62 @@
                         0,
                         0,
                         mStreamStates[AudioSystem.STREAM_MUSIC], 0);
+            } else if (action.equals(Intent.ACTION_USER_BACKGROUND)) {
+                // Disable audio recording for the background user/profile
+                int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+                if (userId >= 0) {
+                    // TODO Kill recording streams instead of killing processes holding permission
+                    UserInfo userInfo = UserManagerService.getInstance().getUserInfo(userId);
+                    killBackgroundUserProcessesWithRecordAudioPermission(userInfo);
+                }
+                UserManagerService.getInstance().setSystemControlledUserRestriction(
+                        UserManager.DISALLOW_RECORD_AUDIO, true, userId);
+            } else if (action.equals(Intent.ACTION_USER_FOREGROUND)) {
+                // Enable audio recording for foreground user/profile
+                int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+                UserManagerService.getInstance().setSystemControlledUserRestriction(
+                        UserManager.DISALLOW_RECORD_AUDIO, false, userId);
             }
         }
     } // end class AudioServiceBroadcastReceiver
 
+    private void killBackgroundUserProcessesWithRecordAudioPermission(UserInfo oldUser) {
+        PackageManager pm = mContext.getPackageManager();
+        // Find the home activity of the user. It should not be killed to avoid expensive restart,
+        // when the user switches back. For managed profiles, we should kill all recording apps
+        ComponentName homeActivityName = null;
+        if (!oldUser.isManagedProfile()) {
+            homeActivityName = LocalServices.getService(ActivityManagerInternal.class)
+                    .getHomeActivityForUser(oldUser.id);
+        }
+        final String[] permissions = { Manifest.permission.RECORD_AUDIO };
+        List<PackageInfo> packages;
+        try {
+            packages = AppGlobals.getPackageManager()
+                    .getPackagesHoldingPermissions(permissions, 0, oldUser.id).getList();
+        } catch (RemoteException e) {
+            throw new AndroidRuntimeException(e);
+        }
+        for (int j = packages.size() - 1; j >= 0; j--) {
+            PackageInfo pkg = packages.get(j);
+            // Skip system processes
+            if (UserHandle.getAppId(pkg.applicationInfo.uid) < FIRST_APPLICATION_UID) {
+                continue;
+            }
+            if (homeActivityName != null
+                    && pkg.packageName.equals(homeActivityName.getPackageName())
+                    && pkg.applicationInfo.isSystemApp()) {
+                continue;
+            }
+            try {
+                ActivityManagerNative.getDefault().killUid(pkg.applicationInfo.uid,
+                        "killBackgroundUserProcessesWithAudioRecordPermission");
+            } catch (RemoteException e) {
+                Log.w(TAG, "Error calling killUid", e);
+            }
+        }
+    }
+
     //==========================================================================================
     // RemoteControlDisplay / RemoteControlClient / Remote info
     //==========================================================================================
@@ -5758,6 +5827,8 @@
     //==========================================================================================
     public String registerAudioPolicy(AudioPolicyConfig policyConfig, IAudioPolicyCallback pcb,
             boolean hasFocusListener) {
+        AudioSystem.setDynamicPolicyCallback(mDynPolicyCallback);
+
         if (DEBUG_AP) Log.d(TAG, "registerAudioPolicy for " + pcb.asBinder()
                 + " with config:" + policyConfig);
         String regId = null;
@@ -5853,6 +5924,39 @@
     }
 
     //======================
+    // Audio policy callback from AudioSystem
+    //======================
+    private final AudioSystem.DynamicPolicyCallback mDynPolicyCallback =
+            new AudioSystem.DynamicPolicyCallback() {
+        public void onDynamicPolicyMixStateUpdate(String regId, int state) {
+            if (!TextUtils.isEmpty(regId)) {
+                sendMsg(mAudioHandler, MSG_DYN_POLICY_MIX_STATE_UPDATE, SENDMSG_QUEUE,
+                        state /*arg1*/, 0 /*arg2 ignored*/, regId /*obj*/, 0 /*delay*/);
+            }
+        }
+    };
+
+    private void onDynPolicyMixStateUpdate(String regId, int state) {
+        if (DEBUG_AP) Log.d(TAG, "onDynamicPolicyMixStateUpdate("+ regId + ", " + state +")");
+        synchronized (mAudioPolicies) {
+            for (AudioPolicyProxy policy : mAudioPolicies.values()) {
+                for (AudioMix mix : policy.getMixes()) {
+                    if (mix.getRegistration().equals(regId)) {
+                        try {
+                            policy.mPolicyCallback.notifyMixStateUpdate(regId, state);
+                        } catch (RemoteException e) {
+                            Log.e(TAG, "Can't call notifyMixStateUpdate() on IAudioPolicyCallback "
+                                    + policy.mPolicyCallback.asBinder(), e);
+                        }
+                        return;
+                    }
+                }
+            }
+        }
+
+    }
+
+    //======================
     // Audio policy proxy
     //======================
     /**
@@ -5861,8 +5965,7 @@
      */
     public class AudioPolicyProxy extends AudioPolicyConfig implements IBinder.DeathRecipient {
         private static final String TAG = "AudioPolicyProxy";
-        AudioPolicyConfig mConfig;
-        IAudioPolicyCallback mPolicyToken;
+        IAudioPolicyCallback mPolicyCallback;
         boolean mHasFocusListener;
         /**
          * Audio focus ducking behavior for an audio policy.
@@ -5877,19 +5980,19 @@
                 boolean hasFocusListener) {
             super(config);
             setRegistration(new String(config.hashCode() + ":ap:" + mAudioPolicyCounter++));
-            mPolicyToken = token;
+            mPolicyCallback = token;
             mHasFocusListener = hasFocusListener;
             if (mHasFocusListener) {
-                mMediaFocusControl.addFocusFollower(mPolicyToken);
+                mMediaFocusControl.addFocusFollower(mPolicyCallback);
             }
             connectMixes();
         }
 
         public void binderDied() {
             synchronized (mAudioPolicies) {
-                Log.i(TAG, "audio policy " + mPolicyToken + " died");
+                Log.i(TAG, "audio policy " + mPolicyCallback + " died");
                 release();
-                mAudioPolicies.remove(mPolicyToken.asBinder());
+                mAudioPolicies.remove(mPolicyCallback.asBinder());
             }
         }
 
@@ -5902,7 +6005,7 @@
                 mMediaFocusControl.setDuckingInExtPolicyAvailable(false);
             }
             if (mHasFocusListener) {
-                mMediaFocusControl.removeFocusFollower(mPolicyToken);
+                mMediaFocusControl.removeFocusFollower(mPolicyCallback);
             }
             AudioSystem.registerPolicyMixes(mMixes, false);
         }
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index a07591c9..aeecdf3 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -217,14 +217,21 @@
      * @return true if the operation is succeeded.
      */
     public synchronized boolean prepare(String oldPackage, String newPackage) {
-        if (oldPackage != null && getAppUid(oldPackage, mUserHandle) != mOwnerUID) {
-            // The package doesn't match. We return false (to obtain user consent) unless the user
-            // has already consented to that VPN package.
-            if (!oldPackage.equals(VpnConfig.LEGACY_VPN) && isVpnUserPreConsented(oldPackage)) {
-                prepareInternal(oldPackage);
-                return true;
+        if (oldPackage != null) {
+            if (getAppUid(oldPackage, mUserHandle) != mOwnerUID) {
+                // The package doesn't match. We return false (to obtain user consent) unless the
+                // user has already consented to that VPN package.
+                if (!oldPackage.equals(VpnConfig.LEGACY_VPN) && isVpnUserPreConsented(oldPackage)) {
+                    prepareInternal(oldPackage);
+                    return true;
+                }
+                return false;
+            } else if (!oldPackage.equals(VpnConfig.LEGACY_VPN)
+                    && !isVpnUserPreConsented(oldPackage)) {
+                // Currently prepared VPN is revoked, so unprepare it and return false.
+                prepareInternal(VpnConfig.LEGACY_VPN);
+                return false;
             }
-            return false;
         }
 
         // Return true if we do not need to revoke.
@@ -481,6 +488,10 @@
         if (Binder.getCallingUid() != mOwnerUID) {
             return null;
         }
+        // Check to ensure consent hasn't been revoked since we were prepared.
+        if (!isVpnUserPreConsented(mPackage)) {
+            return null;
+        }
         // Check if the service is properly declared.
         Intent intent = new Intent(VpnConfig.SERVICE_INTERFACE);
         intent.setClassName(mPackage, config.user);
@@ -488,7 +499,8 @@
         try {
             // Restricted users are not allowed to create VPNs, they are tied to Owner
             UserInfo user = mgr.getUserInfo(mUserHandle);
-            if (user.isRestricted() || mgr.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
+            if (user.isRestricted() || mgr.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN,
+                    new UserHandle(mUserHandle))) {
                 throw new SecurityException("Restricted users cannot establish VPNs");
             }
 
@@ -896,7 +908,8 @@
         }
         UserManager mgr = UserManager.get(mContext);
         UserInfo user = mgr.getUserInfo(mUserHandle);
-        if (user.isRestricted() || mgr.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
+        if (user.isRestricted() || mgr.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN,
+                    new UserHandle(mUserHandle))) {
             throw new SecurityException("Restricted users cannot establish VPNs");
         }
 
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 7cccef2..3dc282b 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -52,6 +52,7 @@
 import android.content.pm.RegisteredServicesCacheListener;
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
+import android.database.ContentObserver;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.os.BatteryStats;
@@ -99,6 +100,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
@@ -157,7 +159,19 @@
     /**
      * How long to wait before considering an active sync to have timed-out, and cancelling it.
      */
-    private static final long ACTIVE_SYNC_TIMEOUT_MILLIS = 30L * 60 * 1000;  // 30 mins.
+    private static final long ACTIVE_SYNC_TIMEOUT_MILLIS = 30L * 60 * 1000;  // 30 mins
+
+    /**
+     * How long to delay each queued {@link SyncHandler} message that may have occurred before boot
+     * or befor the device became provisioned.
+     */
+    private static final long PER_SYNC_BOOT_DELAY_MILLIS = 3000L;  // 3 seconds
+
+    /**
+     * The maximum amount of time we're willing to delay syncs out of boot, after device has been
+     * provisioned, etc.
+     */
+    private static final long MAX_SYNC_BOOT_DELAY_MILLIS = 120000L;  // 2 minutes
 
     private static final String SYNC_WAKE_LOCK_PREFIX = "*sync*/";
     private static final String HANDLE_SYNC_ALARM_WAKE_LOCK = "SyncManagerHandleSyncAlarm";
@@ -198,6 +212,9 @@
     // its accessor, getConnManager().
     private ConnectivityManager mConnManagerDoNotUseDirectly;
 
+    /** Track whether the device has already been provisioned. */
+    private boolean mProvisioned;
+
     protected SyncAdaptersCache mSyncAdapters;
 
     private final AppIdleMonitor mAppIdleMonitor;
@@ -242,6 +259,7 @@
     private BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
+            mBootCompleted = true;
             mSyncHandler.onBootCompleted();
         }
     };
@@ -491,12 +509,41 @@
 
         mSyncStorageEngine.addStatusChangeListener(
                 ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS, new ISyncStatusObserver.Stub() {
-            @Override
-            public void onStatusChanged(int which) {
-                // force the sync loop to run if the settings change
-                sendCheckAlarmsMessage();
+                    @Override
+                    public void onStatusChanged(int which) {
+                        // force the sync loop to run if the settings change
+                        sendCheckAlarmsMessage();
+                    }
+                });
+
+        mProvisioned = isDeviceProvisioned();
+        if (!mProvisioned) {
+            final ContentResolver resolver = context.getContentResolver();
+            ContentObserver provisionedObserver =
+                    new ContentObserver(null /* current thread */) {
+                        public void onChange(boolean selfChange) {
+                            mProvisioned |= isDeviceProvisioned();
+                            if (mProvisioned) {
+                                mSyncHandler.onDeviceProvisioned();
+                                resolver.unregisterContentObserver(this);
+                            }
+                        }
+                    };
+
+            synchronized (mSyncHandler) {
+                resolver.registerContentObserver(
+                        Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED),
+                        false /* notifyForDescendents */,
+                        provisionedObserver);
+
+                // The device *may* have been provisioned while we were registering above observer.
+                // Check again to make sure.
+                mProvisioned |= isDeviceProvisioned();
+                if (mProvisioned) {
+                    resolver.unregisterContentObserver(provisionedObserver);
+                }
             }
-        });
+        }
 
         if (!factoryTest) {
             // Register for account list updates for all users
@@ -510,6 +557,10 @@
         mSyncRandomOffsetMillis = mSyncStorageEngine.getSyncRandomOffset() * 1000;
     }
 
+    private boolean isDeviceProvisioned() {
+        final ContentResolver resolver = mContext.getContentResolver();
+        return (Settings.Global.getInt(resolver, Settings.Global.DEVICE_PROVISIONED, 0) != 0);
+    }
     /**
      * Return a random value v that satisfies minValue <= v < maxValue. The difference between
      * maxValue and minValue must be less than Integer.MAX_VALUE.
@@ -2000,20 +2051,36 @@
         public final SyncTimeTracker mSyncTimeTracker = new SyncTimeTracker();
         private final HashMap<String, PowerManager.WakeLock> mWakeLocks = Maps.newHashMap();
 
-        private List<Message> mBootQueue = new ArrayList<Message>();
+        private List<Message> mUnreadyQueue = new ArrayList<Message>();
 
-      public void onBootCompleted() {
+        void onBootCompleted() {
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.v(TAG, "Boot completed, clearing boot queue.");
             }
             doDatabaseCleanup();
             synchronized(this) {
                 // Dispatch any stashed messages.
-                for (Message message : mBootQueue) {
-                    sendMessage(message);
+                maybeEmptyUnreadyQueueLocked();
+            }
+        }
+
+        void onDeviceProvisioned() {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "mProvisioned=" + mProvisioned);
+            }
+            synchronized (this) {
+                maybeEmptyUnreadyQueueLocked();
+            }
+        }
+
+        private void maybeEmptyUnreadyQueueLocked() {
+            if (mProvisioned && mBootCompleted) {
+                // Dispatch any stashed messages.
+                for (int i=0; i<mUnreadyQueue.size(); i++) {
+                    sendMessageDelayed(mUnreadyQueue.get(i),
+                            Math.max(PER_SYNC_BOOT_DELAY_MILLIS * i, MAX_SYNC_BOOT_DELAY_MILLIS));
                 }
-                mBootQueue = null;
-                mBootCompleted = true;
+                mUnreadyQueue = null;
             }
         }
 
@@ -2030,20 +2097,23 @@
         }
 
         /**
-         * Stash any messages that come to the handler before boot is complete.
-         * {@link #onBootCompleted()} will disable this and dispatch all the messages collected.
+         * Stash any messages that come to the handler before boot is complete or before the device
+         * is properly provisioned (i.e. out of set-up wizard).
+         * {@link #onBootCompleted()} and {@link #onDeviceProvisioned(boolean)} both need to come
+         * in before we start syncing.
          * @param msg Message to dispatch at a later point.
          * @return true if a message was enqueued, false otherwise. This is to avoid losing the
          * message if we manage to acquire the lock but by the time we do boot has completed.
          */
         private boolean tryEnqueueMessageUntilReadyToRun(Message msg) {
             synchronized (this) {
-                if (!mBootCompleted) {
+                if (!mBootCompleted || !mProvisioned) {
                     // Need to copy the message bc looper will recycle it.
-                    mBootQueue.add(Message.obtain(msg));
+                    mUnreadyQueue.add(Message.obtain(msg));
                     return true;
+                } else {
+                    return false;
                 }
-                return false;
             }
         }
 
@@ -2100,7 +2170,7 @@
                         }
                         cancelActiveSync(expiredContext.mSyncOperation.target,
                                 expiredContext.mSyncOperation.extras);
-                        nextPendingSyncTime = maybeStartNextSyncLocked();
+                        nextPendingSyncTime = maybeStartNextSyncH();
                         break;
 
                     case SyncHandler.MESSAGE_CANCEL: {
@@ -2111,7 +2181,7 @@
                                     + payload + " bundle: " + extras);
                         }
                         cancelActiveSyncLocked(payload, extras);
-                        nextPendingSyncTime = maybeStartNextSyncLocked();
+                        nextPendingSyncTime = maybeStartNextSyncH();
                         break;
                     }
 
@@ -2120,17 +2190,17 @@
                             Log.v(TAG, "handleSyncHandlerMessage: MESSAGE_SYNC_FINISHED");
                         }
                         SyncHandlerMessagePayload payload = (SyncHandlerMessagePayload) msg.obj;
-                        if (!isSyncStillActive(payload.activeSyncContext)) {
+                        if (!isSyncStillActiveH(payload.activeSyncContext)) {
                             Log.d(TAG, "handleSyncHandlerMessage: dropping since the "
                                     + "sync is no longer active: "
                                     + payload.activeSyncContext);
                             break;
                         }
-                        runSyncFinishedOrCanceledLocked(payload.syncResult,
+                        runSyncFinishedOrCanceledH(payload.syncResult,
                                 payload.activeSyncContext);
 
                         // since a sync just finished check if it is time to start a new sync
-                        nextPendingSyncTime = maybeStartNextSyncLocked();
+                        nextPendingSyncTime = maybeStartNextSyncH();
                         break;
 
                     case SyncHandler.MESSAGE_SERVICE_CONNECTED: {
@@ -2140,7 +2210,7 @@
                                     + msgData.activeSyncContext);
                         }
                         // check that this isn't an old message
-                        if (isSyncStillActive(msgData.activeSyncContext)) {
+                        if (isSyncStillActiveH(msgData.activeSyncContext)) {
                             runBoundToAdapter(
                                     msgData.activeSyncContext,
                                     msgData.adapter);
@@ -2156,7 +2226,7 @@
                                     + currentSyncContext);
                         }
                         // check that this isn't an old message
-                        if (isSyncStillActive(currentSyncContext)) {
+                        if (isSyncStillActiveH(currentSyncContext)) {
                             // cancel the sync if we have a syncadapter, which means one is
                             // outstanding
                             try {
@@ -2174,10 +2244,10 @@
                             // which is a soft error
                             SyncResult syncResult = new SyncResult();
                             syncResult.stats.numIoExceptions++;
-                            runSyncFinishedOrCanceledLocked(syncResult, currentSyncContext);
+                            runSyncFinishedOrCanceledH(syncResult, currentSyncContext);
 
                             // since a sync just finished check if it is time to start a new sync
-                            nextPendingSyncTime = maybeStartNextSyncLocked();
+                            nextPendingSyncTime = maybeStartNextSyncH();
                         }
 
                         break;
@@ -2190,7 +2260,7 @@
                         }
                         mAlarmScheduleTime = null;
                         try {
-                            nextPendingSyncTime = maybeStartNextSyncLocked();
+                            nextPendingSyncTime = maybeStartNextSyncH();
                         } finally {
                             mHandleAlarmWakeLock.release();
                         }
@@ -2201,7 +2271,7 @@
                         if (Log.isLoggable(TAG, Log.VERBOSE)) {
                             Log.v(TAG, "handleSyncHandlerMessage: MESSAGE_CHECK_ALARMS");
                         }
-                        nextPendingSyncTime = maybeStartNextSyncLocked();
+                        nextPendingSyncTime = maybeStartNextSyncH();
                         break;
                 }
             } finally {
@@ -2393,7 +2463,7 @@
                     0 : (earliestFuturePollTime - nowAbsolute));
         }
 
-        private long maybeStartNextSyncLocked() {
+        private long maybeStartNextSyncH() {
             final boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
             if (isLoggable) Log.v(TAG, "maybeStartNextSync");
 
@@ -2612,7 +2682,7 @@
                 }
 
                 if (toReschedule != null) {
-                    runSyncFinishedOrCanceledLocked(null, toReschedule);
+                    runSyncFinishedOrCanceledH(null, toReschedule);
                     scheduleSyncOperation(toReschedule.mSyncOperation);
                 }
                 synchronized (mSyncQueue) {
@@ -2845,14 +2915,14 @@
                                     false /* no config settings */)) {
                         continue;
                     }
-                    runSyncFinishedOrCanceledLocked(null /* no result since this is a cancel */,
+                    runSyncFinishedOrCanceledH(null /* no result since this is a cancel */,
                             activeSyncContext);
                 }
             }
         }
 
-        private void runSyncFinishedOrCanceledLocked(SyncResult syncResult,
-                ActiveSyncContext activeSyncContext) {
+        private void runSyncFinishedOrCanceledH(SyncResult syncResult,
+                                                ActiveSyncContext activeSyncContext) {
             boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
 
             final SyncOperation syncOperation = activeSyncContext.mSyncOperation;
@@ -3257,7 +3327,7 @@
         }
     }
 
-    private boolean isSyncStillActive(ActiveSyncContext activeSyncContext) {
+    private boolean isSyncStillActiveH(ActiveSyncContext activeSyncContext) {
         for (ActiveSyncContext sync : mActiveSyncContexts) {
             if (sync == activeSyncContext) {
                 return true;
diff --git a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index 6f59b54..7f961ae 100644
--- a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -82,7 +82,7 @@
             appToken.linkToDeath(device, 0);
         } catch (RemoteException ex) {
             mVirtualDisplayDevices.remove(appToken);
-            device.destroyLocked();
+            device.destroyLocked(false);
             return null;
         }
 
@@ -110,7 +110,7 @@
     public DisplayDevice releaseVirtualDisplayLocked(IBinder appToken) {
         VirtualDisplayDevice device = mVirtualDisplayDevices.remove(appToken);
         if (device != null) {
-            device.destroyLocked();
+            device.destroyLocked(true);
             appToken.unlinkToDeath(device, 0);
         }
 
@@ -147,7 +147,7 @@
         if (device != null) {
             Slog.i(TAG, "Virtual display device released because application token died: "
                     + device.mOwnerPackageName);
-            device.destroyLocked();
+            device.destroyLocked(false);
             sendDisplayDeviceEventLocked(device, DISPLAY_DEVICE_EVENT_REMOVED);
         }
     }
@@ -205,19 +205,19 @@
         @Override
         public void binderDied() {
             synchronized (getSyncRoot()) {
-                if (mSurface != null) {
-                    handleBinderDiedLocked(mAppToken);
-                }
+                handleBinderDiedLocked(mAppToken);
             }
         }
 
-        public void destroyLocked() {
+        public void destroyLocked(boolean binderAlive) {
             if (mSurface != null) {
                 mSurface.release();
                 mSurface = null;
             }
             SurfaceControl.destroyDisplay(getDisplayTokenLocked());
-            mCallback.dispatchDisplayStopped();
+            if (binderAlive) {
+                mCallback.dispatchDisplayStopped();
+            }
         }
 
         @Override
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 6b5908d..ed8519a 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -16,14 +16,15 @@
 
 package com.android.server.fingerprint;
 
+import android.app.AppOpsManager;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.MessageQueue;
 import android.os.RemoteException;
-import android.util.ArrayMap;
 import android.util.Slog;
 
 import com.android.server.SystemService;
@@ -39,6 +40,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -55,6 +57,8 @@
     private ClientMonitor mEnrollClient = null;
     private ClientMonitor mRemoveClient = null;
 
+    private final AppOpsManager mAppOps;
+
     private static final int MSG_NOTIFY = 10;
 
     private static final int ENROLLMENT_TIMEOUT_MS = 60 * 1000; // 1 minute
@@ -96,6 +100,7 @@
     public FingerprintService(Context context) {
         super(context);
         mContext = context;
+        mAppOps = context.getSystemService(AppOpsManager.class);
         nativeInit(Looper.getMainLooper().getQueue(), this);
     }
 
@@ -361,6 +366,13 @@
                 "Must have " + permission + " permission.");
     }
 
+    private boolean canUserFingerPrint(String opPackageName) {
+        checkPermission(USE_FINGERPRINT);
+
+        return mAppOps.noteOp(AppOpsManager.OP_USE_FINGERPRINT, Binder.getCallingUid(),
+                opPackageName) == AppOpsManager.MODE_ALLOWED;
+    }
+
     private class ClientMonitor implements IBinder.DeathRecipient {
         IBinder token;
         IFingerprintServiceReceiver receiver;
@@ -522,8 +534,11 @@
         @Override
         // Binder call
         public void authenticate(final IBinder token, final long opId, final int groupId,
-                final IFingerprintServiceReceiver receiver, final int flags) {
+                final IFingerprintServiceReceiver receiver, final int flags, String opPackageName) {
             checkPermission(USE_FINGERPRINT);
+            if (!canUserFingerPrint(opPackageName)) {
+                return;
+            }
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
@@ -535,8 +550,10 @@
         @Override
 
         // Binder call
-        public void cancelAuthentication(final IBinder token) {
-            checkPermission(USE_FINGERPRINT);
+        public void cancelAuthentication(final IBinder token, String opPackageName) {
+            if (!canUserFingerPrint(opPackageName)) {
+                return;
+            }
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
@@ -561,8 +578,10 @@
 
         @Override
         // Binder call
-        public boolean isHardwareDetected(long deviceId) {
-            checkPermission(USE_FINGERPRINT);
+        public boolean isHardwareDetected(long deviceId, String opPackageName) {
+            if (!canUserFingerPrint(opPackageName)) {
+                return false;
+            }
             return mHalDeviceId != 0; // TODO
         }
 
@@ -580,21 +599,27 @@
 
         @Override
         // Binder call
-        public List<Fingerprint> getEnrolledFingerprints(int groupId) {
-            checkPermission(USE_FINGERPRINT);
+        public List<Fingerprint> getEnrolledFingerprints(int groupId, String opPackageName) {
+            if (!canUserFingerPrint(opPackageName)) {
+                return Collections.emptyList();
+            }
             return FingerprintService.this.getEnrolledFingerprints(groupId);
         }
 
         @Override
         // Binder call
-        public boolean hasEnrolledFingerprints(int groupId) {
-            checkPermission(USE_FINGERPRINT);
+        public boolean hasEnrolledFingerprints(int groupId, String opPackageName) {
+            if (!canUserFingerPrint(opPackageName)) {
+                return false;
+            }
             return FingerprintService.this.hasEnrolledFingerprints(groupId);
         }
 
         @Override
-        public long getAuthenticatorId() {
-            checkPermission(USE_FINGERPRINT);
+        public long getAuthenticatorId(String opPackageName) {
+            if (!canUserFingerPrint(opPackageName)) {
+                return 0;
+            }
             return nativeGetAuthenticatorId();
         }
     }
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java
index e434f39..8c12060 100644
--- a/services/core/java/com/android/server/hdmi/Constants.java
+++ b/services/core/java/com/android/server/hdmi/Constants.java
@@ -214,6 +214,10 @@
     //     values which denotes the device type in HDMI Spec 1.4.
     static final String PROPERTY_DEVICE_TYPE = "ro.hdmi.device_type";
 
+    // TODO(OEM): Set this to false to keep the playback device in sleep upon hotplug event.
+    //            True by default.
+    static final String PROPERTY_WAKE_ON_HOTPLUG = "ro.hdmi.wake_on_hotplug";
+
     // Set to false to allow playback device to go to suspend mode even
     // when it's an active source. True by default.
     static final String PROPERTY_KEEP_AWAKE = "persist.sys.hdmi.keep_awake";
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
index 89ffe45..fd3364a 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
@@ -34,6 +34,9 @@
 final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
     private static final String TAG = "HdmiCecLocalDevicePlayback";
 
+    private static final boolean WAKE_ON_HOTPLUG =
+            SystemProperties.getBoolean(Constants.PROPERTY_WAKE_ON_HOTPLUG, true);
+
     private boolean mIsActiveSource = false;
 
     // Used to keep the device awake while it is the active source. For devices that
@@ -130,7 +133,7 @@
         assertRunOnServiceThread();
         mCecMessageCache.flushAll();
         // We'll not clear mIsActiveSource on the hotplug event to pass CETC 11.2.2-2 ~ 3.
-        if (connected && mService.isPowerStandbyOrTransient()) {
+        if (WAKE_ON_HOTPLUG && connected && mService.isPowerStandbyOrTransient()) {
             mService.wakeUp();
         }
         if (!connected) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 5ac027d..51ba32d 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -486,6 +486,7 @@
             HdmiLogger.debug("Input not ready for device: %X; buffering the command", info.getId());
             mDelayedMessageBuffer.add(message);
         } else {
+            updateDevicePowerStatus(logicalAddress, HdmiControlManager.POWER_STATUS_ON);
             ActiveSource activeSource = ActiveSource.of(logicalAddress, physicalAddress);
             ActiveSourceHandler.create(this, null).process(activeSource, info.getDeviceType());
         }
@@ -905,14 +906,22 @@
     @ServiceThreadOnly
     private void updateArcFeatureStatus(int portId, boolean isConnected) {
         assertRunOnServiceThread();
+        HdmiPortInfo portInfo = mService.getPortInfo(portId);
+        if (!portInfo.isArcSupported()) {
+            return;
+        }
         HdmiDeviceInfo avr = getAvrDeviceInfo();
         if (avr == null) {
+            if (isConnected) {
+                // Update the status (since TV may not have seen AVR yet) so
+                // that ARC can be initiated after discovery.
+                mArcFeatureEnabled.put(portId, isConnected);
+            }
             return;
         }
         // HEAC 2.4, HEACT 5-15
         // Should not activate ARC if +5V status is false.
-        HdmiPortInfo portInfo = mService.getPortInfo(portId);
-        if (avr.getPortId() == portId && portInfo.isArcSupported()) {
+        if (avr.getPortId() == portId) {
             changeArcFeatureEnabled(portId, isConnected);
         }
     }
@@ -1613,6 +1622,8 @@
 
         super.disableDevice(initiatedByCec, callback);
         clearDeviceInfoList();
+        getActiveSource().invalidate();
+        setActivePath(Constants.INVALID_PHYSICAL_ADDRESS);
         checkIfPendingActionsCleared();
     }
 
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index 09d0501..dca762c 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -27,9 +27,6 @@
 import android.media.MediaMetadata;
 import android.media.Rating;
 import android.media.VolumeProvider;
-import android.media.routing.IMediaRouter;
-import android.media.routing.IMediaRouterDelegate;
-import android.media.routing.IMediaRouterStateCallback;
 import android.media.session.ISession;
 import android.media.session.ISessionCallback;
 import android.media.session.ISessionController;
@@ -718,11 +715,6 @@
         }
 
         @Override
-        public void setMediaRouter(IMediaRouter router) {
-            mHandler.post(MessageHandler.MSG_UPDATE_SESSION_STATE);
-        }
-
-        @Override
         public void setMediaButtonReceiver(PendingIntent pi) {
             mMediaButtonReceiver = pi;
         }
@@ -1209,13 +1201,6 @@
         public boolean isTransportControlEnabled() {
             return MediaSessionRecord.this.isTransportControlEnabled();
         }
-
-        @Override
-        public IMediaRouterDelegate createMediaRouterDelegate(
-                IMediaRouterStateCallback callback) {
-            // todo
-            return null;
-        }
     }
 
     private class MessageHandler extends Handler {
diff --git a/services/core/java/com/android/server/net/DelayedDiskWrite.java b/services/core/java/com/android/server/net/DelayedDiskWrite.java
index 6ed277d..8f09eb7 100644
--- a/services/core/java/com/android/server/net/DelayedDiskWrite.java
+++ b/services/core/java/com/android/server/net/DelayedDiskWrite.java
@@ -38,6 +38,10 @@
     }
 
     public void write(final String filePath, final Writer w) {
+        write(filePath, w, true);
+    }
+
+    public void write(final String filePath, final Writer w, final boolean open) {
         if (TextUtils.isEmpty(filePath)) {
             throw new IllegalArgumentException("empty file path");
         }
@@ -54,16 +58,18 @@
         mDiskWriteHandler.post(new Runnable() {
             @Override
             public void run() {
-                doWrite(filePath, w);
+                doWrite(filePath, w, open);
             }
         });
     }
 
-    private void doWrite(String filePath, Writer w) {
+    private void doWrite(String filePath, Writer w, boolean open) {
         DataOutputStream out = null;
         try {
-            out = new DataOutputStream(new BufferedOutputStream(
+            if (open) {
+                out = new DataOutputStream(new BufferedOutputStream(
                         new FileOutputStream(filePath)));
+            }
             w.onWriteCalled(out);
         } catch (IOException e) {
             loge("Error writing data file " + filePath);
diff --git a/services/core/java/com/android/server/notification/CalendarTracker.java b/services/core/java/com/android/server/notification/CalendarTracker.java
new file mode 100644
index 0000000..71d7f19
--- /dev/null
+++ b/services/core/java/com/android/server/notification/CalendarTracker.java
@@ -0,0 +1,282 @@
+/*
+ * 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.notification;
+
+import static android.service.notification.ZenModeConfig.EventInfo.ANY_CALENDAR;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.provider.CalendarContract.Attendees;
+import android.provider.CalendarContract.Instances;
+import android.service.notification.ZenModeConfig.EventInfo;
+import android.util.Log;
+
+import java.io.PrintWriter;
+import java.util.Date;
+import java.util.Objects;
+
+public class CalendarTracker {
+    private static final String TAG = "ConditionProviders.CT";
+    private static final boolean DEBUG = Log.isLoggable("ConditionProviders", Log.DEBUG);
+    private static final boolean DEBUG_ATTENDEES = false;
+
+    private static final int EVENT_CHECK_LOOKAHEAD = 24 * 60 * 60 * 1000;
+
+    private static final String[] INSTANCE_PROJECTION = {
+        Instances.BEGIN,
+        Instances.END,
+        Instances.TITLE,
+        Instances.VISIBLE,
+        Instances.EVENT_ID,
+        Instances.OWNER_ACCOUNT,
+        Instances.CALENDAR_ID,
+        Instances.AVAILABILITY,
+    };
+
+    private static final String INSTANCE_ORDER_BY = Instances.BEGIN + " ASC";
+
+    private static final String[] ATTENDEE_PROJECTION = {
+        Attendees.EVENT_ID,
+        Attendees.ATTENDEE_EMAIL,
+        Attendees.ATTENDEE_STATUS,
+    };
+
+    private static final String ATTENDEE_SELECTION = Attendees.EVENT_ID + " = ? AND "
+            + Attendees.ATTENDEE_EMAIL + " = ?";
+
+    private final Context mContext;
+
+    private Callback mCallback;
+    private boolean mRegistered;
+
+    public CalendarTracker(Context context) {
+        mContext = context;
+    }
+
+    public void setCallback(Callback callback) {
+        if (mCallback == callback) return;
+        mCallback = callback;
+        setRegistered(mCallback != null);
+    }
+
+    public void dump(String prefix, PrintWriter pw) {
+        pw.print(prefix); pw.print("mCallback="); pw.println(mCallback);
+        pw.print(prefix); pw.print("mRegistered="); pw.println(mRegistered);
+    }
+
+    public void dumpContent(Uri uri) {
+        Log.d(TAG, "dumpContent: " + uri);
+        final Cursor cursor = mContext.getContentResolver().query(uri, null, null, null, null);
+        try {
+            int r = 0;
+            while (cursor.moveToNext()) {
+                Log.d(TAG, "Row " + (++r) + ": id="
+                        + cursor.getInt(cursor.getColumnIndex(BaseColumns._ID)));
+                for (int i = 0; i < cursor.getColumnCount(); i++) {
+                    final String name = cursor.getColumnName(i);
+                    final int type = cursor.getType(i);
+                    Object o = null;
+                    String typeName = null;
+                    switch (type) {
+                        case Cursor.FIELD_TYPE_INTEGER:
+                            o = cursor.getLong(i);
+                            typeName = "INTEGER";
+                            break;
+                        case Cursor.FIELD_TYPE_STRING:
+                            o = cursor.getString(i);
+                            typeName = "STRING";
+                            break;
+                        case Cursor.FIELD_TYPE_NULL:
+                            o = null;
+                            typeName = "NULL";
+                            break;
+                        default:
+                            throw new UnsupportedOperationException("type: " + type);
+                    }
+                    if (name.equals(BaseColumns._ID)
+                            || name.toLowerCase().contains("sync")
+                            || o == null) {
+                        continue;
+                    }
+                    Log.d(TAG, "  " + name + "(" + typeName + ")=" + o);
+                }
+            }
+            Log.d(TAG, "  " + uri + " " + r + " rows");
+        } finally {
+            cursor.close();
+        }
+    }
+
+
+
+    public CheckEventResult checkEvent(EventInfo filter, long time) {
+        final Uri.Builder uriBuilder = Instances.CONTENT_URI.buildUpon();
+        ContentUris.appendId(uriBuilder, time);
+        ContentUris.appendId(uriBuilder, time + EVENT_CHECK_LOOKAHEAD);
+        final Uri uri = uriBuilder.build();
+        final Cursor cursor = mContext.getContentResolver().query(uri, INSTANCE_PROJECTION, null,
+                null, INSTANCE_ORDER_BY);
+        final CheckEventResult result = new CheckEventResult();
+        result.recheckAt = time + EVENT_CHECK_LOOKAHEAD;
+        try {
+            while (cursor.moveToNext()) {
+                final long begin = cursor.getLong(0);
+                final long end = cursor.getLong(1);
+                final String title = cursor.getString(2);
+                final boolean visible = cursor.getInt(3) == 1;
+                final int eventId = cursor.getInt(4);
+                final String owner = cursor.getString(5);
+                final long calendarId = cursor.getLong(6);
+                final int availability = cursor.getInt(7);
+                if (DEBUG) Log.d(TAG, String.format("%s %s-%s v=%s a=%s eid=%s o=%s cid=%s", title,
+                        new Date(begin), new Date(end), visible, availabilityToString(availability),
+                        eventId, owner, calendarId));
+                final boolean meetsTime = time >= begin && time < end;
+                final boolean meetsCalendar = visible
+                        && (filter.calendar == ANY_CALENDAR || filter.calendar == calendarId)
+                        && availability != Instances.AVAILABILITY_FREE;
+                if (meetsCalendar) {
+                    if (DEBUG) Log.d(TAG, "  MEETS CALENDAR");
+                    final boolean meetsAttendee = meetsAttendee(filter, eventId, owner);
+                    if (meetsAttendee) {
+                        if (DEBUG) Log.d(TAG, "    MEETS ATTENDEE");
+                        if (meetsTime) {
+                            if (DEBUG) Log.d(TAG, "      MEETS TIME");
+                            result.inEvent = true;
+                        }
+                        if (begin > time && begin < result.recheckAt) {
+                            result.recheckAt = begin;
+                        } else if (end > time && end < result.recheckAt) {
+                            result.recheckAt = end;
+                        }
+                    }
+                }
+            }
+        } finally {
+            cursor.close();
+        }
+        return result;
+    }
+
+    private boolean meetsAttendee(EventInfo filter, int eventId, String email) {
+        String selection = ATTENDEE_SELECTION;
+        String[] selectionArgs = { Integer.toString(eventId), email };
+        if (DEBUG_ATTENDEES) {
+            selection = null;
+            selectionArgs = null;
+        }
+        final Cursor cursor = mContext.getContentResolver().query(Attendees.CONTENT_URI,
+                ATTENDEE_PROJECTION, selection, selectionArgs, null);
+        try {
+            if (cursor.getCount() == 0) {
+                if (DEBUG) Log.d(TAG, "No attendees found");
+                return true;
+            }
+            boolean rt = false;
+            while (cursor.moveToNext()) {
+                final long rowEventId = cursor.getLong(0);
+                final String rowEmail = cursor.getString(1);
+                final int status = cursor.getInt(2);
+                final boolean meetsReply = meetsReply(filter.reply, status);
+                if (DEBUG) Log.d(TAG, (DEBUG_ATTENDEES ? String.format(
+                        "rowEventId=%s, rowEmail=%s, ", rowEventId, rowEmail) : "") +
+                        String.format("status=%s, meetsReply=%s",
+                        attendeeStatusToString(status), meetsReply));
+                final boolean eventMeets = rowEventId == eventId && Objects.equals(rowEmail, email)
+                        && meetsReply;
+                rt |= eventMeets;
+            }
+            return rt;
+        } finally {
+            cursor.close();
+        }
+    }
+
+    private void setRegistered(boolean registered) {
+        if (mRegistered == registered) return;
+        final ContentResolver cr = mContext.getContentResolver();
+        if (mRegistered) {
+            cr.unregisterContentObserver(mObserver);
+        }
+        mRegistered = registered;
+        if (mRegistered) {
+            cr.registerContentObserver(Instances.CONTENT_URI, false, mObserver);
+        }
+    }
+
+    private static String attendeeStatusToString(int status) {
+        switch (status) {
+            case Attendees.ATTENDEE_STATUS_NONE: return "ATTENDEE_STATUS_NONE";
+            case Attendees.ATTENDEE_STATUS_ACCEPTED: return "ATTENDEE_STATUS_ACCEPTED";
+            case Attendees.ATTENDEE_STATUS_DECLINED: return "ATTENDEE_STATUS_DECLINED";
+            case Attendees.ATTENDEE_STATUS_INVITED: return "ATTENDEE_STATUS_INVITED";
+            case Attendees.ATTENDEE_STATUS_TENTATIVE: return "ATTENDEE_STATUS_TENTATIVE";
+            default: return "ATTENDEE_STATUS_UNKNOWN_" + status;
+        }
+    }
+
+    private static String availabilityToString(int availability) {
+        switch (availability) {
+            case Instances.AVAILABILITY_BUSY: return "AVAILABILITY_BUSY";
+            case Instances.AVAILABILITY_FREE: return "AVAILABILITY_FREE";
+            case Instances.AVAILABILITY_TENTATIVE: return "AVAILABILITY_TENTATIVE";
+            default: return "AVAILABILITY_UNKNOWN_" + availability;
+        }
+    }
+
+    private static boolean meetsReply(int reply, int attendeeStatus) {
+        switch (reply) {
+            case EventInfo.REPLY_YES:
+                return attendeeStatus == Attendees.ATTENDEE_STATUS_ACCEPTED;
+            case EventInfo.REPLY_YES_OR_MAYBE:
+                return attendeeStatus == Attendees.ATTENDEE_STATUS_ACCEPTED
+                        || attendeeStatus == Attendees.ATTENDEE_STATUS_TENTATIVE;
+            case EventInfo.REPLY_ANY_EXCEPT_NO:
+                return attendeeStatus != Attendees.ATTENDEE_STATUS_DECLINED;
+            default:
+                return false;
+        }
+    }
+
+    private final ContentObserver mObserver = new ContentObserver(null) {
+        @Override
+        public void onChange(boolean selfChange, Uri u) {
+            if (DEBUG) Log.d(TAG, "onChange selfChange=" + selfChange + " uri=" + u);
+            mCallback.onChanged();
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            if (DEBUG) Log.d(TAG, "onChange selfChange=" + selfChange);
+        }
+    };
+
+    public static class CheckEventResult {
+        public boolean inEvent;
+        public long recheckAt;
+    }
+
+    public interface Callback {
+        void onChanged();
+    }
+
+}
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index b36fcd2..8c6afaf 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -121,6 +121,9 @@
     @Override
     public void onBootPhaseAppsCanStart() {
         super.onBootPhaseAppsCanStart();
+        for (int i = 0; i < mSystemConditionProviders.size(); i++) {
+            mSystemConditionProviders.valueAt(i).onBootComplete();
+        }
         if (mCallback != null) {
             mCallback.onBootComplete();
         }
diff --git a/services/core/java/com/android/server/notification/CountdownConditionProvider.java b/services/core/java/com/android/server/notification/CountdownConditionProvider.java
index b5b97d6..07903e9 100644
--- a/services/core/java/com/android/server/notification/CountdownConditionProvider.java
+++ b/services/core/java/com/android/server/notification/CountdownConditionProvider.java
@@ -34,12 +34,11 @@
 import com.android.server.notification.NotificationManagerService.DumpFilter;
 
 import java.io.PrintWriter;
-import java.util.Date;
 
 /** Built-in zen condition provider for simple time-based conditions */
 public class CountdownConditionProvider extends SystemConditionProviderService {
-    private static final String TAG = "ConditionProviders";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+    private static final String TAG = "ConditionProviders.CCP";
+    private static final boolean DEBUG = Log.isLoggable("ConditionProviders", Log.DEBUG);
 
     public static final ComponentName COMPONENT =
             new ComponentName("android", CountdownConditionProvider.class.getName());
@@ -74,6 +73,11 @@
     }
 
     @Override
+    public void onBootComplete() {
+        // noop
+    }
+
+    @Override
     public IConditionProvider asInterface() {
         return (IConditionProvider) onBind(null);
     }
@@ -170,8 +174,4 @@
                 ts(time), time - now, span, ts(now));
     }
 
-    private static String ts(long time) {
-        return new Date(time) + " (" + time + ")";
-    }
-
 }
diff --git a/services/core/java/com/android/server/notification/EventConditionProvider.java b/services/core/java/com/android/server/notification/EventConditionProvider.java
index 425e222..dea6325 100644
--- a/services/core/java/com/android/server/notification/EventConditionProvider.java
+++ b/services/core/java/com/android/server/notification/EventConditionProvider.java
@@ -16,16 +16,23 @@
 
 package com.android.server.notification;
 
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.net.Uri;
 import android.service.notification.Condition;
 import android.service.notification.IConditionProvider;
 import android.service.notification.ZenModeConfig;
+import android.service.notification.ZenModeConfig.EventInfo;
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.Slog;
 
+import com.android.server.notification.CalendarTracker.CheckEventResult;
 import com.android.server.notification.NotificationManagerService.DumpFilter;
 
 import java.io.PrintWriter;
@@ -34,20 +41,27 @@
  * Built-in zen condition provider for calendar event-based conditions.
  */
 public class EventConditionProvider extends SystemConditionProviderService {
-    private static final String TAG = "ConditionProviders";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+    private static final String TAG = "ConditionProviders.ECP";
+    private static final boolean DEBUG = Log.isLoggable("ConditionProviders", Log.DEBUG);
 
     public static final ComponentName COMPONENT =
             new ComponentName("android", EventConditionProvider.class.getName());
     private static final String NOT_SHOWN = "...";
+    private static final String SIMPLE_NAME = EventConditionProvider.class.getSimpleName();
+    private static final String ACTION_EVALUATE = SIMPLE_NAME + ".EVALUATE";
+    private static final int REQUEST_CODE_EVALUATE = 1;
+    private static final String EXTRA_TIME = "time";
 
+    private final Context mContext = this;
     private final ArraySet<Uri> mSubscriptions = new ArraySet<Uri>();
+    private final CalendarTracker mTracker = new CalendarTracker(mContext);
 
     private boolean mConnected;
     private boolean mRegistered;
+    private boolean mBootComplete;  // don't hammer the calendar provider until boot completes.
 
     public EventConditionProvider() {
-        if (DEBUG) Slog.d(TAG, "new EventConditionProvider()");
+        if (DEBUG) Slog.d(TAG, "new " + SIMPLE_NAME + "()");
     }
 
     @Override
@@ -62,14 +76,25 @@
 
     @Override
     public void dump(PrintWriter pw, DumpFilter filter) {
-        pw.println("    EventConditionProvider:");
+        pw.print("    "); pw.print(SIMPLE_NAME); pw.println(":");
         pw.print("      mConnected="); pw.println(mConnected);
         pw.print("      mRegistered="); pw.println(mRegistered);
+        pw.print("      mBootComplete="); pw.println(mBootComplete);
         pw.println("      mSubscriptions=");
         for (Uri conditionId : mSubscriptions) {
             pw.print("        ");
             pw.println(conditionId);
         }
+        pw.println("      mTracker=");
+        mTracker.dump("        ", pw);
+    }
+
+    @Override
+    public void onBootComplete() {
+        if (DEBUG) Slog.d(TAG, "onBootComplete");
+        if (mBootComplete) return;
+        mBootComplete = true;
+        evaluateSubscriptions();
     }
 
     @Override
@@ -98,8 +123,9 @@
             notifyCondition(conditionId, Condition.STATE_FALSE, "badCondition");
             return;
         }
-        mSubscriptions.add(conditionId);
-        evaluateSubscriptions();
+        if (mSubscriptions.add(conditionId)) {
+            evaluateSubscriptions();
+        }
     }
 
     @Override
@@ -121,9 +147,52 @@
     }
 
     private void evaluateSubscriptions() {
-        for (Uri conditionId : mSubscriptions) {
-            notifyCondition(conditionId, Condition.STATE_FALSE, "notImplemented");
+        if (DEBUG) Log.d(TAG, "evaluateSubscriptions");
+        if (!mBootComplete) {
+            if (DEBUG) Log.d(TAG, "Skipping evaluate before boot complete");
+            return;
         }
+        final long now = System.currentTimeMillis();
+        mTracker.setCallback(mSubscriptions.isEmpty() ? null : mTrackerCallback);
+        setRegistered(!mSubscriptions.isEmpty());
+        long reevaluateAt = 0;
+        for (Uri conditionId : mSubscriptions) {
+            final EventInfo event = ZenModeConfig.tryParseEventConditionId(conditionId);
+            if (event == null) {
+                notifyCondition(conditionId, Condition.STATE_FALSE, "badConditionId");
+                continue;
+            }
+            final CheckEventResult result = mTracker.checkEvent(event, now);
+            if (result.recheckAt != 0 && (reevaluateAt == 0 || result.recheckAt < reevaluateAt)) {
+                reevaluateAt = result.recheckAt;
+            }
+            if (!result.inEvent) {
+                notifyCondition(conditionId, Condition.STATE_FALSE, "!inEventNow");
+                continue;
+            }
+            notifyCondition(conditionId, Condition.STATE_TRUE, "inEventNow");
+        }
+        updateAlarm(now, reevaluateAt);
+        if (DEBUG) Log.d(TAG, "evaluateSubscriptions took " + (System.currentTimeMillis() - now));
+    }
+
+    private void updateAlarm(long now, long time) {
+        final AlarmManager alarms = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+        final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,
+                REQUEST_CODE_EVALUATE,
+                new Intent(ACTION_EVALUATE)
+                        .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
+                        .putExtra(EXTRA_TIME, time),
+                PendingIntent.FLAG_UPDATE_CURRENT);
+        alarms.cancel(pendingIntent);
+        if (time == 0 || time < now) {
+            if (DEBUG) Slog.d(TAG, "Not scheduling evaluate: " + (time == 0 ? "no time specified"
+                    : "specified time in the past"));
+            return;
+        }
+        if (DEBUG) Slog.d(TAG, String.format("Scheduling evaluate for %s, in %s, now=%s",
+                ts(time), formatDuration(time - now), ts(now)));
+        alarms.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
     }
 
     private void notifyCondition(Uri conditionId, int state, String reason) {
@@ -139,4 +208,34 @@
         return new Condition(id, summary, line1, line2, 0, state, Condition.FLAG_RELEVANT_ALWAYS);
     }
 
+    private void setRegistered(boolean registered) {
+        if (mRegistered == registered) return;
+        if (DEBUG) Slog.d(TAG, "setRegistered " + registered);
+        mRegistered = registered;
+        if (mRegistered) {
+            final IntentFilter filter = new IntentFilter();
+            filter.addAction(Intent.ACTION_TIME_CHANGED);
+            filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
+            filter.addAction(ACTION_EVALUATE);
+            registerReceiver(mReceiver, filter);
+        } else {
+            unregisterReceiver(mReceiver);
+        }
+    }
+
+    private final CalendarTracker.Callback mTrackerCallback = new CalendarTracker.Callback() {
+        @Override
+        public void onChanged() {
+            if (DEBUG) Log.d(TAG, "mTrackerCallback.onChanged");
+            evaluateSubscriptions();
+        }
+    };
+
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DEBUG) Slog.d(TAG, "onReceive " + intent.getAction());
+            evaluateSubscriptions();
+        }
+    };
 }
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index b92c734..6f8e3ca 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -189,6 +189,10 @@
         }
     }
 
+    public boolean isComponentEnabledForPackage(String pkg) {
+        return mEnabledServicesPackageNames.contains(pkg);
+    }
+
     public void onPackagesChanged(boolean queryReplace, String[] pkgList) {
         if (DEBUG) Slog.d(TAG, "onPackagesChanged queryReplace=" + queryReplace
                 + " pkgList=" + (pkgList == null ? null : Arrays.asList(pkgList))
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 25998da..791c1de 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -37,7 +37,6 @@
 import android.app.PendingIntent;
 import android.app.StatusBarManager;
 import android.app.usage.UsageEvents;
-import android.app.usage.UsageStats;
 import android.app.usage.UsageStatsManagerInternal;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -233,7 +232,7 @@
             new ArrayMap<String, NotificationRecord>();
     final ArrayList<ToastRecord> mToastQueue = new ArrayList<ToastRecord>();
     final ArrayMap<String, NotificationRecord> mSummaryByGroupKey = new ArrayMap<>();
-    private final ArrayMap<String, Policy.Token> mPolicyTokens = new ArrayMap<>();
+    private final ArrayMap<String, Boolean> mPolicyAccess = new ArrayMap<>();
 
 
     // The last key in this list owns the hardware.
@@ -899,6 +898,7 @@
 
             @Override
             void onZenModeChanged() {
+                sendRegisteredOnlyBroadcast(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED);
                 synchronized(mNotificationList) {
                     updateInterruptionFilterLocked();
                 }
@@ -906,9 +906,12 @@
 
             @Override
             void onPolicyChanged() {
-                getContext().sendBroadcast(
-                        new Intent(NotificationManager.ACTION_NOTIFICATION_POLICY_CHANGED)
-                                .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY));
+                sendRegisteredOnlyBroadcast(NotificationManager.ACTION_NOTIFICATION_POLICY_CHANGED);
+            }
+
+            private void sendRegisteredOnlyBroadcast(String action) {
+                getContext().sendBroadcast(new Intent(action)
+                        .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY));
             }
         });
         final File systemDir = new File(Environment.getDataDirectory(), "system");
@@ -1607,6 +1610,19 @@
         }
 
         @Override
+        public void setInterruptionFilter(String pkg, int filter) throws RemoteException {
+            enforcePolicyAccess(pkg, "setInterruptionFilter");
+            final int zen = NotificationManager.zenModeFromInterruptionFilter(filter, -1);
+            if (zen == -1) throw new IllegalArgumentException("Invalid filter: " + filter);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mZenModeHelper.setManualZenMode(zen, null, "setInterruptionFilter");
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
         public void notifyConditions(String pkg, IConditionProvider provider,
                 Condition[] conditions) {
             final ManagedServiceInfo info = mConditionProviders.checkServiceToken(provider);
@@ -1641,16 +1657,19 @@
                     message);
         }
 
-        private void enforcePolicyToken(Policy.Token token, String method) {
-            if (!checkPolicyToken(token)) {
-                Slog.w(TAG, "Invalid notification policy token calling " + method);
-                throw new SecurityException("Invalid notification policy token");
+        private void enforcePolicyAccess(String pkg, String method) {
+            if (!checkPolicyAccess(pkg)) {
+                Slog.w(TAG, "Notification policy access denied calling " + method);
+                throw new SecurityException("Notification policy access denied");
             }
         }
 
-        private boolean checkPolicyToken(Policy.Token token) {
-            return mPolicyTokens.containsValue(token)
-                    || mListeners.mPolicyTokens.containsValue(token);
+        private boolean checkPackagePolicyAccess(String pkg) {
+            return Boolean.TRUE.equals(mPolicyAccess.get(pkg));
+        }
+
+        private boolean checkPolicyAccess(String pkg) {
+            return checkPackagePolicyAccess(pkg) || mListeners.isComponentEnabledForPackage(pkg);
         }
 
         @Override
@@ -1702,52 +1721,76 @@
         }
 
         @Override
-        public Policy.Token getPolicyTokenFromListener(INotificationListener listener) {
-            final long identity = Binder.clearCallingIdentity();
-            try {
-                return mListeners.getPolicyToken(listener);
-            } finally {
-                Binder.restoreCallingIdentity(identity);
-            }
-        }
-
-        @Override
-        public void requestNotificationPolicyToken(String pkg,
+        public void requestNotificationPolicyAccess(String pkg,
                 INotificationManagerCallback callback) throws RemoteException {
             if (callback == null) {
-                Slog.w(TAG, "requestNotificationPolicyToken: no callback specified");
+                Slog.w(TAG, "requestNotificationPolicyAccess: no callback specified");
                 return;
             }
             if (pkg == null) {
-                Slog.w(TAG, "requestNotificationPolicyToken denied: no package specified");
-                callback.onPolicyToken(null);
+                Slog.w(TAG, "requestNotificationPolicyAccess denied: no package specified");
+                callback.onPolicyRequestResult(false);
                 return;
             }
-            Policy.Token token = null;
             final long identity = Binder.clearCallingIdentity();
             try {
                 synchronized (mNotificationList) {
-                    token = mPolicyTokens.get(pkg);
-                    if (token == null) {
-                        token = new Policy.Token(new Binder());
-                        mPolicyTokens.put(pkg, token);
-                    }
-                    if (DBG) Slog.w(TAG, "requestNotificationPolicyToken granted for " + pkg);
+                    // immediately grant for now
+                    mPolicyAccess.put(pkg, true);
+                    if (DBG) Slog.w(TAG, "requestNotificationPolicyAccess granted for " + pkg);
                 }
             } finally {
                 Binder.restoreCallingIdentity(identity);
             }
-            callback.onPolicyToken(token);
+            callback.onPolicyRequestResult(true);
         }
 
         @Override
-        public boolean isNotificationPolicyTokenValid(String pkg, Policy.Token token) {
-            return checkPolicyToken(token);
+        public boolean isNotificationPolicyAccessGranted(String pkg) {
+            return checkPolicyAccess(pkg);
         }
 
         @Override
-        public Policy getNotificationPolicy(Policy.Token token) {
-            enforcePolicyToken(token, "getNotificationPolicy");
+        public boolean isNotificationPolicyAccessGrantedForPackage(String pkg) {
+            enforceSystemOrSystemUI("request policy access status for another package");
+            return checkPackagePolicyAccess(pkg);
+        }
+
+        @Override
+        public String[] getPackagesRequestingNotificationPolicyAccess()
+                throws RemoteException {
+            enforceSystemOrSystemUI("request policy access packages");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mNotificationList) {
+                    final String[] rt = new String[mPolicyAccess.size()];
+                    for (int i = 0; i < mPolicyAccess.size(); i++) {
+                        rt[i] = mPolicyAccess.keyAt(i);
+                    }
+                    return rt;
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void setNotificationPolicyAccessGranted(String pkg, boolean granted)
+                throws RemoteException {
+            enforceSystemOrSystemUI("grant notification policy access");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mNotificationList) {
+                    mPolicyAccess.put(pkg, granted);
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public Policy getNotificationPolicy(String pkg) {
+            enforcePolicyAccess(pkg, "getNotificationPolicy");
             final long identity = Binder.clearCallingIdentity();
             try {
                 return mZenModeHelper.getNotificationPolicy();
@@ -1757,8 +1800,8 @@
         }
 
         @Override
-        public void setNotificationPolicy(Policy.Token token, Policy policy) {
-            enforcePolicyToken(token, "setNotificationPolicy");
+        public void setNotificationPolicy(String pkg, Policy policy) {
+            enforcePolicyAccess(pkg, "setNotificationPolicy");
             final long identity = Binder.clearCallingIdentity();
             try {
                 mZenModeHelper.setNotificationPolicy(policy);
@@ -1881,11 +1924,9 @@
                     pw.print(listener.component);
                 }
                 pw.println(')');
-                pw.print("    mPolicyTokens.keys: ");
-                pw.println(TextUtils.join(",", mPolicyTokens.keySet()));
-                pw.print("    mListeners.mPolicyTokens.keys: ");
-                pw.println(TextUtils.join(",", mListeners.mPolicyTokens.keySet()));
             }
+            pw.println("\n  Policy access:");
+            pw.print("    mPolicyAccess: "); pw.println(mPolicyAccess);
 
             pw.println("\n  Condition providers:");
             mConditionProviders.dump(pw, filter);
@@ -3138,18 +3179,12 @@
     public class NotificationListeners extends ManagedServices {
 
         private final ArraySet<ManagedServiceInfo> mLightTrimListeners = new ArraySet<>();
-        private final ArrayMap<ComponentName, Policy.Token> mPolicyTokens = new ArrayMap<>();
         private boolean mNotificationGroupsDesired;
 
         public NotificationListeners() {
             super(getContext(), mHandler, mNotificationList, mUserProfiles);
         }
 
-        public Policy.Token getPolicyToken(INotificationListener listener) {
-            final ManagedServiceInfo info = checkServiceTokenLocked(listener);
-            return info == null ? null : mPolicyTokens.get(info.component);
-        }
-
         @Override
         protected Config getConfig() {
             Config c = new Config();
@@ -3174,7 +3209,6 @@
             synchronized (mNotificationList) {
                 updateNotificationGroupsDesiredLocked();
                 update = makeRankingUpdateLocked(info);
-                mPolicyTokens.put(info.component, new Policy.Token(new Binder()));
             }
             try {
                 listener.onListenerConnected(update);
@@ -3191,7 +3225,6 @@
             }
             mLightTrimListeners.remove(removed);
             updateNotificationGroupsDesiredLocked();
-            mPolicyTokens.remove(removed.component);
         }
 
         public void setOnNotificationPostedTrimLocked(ManagedServiceInfo info, int trim) {
diff --git a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
index 0912e97..bca13c2 100644
--- a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
+++ b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
@@ -31,25 +31,24 @@
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.Slog;
-import android.util.TimeUtils;
 
 import com.android.server.notification.NotificationManagerService.DumpFilter;
 
 import java.io.PrintWriter;
-import java.util.Date;
 import java.util.TimeZone;
 
 /**
  * Built-in zen condition provider for daily scheduled time-based conditions.
  */
 public class ScheduleConditionProvider extends SystemConditionProviderService {
-    private static final String TAG = "ConditionProviders";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+    private static final String TAG = "ConditionProviders.SCP";
+    private static final boolean DEBUG = Log.isLoggable("ConditionProviders", Log.DEBUG);
 
     public static final ComponentName COMPONENT =
             new ComponentName("android", ScheduleConditionProvider.class.getName());
     private static final String NOT_SHOWN = "...";
-    private static final String ACTION_EVALUATE = TAG + ".EVALUATE";
+    private static final String SIMPLE_NAME = ScheduleConditionProvider.class.getSimpleName();
+    private static final String ACTION_EVALUATE =  SIMPLE_NAME + ".EVALUATE";
     private static final int REQUEST_CODE_EVALUATE = 1;
     private static final String EXTRA_TIME = "time";
 
@@ -60,7 +59,7 @@
     private boolean mRegistered;
 
     public ScheduleConditionProvider() {
-        if (DEBUG) Slog.d(TAG, "new ScheduleConditionProvider()");
+        if (DEBUG) Slog.d(TAG, "new " + SIMPLE_NAME + "()");
     }
 
     @Override
@@ -75,7 +74,7 @@
 
     @Override
     public void dump(PrintWriter pw, DumpFilter filter) {
-        pw.println("    ScheduleConditionProvider:");
+        pw.print("    "); pw.print(SIMPLE_NAME); pw.println(":");
         pw.print("      mConnected="); pw.println(mConnected);
         pw.print("      mRegistered="); pw.println(mRegistered);
         pw.println("      mSubscriptions=");
@@ -94,6 +93,11 @@
     }
 
     @Override
+    public void onBootComplete() {
+        // noop
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         if (DEBUG) Slog.d(TAG, "onDestroy");
@@ -175,16 +179,6 @@
         }
     }
 
-    private static String ts(long time) {
-        return new Date(time) + " (" + time + ")";
-    }
-
-    private static String formatDuration(long millis) {
-        final StringBuilder sb = new StringBuilder();
-        TimeUtils.formatDuration(millis, sb);
-        return sb.toString();
-    }
-
     private static boolean meetsSchedule(Uri conditionId, long time) {
         final ScheduleCalendar cal = toScheduleCalendar(conditionId);
         return cal != null && cal.isInSchedule(time);
diff --git a/services/core/java/com/android/server/notification/SystemConditionProviderService.java b/services/core/java/com/android/server/notification/SystemConditionProviderService.java
index 3282a69a..8a8e063 100644
--- a/services/core/java/com/android/server/notification/SystemConditionProviderService.java
+++ b/services/core/java/com/android/server/notification/SystemConditionProviderService.java
@@ -21,10 +21,12 @@
 import android.net.Uri;
 import android.service.notification.ConditionProviderService;
 import android.service.notification.IConditionProvider;
+import android.util.TimeUtils;
 
 import com.android.server.notification.NotificationManagerService.DumpFilter;
 
 import java.io.PrintWriter;
+import java.util.Date;
 
 public abstract class SystemConditionProviderService extends ConditionProviderService {
 
@@ -33,4 +35,15 @@
     abstract public IConditionProvider asInterface();
     abstract public ComponentName getComponent();
     abstract public boolean isValidConditionId(Uri id);
+    abstract public void onBootComplete();
+
+    protected static String ts(long time) {
+        return new Date(time) + " (" + time + ")";
+    }
+
+    protected static String formatDuration(long millis) {
+        final StringBuilder sb = new StringBuilder();
+        TimeUtils.formatDuration(millis, sb);
+        return sb.toString();
+    }
 }
diff --git a/services/core/java/com/android/server/notification/ZenModeFiltering.java b/services/core/java/com/android/server/notification/ZenModeFiltering.java
index 2aaeb9d..80dc523 100644
--- a/services/core/java/com/android/server/notification/ZenModeFiltering.java
+++ b/services/core/java/com/android/server/notification/ZenModeFiltering.java
@@ -86,7 +86,7 @@
             if (validator != null) {
                 final float contactAffinity = validator.getContactAffinity(userHandle, extras,
                         contactsTimeoutMs, timeoutAffinity);
-                return audienceMatches(config, contactAffinity);
+                return audienceMatches(config.allowCallsFrom, contactAffinity);
             }
         }
         return true;
@@ -133,14 +133,14 @@
                         ZenLog.traceIntercepted(record, "!allowCalls");
                         return true;
                     }
-                    return shouldInterceptAudience(config, record);
+                    return shouldInterceptAudience(config.allowCallsFrom, record);
                 }
                 if (isMessage(record)) {
                     if (!config.allowMessages) {
                         ZenLog.traceIntercepted(record, "!allowMessages");
                         return true;
                     }
-                    return shouldInterceptAudience(config, record);
+                    return shouldInterceptAudience(config.allowMessagesFrom, record);
                 }
                 if (isEvent(record)) {
                     if (!config.allowEvents) {
@@ -163,9 +163,8 @@
         }
     }
 
-    private static boolean shouldInterceptAudience(ZenModeConfig config,
-            NotificationRecord record) {
-        if (!audienceMatches(config, record.getContactAffinity())) {
+    private static boolean shouldInterceptAudience(int source, NotificationRecord record) {
+        if (!audienceMatches(source, record.getContactAffinity())) {
             ZenLog.traceIntercepted(record, "!audienceMatches");
             return true;
         }
@@ -219,8 +218,8 @@
         return record.isCategory(Notification.CATEGORY_MESSAGE) || isDefaultMessagingApp(record);
     }
 
-    private static boolean audienceMatches(ZenModeConfig config, float contactAffinity) {
-        switch (config.allowFrom) {
+    private static boolean audienceMatches(int source, float contactAffinity) {
+        switch (source) {
             case ZenModeConfig.SOURCE_ANYONE:
                 return true;
             case ZenModeConfig.SOURCE_CONTACT:
@@ -228,7 +227,7 @@
             case ZenModeConfig.SOURCE_STAR:
                 return contactAffinity >= ValidateNotificationPeople.STARRED_CONTACT;
             default:
-                Slog.w(TAG, "Encountered unknown source: " + config.allowFrom);
+                Slog.w(TAG, "Encountered unknown source: " + source);
                 return true;
         }
     }
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 83f0bcfc..aeb6b78 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -22,6 +22,7 @@
 import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
 
 import android.app.AppOpsManager;
+import android.app.NotificationManager;
 import android.app.NotificationManager.Policy;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -42,6 +43,7 @@
 import android.service.notification.IConditionListener;
 import android.service.notification.NotificationListenerService;
 import android.service.notification.ZenModeConfig;
+import android.service.notification.ZenModeConfig.EventInfo;
 import android.service.notification.ZenModeConfig.ScheduleInfo;
 import android.service.notification.ZenModeConfig.ZenRule;
 import android.util.ArraySet;
@@ -90,6 +92,7 @@
         mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
         mDefaultConfig = readDefaultConfig(context.getResources());
         appendDefaultScheduleRules(mDefaultConfig);
+        appendDefaultEventRules(mDefaultConfig);
         mConfig = mDefaultConfig;
         mSettingsObserver = new SettingsObserver(mHandler);
         mSettingsObserver.observe();
@@ -142,11 +145,11 @@
     }
 
     public int getZenModeListenerInterruptionFilter() {
-        return getZenModeListenerInterruptionFilter(mZenMode);
+        return NotificationManager.zenModeToInterruptionFilter(mZenMode);
     }
 
-    public void requestFromListener(ComponentName name, int interruptionFilter) {
-        final int newZen = zenModeFromListenerInterruptionFilter(interruptionFilter, -1);
+    public void requestFromListener(ComponentName name, int filter) {
+        final int newZen = NotificationManager.zenModeFromInterruptionFilter(filter, -1);
         if (newZen != -1) {
             setManualZenMode(newZen, null,
                     "listener:" + (name != null ? name.flattenToShortString() : null));
@@ -209,9 +212,11 @@
             pw.println(config);
             return;
         }
-        pw.printf("allow(calls=%s,repeatCallers=%s,events=%s,from=%s,messages=%s,reminders=%s)\n",
-                config.allowCalls, config.allowRepeatCallers, config.allowEvents, config.allowFrom,
-                config.allowMessages, config.allowReminders);
+        pw.printf("allow(calls=%s,callsFrom=%s,repeatCallers=%s,messages=%s,messagesFrom=%s,"
+                + "events=%s,reminders=%s)\n",
+                config.allowCalls, config.allowCallsFrom, config.allowRepeatCallers,
+                config.allowMessages, config.allowMessagesFrom,
+                config.allowEvents, config.allowReminders);
         pw.print(prefix); pw.print("  manualRule="); pw.println(config.manualRule);
         if (config.automaticRules.isEmpty()) return;
         final int N = config.automaticRules.size();
@@ -391,37 +396,6 @@
         }
     }
 
-    private static int getZenModeListenerInterruptionFilter(int zen) {
-        switch (zen) {
-            case Global.ZEN_MODE_OFF:
-                return NotificationListenerService.INTERRUPTION_FILTER_ALL;
-            case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
-                return NotificationListenerService.INTERRUPTION_FILTER_PRIORITY;
-            case Global.ZEN_MODE_ALARMS:
-                return NotificationListenerService.INTERRUPTION_FILTER_ALARMS;
-            case Global.ZEN_MODE_NO_INTERRUPTIONS:
-                return NotificationListenerService.INTERRUPTION_FILTER_NONE;
-            default:
-                return 0;
-        }
-    }
-
-    private static int zenModeFromListenerInterruptionFilter(int listenerInterruptionFilter,
-            int defValue) {
-        switch (listenerInterruptionFilter) {
-            case NotificationListenerService.INTERRUPTION_FILTER_ALL:
-                return Global.ZEN_MODE_OFF;
-            case NotificationListenerService.INTERRUPTION_FILTER_PRIORITY:
-                return Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
-            case NotificationListenerService.INTERRUPTION_FILTER_ALARMS:
-                return Global.ZEN_MODE_ALARMS;
-            case NotificationListenerService.INTERRUPTION_FILTER_NONE:
-                return Global.ZEN_MODE_NO_INTERRUPTIONS;
-            default:
-                return defValue;
-        }
-    }
-
     private ZenModeConfig readDefaultConfig(Resources resources) {
         XmlResourceParser parser = null;
         try {
@@ -467,6 +441,20 @@
         config.automaticRules.put(config.newRuleId(), rule2);
     }
 
+    private void appendDefaultEventRules(ZenModeConfig config) {
+        if (config == null) return;
+
+        final EventInfo events = new EventInfo();
+        events.calendar = EventInfo.ANY_CALENDAR;
+        events.reply = EventInfo.REPLY_YES_OR_MAYBE;
+        final ZenRule rule = new ZenRule();
+        rule.enabled = false;
+        rule.name = mContext.getResources().getString(R.string.zen_mode_default_events_name);
+        rule.conditionId = ZenModeConfig.toEventConditionId(events);
+        rule.zenMode = Global.ZEN_MODE_ALARMS;
+        config.automaticRules.put(config.newRuleId(), rule);
+    }
+
     private static int zenSeverity(int zen) {
         switch (zen) {
             case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: return 1;
@@ -483,8 +471,9 @@
             final ZenModeConfig rt = new ZenModeConfig();
             rt.allowCalls = v1.allowCalls;
             rt.allowEvents = v1.allowEvents;
-            rt.allowFrom = v1.allowFrom;
+            rt.allowCallsFrom = v1.allowFrom;
             rt.allowMessages = v1.allowMessages;
+            rt.allowMessagesFrom = v1.allowFrom;
             rt.allowReminders = v1.allowReminders;
             // don't migrate current exit condition
             final int[] days = ZenModeConfig.XmlV1.tryParseDays(v1.sleepMode);
@@ -508,6 +497,7 @@
                 Log.i(TAG, "No existing V1 downtime found, generating default schedules");
                 appendDefaultScheduleRules(rt);
             }
+            appendDefaultEventRules(rt);
             return rt;
         }
     };
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index 0f3b4e6..fb98d94 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 moveUserDataDirs(String fromUuid, String toUuid, String packageName, int appId,
-            String seinfo) {
-        StringBuilder builder = new StringBuilder("mvuserdata");
+    public int moveCompleteApp(String fromUuid, String toUuid, String packageName,
+            String dataAppName, int appId, String seinfo) {
+        StringBuilder builder = new StringBuilder("mvcompleteapp");
         builder.append(' ');
         builder.append(escapeNull(fromUuid));
         builder.append(' ');
@@ -274,6 +274,8 @@
         builder.append(' ');
         builder.append(packageName);
         builder.append(' ');
+        builder.append(dataAppName);
+        builder.append(' ');
         builder.append(appId);
         builder.append(' ');
         builder.append(seinfo);
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index a42e4e7..b505f7e 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -31,7 +31,6 @@
 import java.util.List;
 
 import dalvik.system.DexFile;
-import dalvik.system.StaleDexCacheError;
 
 import static com.android.server.pm.InstructionSets.getAppDexInstructionSets;
 import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets;
@@ -112,61 +111,60 @@
             }
 
             for (String path : paths) {
-                try {
-                    final int dexoptNeeded;
-                    if (forceDex) {
-                        dexoptNeeded = DexFile.DEX2OAT_NEEDED;
-                    } else {
-                        dexoptNeeded = DexFile.getDexOptNeeded(path,
-                                pkg.packageName, dexCodeInstructionSet, defer);
+                final int dexoptNeeded;
+                if (forceDex) {
+                    dexoptNeeded = DexFile.DEX2OAT_NEEDED;
+                } else {
+                    try {
+                        dexoptNeeded = DexFile.getDexOptNeeded(path, pkg.packageName,
+                                dexCodeInstructionSet, defer);
+                    } catch (IOException ioe) {
+                        Slog.w(TAG, "IOException reading apk: " + path, ioe);
+                        return DEX_OPT_FAILED;
                     }
+                }
 
-                    if (!forceDex && defer && dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) {
-                        // We're deciding to defer a needed dexopt. Don't bother dexopting for other
-                        // paths and instruction sets. We'll deal with them all together when we process
-                        // our list of deferred dexopts.
-                        addPackageForDeferredDexopt(pkg);
-                        return DEX_OPT_DEFERRED;
-                    }
+                if (!forceDex && defer && dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) {
+                    // We're deciding to defer a needed dexopt. Don't bother dexopting for other
+                    // paths and instruction sets. We'll deal with them all together when we process
+                    // our list of deferred dexopts.
+                    addPackageForDeferredDexopt(pkg);
+                    return DEX_OPT_DEFERRED;
+                }
 
-                    if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) {
-                        final String dexoptType;
-                        String oatDir = null;
-                        if (dexoptNeeded == DexFile.DEX2OAT_NEEDED) {
-                            dexoptType = "dex2oat";
+                if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) {
+                    final String dexoptType;
+                    String oatDir = null;
+                    if (dexoptNeeded == DexFile.DEX2OAT_NEEDED) {
+                        dexoptType = "dex2oat";
+                        try {
                             oatDir = createOatDirIfSupported(pkg, dexCodeInstructionSet);
-                        } else if (dexoptNeeded == DexFile.PATCHOAT_NEEDED) {
-                            dexoptType = "patchoat";
-                        } else if (dexoptNeeded == DexFile.SELF_PATCHOAT_NEEDED) {
-                            dexoptType = "self patchoat";
-                        } else {
-                            throw new IllegalStateException("Invalid dexopt needed: " + dexoptNeeded);
-                        }
-                        Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg="
-                                + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet
-                                + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable
-                                + " oatDir = " + oatDir);
-                        final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
-                        final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid,
-                                !pkg.isForwardLocked(), pkg.packageName, dexCodeInstructionSet,
-                                dexoptNeeded, vmSafeMode, debuggable, oatDir);
-                        if (ret < 0) {
+                        } catch (IOException ioe) {
+                            Slog.w(TAG, "Unable to create oatDir for package: " + pkg.packageName);
                             return DEX_OPT_FAILED;
                         }
+                    } else if (dexoptNeeded == DexFile.PATCHOAT_NEEDED) {
+                        dexoptType = "patchoat";
+                    } else if (dexoptNeeded == DexFile.SELF_PATCHOAT_NEEDED) {
+                        dexoptType = "self patchoat";
+                    } else {
+                        throw new IllegalStateException("Invalid dexopt needed: " + dexoptNeeded);
+                    }
+
+                    Log.i(TAG, "Running dexopt (" + dexoptType + ") on: " + path + " pkg="
+                            + pkg.applicationInfo.packageName + " isa=" + dexCodeInstructionSet
+                            + " vmSafeMode=" + vmSafeMode + " debuggable=" + debuggable
+                            + " oatDir = " + oatDir);
+                    final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
+                    final int ret = mPackageManagerService.mInstaller.dexopt(path, sharedGid,
+                            !pkg.isForwardLocked(), pkg.packageName, dexCodeInstructionSet,
+                            dexoptNeeded, vmSafeMode, debuggable, oatDir);
+
+                    // Dex2oat might fail due to compiler / verifier errors. We soldier on
+                    // regardless, and attempt to interpret the app as a safety net.
+                    if (ret == 0) {
                         performedDexOpt = true;
                     }
-                } catch (FileNotFoundException e) {
-                    Slog.w(TAG, "Apk not found for dexopt: " + path);
-                    return DEX_OPT_FAILED;
-                } catch (IOException e) {
-                    Slog.w(TAG, "IOException reading apk: " + path, e);
-                    return DEX_OPT_FAILED;
-                } catch (StaleDexCacheError e) {
-                    Slog.w(TAG, "StaleDexCacheError when reading apk: " + path, e);
-                    return DEX_OPT_FAILED;
-                } catch (Exception e) {
-                    Slog.w(TAG, "Exception when doing dexopt : ", e);
-                    return DEX_OPT_FAILED;
                 }
             }
 
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 11ab042..a120c1f 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -171,6 +171,7 @@
 import android.util.ExceptionUtils;
 import android.util.Log;
 import android.util.LogPrinter;
+import android.util.MathUtils;
 import android.util.PrintStreamPrinter;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -241,6 +242,8 @@
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
@@ -274,8 +277,6 @@
     private static final boolean DEBUG_DEXOPT = false;
     private static final boolean DEBUG_ABI_SELECTION = false;
 
-    static final boolean RUNTIME_PERMISSIONS_ENABLED = true;
-
     private static final int RADIO_UID = Process.PHONE_UID;
     private static final int LOG_UID = Process.LOG_UID;
     private static final int NFC_UID = Process.NFC_UID;
@@ -2128,13 +2129,6 @@
                     + "; regranting permissions for internal storage");
             mSettings.mInternalSdkPlatform = mSdkVersion;
 
-            // For now runtime permissions are toggled via a system property.
-            if (!RUNTIME_PERMISSIONS_ENABLED) {
-                // Remove the runtime permissions state if the feature
-                // was disabled by flipping the system property.
-                mSettings.deleteRuntimePermissionsFiles();
-            }
-
             updatePermissionsLPw(null, null, UPDATE_PERMISSIONS_ALL
                     | (regrantPermissions
                             ? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL)
@@ -2158,6 +2152,9 @@
                 mSettings.mFingerprint = Build.FINGERPRINT;
             }
 
+            primeDomainVerificationsLPw(false);
+            checkDefaultBrowser();
+
             // All the changes are done during package scanning.
             mSettings.updateInternalDatabaseVersion();
 
@@ -2175,8 +2172,6 @@
             mIntentFilterVerifier = new IntentVerifierProxy(mContext,
                     mIntentFilterVerifierComponent);
 
-            primeDomainVerificationsLPw(false);
-
         } // synchronized (mPackages)
         } // synchronized (mInstallLock)
 
@@ -2274,9 +2269,9 @@
     }
 
     private void primeDomainVerificationsLPw(boolean logging) {
-        Slog.d(TAG, "Start priming domain verification");
+        Slog.d(TAG, "Start priming domain verifications");
         boolean updated = false;
-        ArrayList<String> allHosts = new ArrayList<>();
+        ArraySet<String> allHostsSet = new ArraySet<>();
         for (PackageParser.Package pkg : mPackages.values()) {
             final String packageName = pkg.packageName;
             if (!hasDomainURLs(pkg)) {
@@ -2296,18 +2291,20 @@
             for (PackageParser.Activity a : pkg.activities) {
                 for (ActivityIntentInfo filter : a.intents) {
                     if (hasValidDomains(filter, false)) {
-                        allHosts.addAll(filter.getHostsList());
+                        allHostsSet.addAll(filter.getHostsList());
                     }
                 }
             }
-            if (allHosts.size() == 0) {
-                allHosts.add("*");
+            if (allHostsSet.size() == 0) {
+                allHostsSet.add("*");
             }
+            ArrayList<String> allHostsList = new ArrayList<>(allHostsSet);
             IntentFilterVerificationInfo ivi =
-                    mSettings.createIntentFilterVerificationIfNeededLPw(packageName, allHosts);
+                    mSettings.createIntentFilterVerificationIfNeededLPw(packageName, allHostsList);
             if (ivi != null) {
                 // We will always log this
-                Slog.d(TAG, "Priming domain verifications for package: " + packageName);
+                Slog.d(TAG, "Priming domain verifications for package: " + packageName +
+                        " with hosts:" + ivi.getDomainsString());
                 ivi.setStatus(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS);
                 updated = true;
             }
@@ -2316,12 +2313,25 @@
                     Slog.d(TAG, "No priming domain verifications for package: " + packageName);
                 }
             }
-            allHosts.clear();
+            allHostsSet.clear();
         }
         if (updated) {
-            scheduleWriteSettingsLocked();
+            if (logging) {
+                Slog.d(TAG, "Will need to write primed domain verifications");
+            }
         }
-        Slog.d(TAG, "End priming domain verification");
+        Slog.d(TAG, "End priming domain verifications");
+    }
+
+    private void checkDefaultBrowser() {
+        final int myUserId = UserHandle.myUserId();
+        final String packageName = getDefaultBrowserPackageName(myUserId);
+        PackageInfo info = getPackageInfo(packageName, 0, myUserId);
+        if (info == null) {
+            Slog.w(TAG, "Clearing default Browser as its package is no more installed: " +
+                    packageName);
+            setDefaultBrowserPackageName(null, myUserId);
+        }
     }
 
     @Override
@@ -3130,13 +3140,9 @@
     }
 
     @Override
-    public boolean grantPermission(String packageName, String name, int userId) {
-        if (!RUNTIME_PERMISSIONS_ENABLED) {
-            return false;
-        }
-
+    public void grantPermission(String packageName, String name, int userId) {
         if (!sUserManager.exists(userId)) {
-            return false;
+            return;
         }
 
         mContext.enforceCallingOrSelfPermission(
@@ -3172,12 +3178,13 @@
             final int result = permissionsState.grantRuntimePermission(bp, userId);
             switch (result) {
                 case PermissionsState.PERMISSION_OPERATION_FAILURE: {
-                    return false;
+                    return;
                 }
 
                 case PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED: {
                     gidsChanged = true;
-                } break;
+                }
+                break;
             }
 
             // Not critical if that is lost - app has to request again.
@@ -3187,18 +3194,12 @@
         if (gidsChanged) {
             killSettingPackagesForUser(sb, userId, KILL_APP_REASON_GIDS_CHANGED);
         }
-
-        return true;
     }
 
     @Override
-    public boolean revokePermission(String packageName, String name, int userId) {
-        if (!RUNTIME_PERMISSIONS_ENABLED) {
-            return false;
-        }
-
+    public void revokePermission(String packageName, String name, int userId) {
         if (!sUserManager.exists(userId)) {
-            return false;
+            return;
         }
 
         mContext.enforceCallingOrSelfPermission(
@@ -3232,7 +3233,7 @@
 
             if (permissionsState.revokeRuntimePermission(bp, userId) ==
                     PermissionsState.PERMISSION_OPERATION_FAILURE) {
-                return false;
+                return;
             }
 
             // Critical, after this call all should never have the permission.
@@ -3240,8 +3241,6 @@
         }
 
         killSettingPackagesForUser(sb, userId, KILL_APP_REASON_PERMISSIONS_REVOKED);
-
-        return true;
     }
 
     @Override
@@ -5049,8 +5048,7 @@
                             + " better than installed " + ps.versionCode);
 
                     InstallArgs args = createInstallArgsForExisting(packageFlagsToInstallFlags(ps),
-                            ps.codePathString, ps.resourcePathString, ps.legacyNativeLibraryPathString,
-                            getAppDexInstructionSets(ps));
+                            ps.codePathString, ps.resourcePathString, getAppDexInstructionSets(ps));
                     synchronized (mInstallLock) {
                         args.cleanUpResourcesLI();
                     }
@@ -5116,8 +5114,7 @@
                             + " reverting from " + ps.codePathString + ": new version "
                             + pkg.mVersionCode + " better than installed " + ps.versionCode);
                     InstallArgs args = createInstallArgsForExisting(packageFlagsToInstallFlags(ps),
-                            ps.codePathString, ps.resourcePathString, ps.legacyNativeLibraryPathString,
-                            getAppDexInstructionSets(ps));
+                            ps.codePathString, ps.resourcePathString, getAppDexInstructionSets(ps));
                     synchronized (mInstallLock) {
                         args.cleanUpResourcesLI();
                     }
@@ -7587,9 +7584,7 @@
                 } break;
 
                 case PermissionInfo.PROTECTION_DANGEROUS: {
-                    if (!RUNTIME_PERMISSIONS_ENABLED
-                            || pkg.applicationInfo.targetSdkVersion
-                                    <= Build.VERSION_CODES.LOLLIPOP_MR1) {
+                    if (pkg.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.LOLLIPOP_MR1) {
                         // For legacy apps dangerous permissions are install time ones.
                         grant = GRANT_INSTALL;
                     } else if (ps.isSystem()) {
@@ -7728,10 +7723,8 @@
         ps.setPermissionsUpdatedForUserIds(currentUserIds);
 
         // Persist the runtime permissions state for users with changes.
-        if (RUNTIME_PERMISSIONS_ENABLED) {
-            for (int userId : changedRuntimePermissionUserIds) {
-                mSettings.writeRuntimePermissionsForUserLPr(userId, true);
-            }
+        for (int userId : changedRuntimePermissionUserIds) {
+            mSettings.writeRuntimePermissionsForUserLPr(userId, true);
         }
     }
 
@@ -8499,46 +8492,53 @@
         }
     };
 
-    static final void sendPackageBroadcast(String action, String pkg,
-            Bundle extras, String targetPkg, IIntentReceiver finishedReceiver,
-            int[] userIds) {
-        IActivityManager am = ActivityManagerNative.getDefault();
-        if (am != null) {
-            try {
-                if (userIds == null) {
-                    userIds = am.getRunningUserIds();
+    final void sendPackageBroadcast(final String action, final String pkg,
+            final Bundle extras, final String targetPkg, final IIntentReceiver finishedReceiver,
+            final int[] userIds) {
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    final IActivityManager am = ActivityManagerNative.getDefault();
+                    if (am == null) return;
+                    final int[] resolvedUserIds;
+                    if (userIds == null) {
+                        resolvedUserIds = am.getRunningUserIds();
+                    } else {
+                        resolvedUserIds = userIds;
+                    }
+                    for (int id : resolvedUserIds) {
+                        final Intent intent = new Intent(action,
+                                pkg != null ? Uri.fromParts("package", pkg, null) : null);
+                        if (extras != null) {
+                            intent.putExtras(extras);
+                        }
+                        if (targetPkg != null) {
+                            intent.setPackage(targetPkg);
+                        }
+                        // Modify the UID when posting to other users
+                        int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
+                        if (uid > 0 && UserHandle.getUserId(uid) != id) {
+                            uid = UserHandle.getUid(id, UserHandle.getAppId(uid));
+                            intent.putExtra(Intent.EXTRA_UID, uid);
+                        }
+                        intent.putExtra(Intent.EXTRA_USER_HANDLE, id);
+                        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+                        if (DEBUG_BROADCASTS) {
+                            RuntimeException here = new RuntimeException("here");
+                            here.fillInStackTrace();
+                            Slog.d(TAG, "Sending to user " + id + ": "
+                                    + intent.toShortString(false, true, false, false)
+                                    + " " + intent.getExtras(), here);
+                        }
+                        am.broadcastIntent(null, intent, null, finishedReceiver,
+                                0, null, null, null, android.app.AppOpsManager.OP_NONE,
+                                finishedReceiver != null, false, id);
+                    }
+                } catch (RemoteException ex) {
                 }
-                for (int id : userIds) {
-                    final Intent intent = new Intent(action,
-                            pkg != null ? Uri.fromParts("package", pkg, null) : null);
-                    if (extras != null) {
-                        intent.putExtras(extras);
-                    }
-                    if (targetPkg != null) {
-                        intent.setPackage(targetPkg);
-                    }
-                    // Modify the UID when posting to other users
-                    int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
-                    if (uid > 0 && UserHandle.getUserId(uid) != id) {
-                        uid = UserHandle.getUid(id, UserHandle.getAppId(uid));
-                        intent.putExtra(Intent.EXTRA_UID, uid);
-                    }
-                    intent.putExtra(Intent.EXTRA_USER_HANDLE, id);
-                    intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-                    if (DEBUG_BROADCASTS) {
-                        RuntimeException here = new RuntimeException("here");
-                        here.fillInStackTrace();
-                        Slog.d(TAG, "Sending to user " + id + ": "
-                                + intent.toShortString(false, true, false, false)
-                                + " " + intent.getExtras(), here);
-                    }
-                    am.broadcastIntent(null, intent, null, finishedReceiver,
-                            0, null, null, null, android.app.AppOpsManager.OP_NONE,
-                            finishedReceiver != null, false, id);
-                }
-            } catch (RemoteException ex) {
             }
-        }
+        });
     }
 
     /**
@@ -8665,8 +8665,8 @@
         final OriginInfo origin = OriginInfo.fromUntrustedFile(originFile);
 
         final Message msg = mHandler.obtainMessage(INIT_COPY);
-        msg.obj = new InstallParams(origin, observer, installFlags,
-                installerPackageName, null, verificationParams, user, packageAbiOverride);
+        msg.obj = new InstallParams(origin, null, observer, installFlags, installerPackageName,
+                null, verificationParams, user, packageAbiOverride);
         mHandler.sendMessage(msg);
     }
 
@@ -8684,7 +8684,7 @@
         }
 
         final Message msg = mHandler.obtainMessage(INIT_COPY);
-        msg.obj = new InstallParams(origin, observer, params.installFlags,
+        msg.obj = new InstallParams(origin, null, observer, params.installFlags,
                 installerPackageName, params.volumeUuid, verifParams, user, params.abiOverride);
         mHandler.sendMessage(msg);
     }
@@ -9137,7 +9137,11 @@
     @Override
     public boolean setDefaultBrowserPackageName(String packageName, int userId) {
         synchronized (mPackages) {
-            return mSettings.setDefaultBrowserPackageNameLPr(packageName, userId);
+            boolean result = mSettings.setDefaultBrowserPackageNameLPr(packageName, userId);
+            result |= updateIntentVerificationStatus(packageName,
+                    PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS,
+                    UserHandle.myUserId());
+            return result;
         }
     }
 
@@ -9517,8 +9521,30 @@
         }
     }
 
+    class MoveInfo {
+        final int moveId;
+        final String fromUuid;
+        final String toUuid;
+        final String packageName;
+        final String dataAppName;
+        final int appId;
+        final String seinfo;
+
+        public MoveInfo(int moveId, String fromUuid, String toUuid, String packageName,
+                String dataAppName, int appId, String seinfo) {
+            this.moveId = moveId;
+            this.fromUuid = fromUuid;
+            this.toUuid = toUuid;
+            this.packageName = packageName;
+            this.dataAppName = dataAppName;
+            this.appId = appId;
+            this.seinfo = seinfo;
+        }
+    }
+
     class InstallParams extends HandlerParams {
         final OriginInfo origin;
+        final MoveInfo move;
         final IPackageInstallObserver2 observer;
         int installFlags;
         final String installerPackageName;
@@ -9528,11 +9554,12 @@
         private int mRet;
         final String packageAbiOverride;
 
-        InstallParams(OriginInfo origin, IPackageInstallObserver2 observer, int installFlags,
-                String installerPackageName, String volumeUuid,
+        InstallParams(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer,
+                int installFlags, String installerPackageName, String volumeUuid,
                 VerificationParams verificationParams, UserHandle user, String packageAbiOverride) {
             super(user);
             this.origin = origin;
+            this.move = move;
             this.observer = observer;
             this.installFlags = installFlags;
             this.installerPackageName = installerPackageName;
@@ -9911,7 +9938,9 @@
     }
 
     private InstallArgs createInstallArgs(InstallParams params) {
-        if (installOnExternalAsec(params.installFlags) || params.isForwardLocked()) {
+        if (params.move != null) {
+            return new MoveInstallArgs(params);
+        } else if (installOnExternalAsec(params.installFlags) || params.isForwardLocked()) {
             return new AsecInstallArgs(params);
         } else {
             return new FileInstallArgs(params);
@@ -9923,7 +9952,7 @@
      * when cleaning up old installs, or used as a move source.
      */
     private InstallArgs createInstallArgsForExisting(int installFlags, String codePath,
-            String resourcePath, String nativeLibraryRoot, String[] instructionSets) {
+            String resourcePath, String[] instructionSets) {
         final boolean isInAsec;
         if (installOnExternalAsec(installFlags)) {
             /* Apps on SD card are always in ASEC containers. */
@@ -9943,14 +9972,15 @@
             return new AsecInstallArgs(codePath, instructionSets,
                     installOnExternalAsec(installFlags), installForwardLocked(installFlags));
         } else {
-            return new FileInstallArgs(codePath, resourcePath, nativeLibraryRoot,
-                    instructionSets);
+            return new FileInstallArgs(codePath, resourcePath, instructionSets);
         }
     }
 
     static abstract class InstallArgs {
         /** @see InstallParams#origin */
         final OriginInfo origin;
+        /** @see InstallParams#move */
+        final MoveInfo move;
 
         final IPackageInstallObserver2 observer;
         // Always refers to PackageManager flags only
@@ -9966,10 +9996,12 @@
         // if we move dex files under the common app path.
         /* nullable */ String[] instructionSets;
 
-        InstallArgs(OriginInfo origin, IPackageInstallObserver2 observer, int installFlags,
-                String installerPackageName, String volumeUuid, ManifestDigest manifestDigest,
-                UserHandle user, String[] instructionSets, String abiOverride) {
+        InstallArgs(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer,
+                int installFlags, String installerPackageName, String volumeUuid,
+                ManifestDigest manifestDigest, UserHandle user, String[] instructionSets,
+                String abiOverride) {
             this.origin = origin;
+            this.move = move;
             this.installFlags = installFlags;
             this.observer = observer;
             this.installerPackageName = installerPackageName;
@@ -9994,12 +10026,10 @@
         abstract String getCodePath();
         /** @see PackageSettingBase#resourcePathString */
         abstract String getResourcePath();
-        abstract String getLegacyNativeLibraryPath();
 
         // Need installer lock especially for dex file removal.
         abstract void cleanUpResourcesLI();
         abstract boolean doPostDeleteLI(boolean delete);
-        abstract boolean checkFreeStorage(IMediaContainerService imcs) throws RemoteException;
 
         /**
          * Called before the source arguments are copied. This is used mostly
@@ -10060,7 +10090,6 @@
     class FileInstallArgs extends InstallArgs {
         private File codeFile;
         private File resourceFile;
-        private File legacyNativeLibraryPath;
 
         // Example topology:
         // /data/app/com.example/base.apk
@@ -10071,7 +10100,7 @@
 
         /** New install */
         FileInstallArgs(InstallParams params) {
-            super(params.origin, params.observer, params.installFlags,
+            super(params.origin, params.move, params.observer, params.installFlags,
                     params.installerPackageName, params.volumeUuid, params.getManifestDigest(),
                     params.getUser(), null /* instruction sets */, params.packageAbiOverride);
             if (isFwdLocked()) {
@@ -10080,21 +10109,11 @@
         }
 
         /** Existing install */
-        FileInstallArgs(String codePath, String resourcePath, String legacyNativeLibraryPath,
-                String[] instructionSets) {
-            super(OriginInfo.fromNothing(), null, 0, null, null, null, null, instructionSets, null);
+        FileInstallArgs(String codePath, String resourcePath, String[] instructionSets) {
+            super(OriginInfo.fromNothing(), null, null, 0, null, null, null, null, instructionSets,
+                    null);
             this.codeFile = (codePath != null) ? new File(codePath) : null;
             this.resourceFile = (resourcePath != null) ? new File(resourcePath) : null;
-            this.legacyNativeLibraryPath = (legacyNativeLibraryPath != null) ?
-                    new File(legacyNativeLibraryPath) : null;
-        }
-
-        boolean checkFreeStorage(IMediaContainerService imcs) throws RemoteException {
-            final long sizeBytes = imcs.calculateInstalledSize(origin.file.getAbsolutePath(),
-                    isFwdLocked(), abiOverride);
-
-            final StorageManager storage = StorageManager.from(mContext);
-            return (sizeBytes <= storage.getStorageBytesUntilLow(Environment.getDataDirectory()));
         }
 
         int copyApk(IMediaContainerService imcs, boolean temp) throws RemoteException {
@@ -10166,46 +10185,46 @@
             if (status != PackageManager.INSTALL_SUCCEEDED) {
                 cleanUp();
                 return false;
-            } else {
-                final File targetDir = codeFile.getParentFile();
-                final File beforeCodeFile = codeFile;
-                final File afterCodeFile = getNextCodePath(targetDir, pkg.packageName);
-
-                Slog.d(TAG, "Renaming " + beforeCodeFile + " to " + afterCodeFile);
-                try {
-                    Os.rename(beforeCodeFile.getAbsolutePath(), afterCodeFile.getAbsolutePath());
-                } catch (ErrnoException e) {
-                    Slog.d(TAG, "Failed to rename", e);
-                    return false;
-                }
-
-                if (!SELinux.restoreconRecursive(afterCodeFile)) {
-                    Slog.d(TAG, "Failed to restorecon");
-                    return false;
-                }
-
-                // Reflect the rename internally
-                codeFile = afterCodeFile;
-                resourceFile = afterCodeFile;
-
-                // Reflect the rename in scanned details
-                pkg.codePath = afterCodeFile.getAbsolutePath();
-                pkg.baseCodePath = FileUtils.rewriteAfterRename(beforeCodeFile, afterCodeFile,
-                        pkg.baseCodePath);
-                pkg.splitCodePaths = FileUtils.rewriteAfterRename(beforeCodeFile, afterCodeFile,
-                        pkg.splitCodePaths);
-
-                // Reflect the rename in app info
-                pkg.applicationInfo.volumeUuid = pkg.volumeUuid;
-                pkg.applicationInfo.setCodePath(pkg.codePath);
-                pkg.applicationInfo.setBaseCodePath(pkg.baseCodePath);
-                pkg.applicationInfo.setSplitCodePaths(pkg.splitCodePaths);
-                pkg.applicationInfo.setResourcePath(pkg.codePath);
-                pkg.applicationInfo.setBaseResourcePath(pkg.baseCodePath);
-                pkg.applicationInfo.setSplitResourcePaths(pkg.splitCodePaths);
-
-                return true;
             }
+
+            final File targetDir = codeFile.getParentFile();
+            final File beforeCodeFile = codeFile;
+            final File afterCodeFile = getNextCodePath(targetDir, pkg.packageName);
+
+            Slog.d(TAG, "Renaming " + beforeCodeFile + " to " + afterCodeFile);
+            try {
+                Os.rename(beforeCodeFile.getAbsolutePath(), afterCodeFile.getAbsolutePath());
+            } catch (ErrnoException e) {
+                Slog.d(TAG, "Failed to rename", e);
+                return false;
+            }
+
+            if (!SELinux.restoreconRecursive(afterCodeFile)) {
+                Slog.d(TAG, "Failed to restorecon");
+                return false;
+            }
+
+            // Reflect the rename internally
+            codeFile = afterCodeFile;
+            resourceFile = afterCodeFile;
+
+            // Reflect the rename in scanned details
+            pkg.codePath = afterCodeFile.getAbsolutePath();
+            pkg.baseCodePath = FileUtils.rewriteAfterRename(beforeCodeFile, afterCodeFile,
+                    pkg.baseCodePath);
+            pkg.splitCodePaths = FileUtils.rewriteAfterRename(beforeCodeFile, afterCodeFile,
+                    pkg.splitCodePaths);
+
+            // Reflect the rename in app info
+            pkg.applicationInfo.volumeUuid = pkg.volumeUuid;
+            pkg.applicationInfo.setCodePath(pkg.codePath);
+            pkg.applicationInfo.setBaseCodePath(pkg.baseCodePath);
+            pkg.applicationInfo.setSplitCodePaths(pkg.splitCodePaths);
+            pkg.applicationInfo.setResourcePath(pkg.codePath);
+            pkg.applicationInfo.setBaseResourcePath(pkg.baseCodePath);
+            pkg.applicationInfo.setSplitResourcePaths(pkg.splitCodePaths);
+
+            return true;
         }
 
         int doPostInstall(int status, int uid) {
@@ -10225,11 +10244,6 @@
             return (resourceFile != null) ? resourceFile.getAbsolutePath() : null;
         }
 
-        @Override
-        String getLegacyNativeLibraryPath() {
-            return (legacyNativeLibraryPath != null) ? legacyNativeLibraryPath.getAbsolutePath() : null;
-        }
-
         private boolean cleanUp() {
             if (codeFile == null || !codeFile.exists()) {
                 return false;
@@ -10245,13 +10259,6 @@
                 resourceFile.delete();
             }
 
-            if (legacyNativeLibraryPath != null && !FileUtils.contains(codeFile, legacyNativeLibraryPath)) {
-                if (!FileUtils.deleteContents(legacyNativeLibraryPath)) {
-                    Slog.w(TAG, "Couldn't delete native library directory " + legacyNativeLibraryPath);
-                }
-                legacyNativeLibraryPath.delete();
-            }
-
             return true;
         }
 
@@ -10315,11 +10322,10 @@
         String cid;
         String packagePath;
         String resourcePath;
-        String legacyNativeLibraryDir;
 
         /** New install */
         AsecInstallArgs(InstallParams params) {
-            super(params.origin, params.observer, params.installFlags,
+            super(params.origin, params.move, params.observer, params.installFlags,
                     params.installerPackageName, params.volumeUuid, params.getManifestDigest(),
                     params.getUser(), null /* instruction sets */, params.packageAbiOverride);
         }
@@ -10327,7 +10333,7 @@
         /** Existing install */
         AsecInstallArgs(String fullCodePath, String[] instructionSets,
                         boolean isExternal, boolean isForwardLocked) {
-            super(OriginInfo.fromNothing(), null, (isExternal ? INSTALL_EXTERNAL : 0)
+            super(OriginInfo.fromNothing(), null, null, (isExternal ? INSTALL_EXTERNAL : 0)
                     | (isForwardLocked ? INSTALL_FORWARD_LOCK : 0), null, null, null, null,
                     instructionSets, null);
             // Hackily pretend we're still looking at a full code path
@@ -10344,7 +10350,7 @@
         }
 
         AsecInstallArgs(String cid, String[] instructionSets, boolean isForwardLocked) {
-            super(OriginInfo.fromNothing(), null, (isAsecExternal(cid) ? INSTALL_EXTERNAL : 0)
+            super(OriginInfo.fromNothing(), null, null, (isAsecExternal(cid) ? INSTALL_EXTERNAL : 0)
                     | (isForwardLocked ? INSTALL_FORWARD_LOCK : 0), null, null, null, null,
                     instructionSets, null);
             this.cid = cid;
@@ -10355,21 +10361,6 @@
             cid = mInstallerService.allocateExternalStageCidLegacy();
         }
 
-        boolean checkFreeStorage(IMediaContainerService imcs) throws RemoteException {
-            final long sizeBytes = imcs.calculateInstalledSize(packagePath, isFwdLocked(),
-                    abiOverride);
-
-            final File target;
-            if (isExternalAsec()) {
-                target = new UserEnvironment(UserHandle.USER_OWNER).getExternalStorageDirectory();
-            } else {
-                target = Environment.getDataDirectory();
-            }
-
-            final StorageManager storage = StorageManager.from(mContext);
-            return (sizeBytes <= storage.getStorageBytesUntilLow(target));
-        }
-
         int copyApk(IMediaContainerService imcs, boolean temp) throws RemoteException {
             if (origin.staged) {
                 Slog.d(TAG, origin.cid + " already staged; skipping copy");
@@ -10410,11 +10401,6 @@
             return resourcePath;
         }
 
-        @Override
-        String getLegacyNativeLibraryPath() {
-            return legacyNativeLibraryDir;
-        }
-
         int doPreInstall(int status) {
             if (status != PackageManager.INSTALL_SUCCEEDED) {
                 // Destroy container
@@ -10513,8 +10499,6 @@
                 packagePath = mountFile.getAbsolutePath();
                 resourcePath = packagePath;
             }
-
-            legacyNativeLibraryDir = new File(mountFile, LIB_DIR_NAME).getAbsolutePath();
         }
 
         int doPostInstall(int status, int uid) {
@@ -10576,8 +10560,6 @@
             removeDexFiles(allCodePaths, instructionSets);
         }
 
-
-
         String getPackageName() {
             return getAsecPackageName(cid);
         }
@@ -10626,6 +10608,108 @@
         }
     }
 
+    /**
+     * Logic to handle movement of existing installed applications.
+     */
+    class MoveInstallArgs extends InstallArgs {
+        private File codeFile;
+        private File resourceFile;
+
+        /** New install */
+        MoveInstallArgs(InstallParams params) {
+            super(params.origin, params.move, params.observer, params.installFlags,
+                    params.installerPackageName, params.volumeUuid, params.getManifestDigest(),
+                    params.getUser(), null /* instruction sets */, params.packageAbiOverride);
+        }
+
+        int copyApk(IMediaContainerService imcs, boolean temp) {
+            Slog.d(TAG, "Moving " + move.packageName + " from " + move.fromUuid + " to "
+                    + move.toUuid);
+            synchronized (mInstaller) {
+                if (mInstaller.moveCompleteApp(move.fromUuid, move.toUuid, move.packageName,
+                        move.dataAppName, move.appId, move.seinfo) != 0) {
+                    return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+                }
+            }
+
+            codeFile = new File(Environment.getDataAppDirectory(move.toUuid), move.dataAppName);
+            resourceFile = codeFile;
+            Slog.d(TAG, "codeFile after move is " + codeFile);
+
+            return PackageManager.INSTALL_SUCCEEDED;
+        }
+
+        int doPreInstall(int status) {
+            if (status != PackageManager.INSTALL_SUCCEEDED) {
+                cleanUp();
+            }
+            return status;
+        }
+
+        boolean doRename(int status, PackageParser.Package pkg, String oldCodePath) {
+            if (status != PackageManager.INSTALL_SUCCEEDED) {
+                cleanUp();
+                return false;
+            }
+
+            // Reflect the move in app info
+            pkg.applicationInfo.volumeUuid = pkg.volumeUuid;
+            pkg.applicationInfo.setCodePath(pkg.codePath);
+            pkg.applicationInfo.setBaseCodePath(pkg.baseCodePath);
+            pkg.applicationInfo.setSplitCodePaths(pkg.splitCodePaths);
+            pkg.applicationInfo.setResourcePath(pkg.codePath);
+            pkg.applicationInfo.setBaseResourcePath(pkg.baseCodePath);
+            pkg.applicationInfo.setSplitResourcePaths(pkg.splitCodePaths);
+
+            return true;
+        }
+
+        int doPostInstall(int status, int uid) {
+            if (status != PackageManager.INSTALL_SUCCEEDED) {
+                cleanUp();
+            }
+            return status;
+        }
+
+        @Override
+        String getCodePath() {
+            return (codeFile != null) ? codeFile.getAbsolutePath() : null;
+        }
+
+        @Override
+        String getResourcePath() {
+            return (resourceFile != null) ? resourceFile.getAbsolutePath() : null;
+        }
+
+        private boolean cleanUp() {
+            if (codeFile == null || !codeFile.exists()) {
+                return false;
+            }
+
+            if (codeFile.isDirectory()) {
+                mInstaller.rmPackageDir(codeFile.getAbsolutePath());
+            } else {
+                codeFile.delete();
+            }
+
+            if (resourceFile != null && !FileUtils.contains(codeFile, resourceFile)) {
+                resourceFile.delete();
+            }
+
+            return true;
+        }
+
+        void cleanUpResourcesLI() {
+            cleanUp();
+        }
+
+        boolean doPostDeleteLI(boolean delete) {
+            // XXX err, shouldn't we respect the delete flag?
+            cleanUpResourcesLI();
+            return true;
+        }
+    }
+
     static String getAsecPackageName(String packageCid) {
         int idx = packageCid.lastIndexOf("-");
         if (idx == -1) {
@@ -11012,7 +11096,6 @@
                 res.removedInfo.args = createInstallArgsForExisting(0,
                         deletedPackage.applicationInfo.getCodePath(),
                         deletedPackage.applicationInfo.getResourcePath(),
-                        deletedPackage.applicationInfo.nativeLibraryRootDir,
                         getAppDexInstructionSets(deletedPackage.applicationInfo));
             } else {
                 res.removedInfo.args = null;
@@ -11320,8 +11403,10 @@
             return;
         }
 
-        // If app directory is not writable, dexopt will be called after the rename
-        if (!forwardLocked && !pkg.applicationInfo.isExternalAsec()) {
+        if (args.move != null) {
+            // We did an in-place move, so dex is ready to roll
+            scanFlags |= SCAN_NO_DEX;
+        } else if (!forwardLocked && !pkg.applicationInfo.isExternalAsec()) {
             // Enable SCAN_NO_DEX flag to skip dexopt at a later stage
             scanFlags |= SCAN_NO_DEX;
             // Run dexopt before old package gets removed, to minimize time when app is unavailable
@@ -11704,7 +11789,7 @@
         return res ? PackageManager.DELETE_SUCCEEDED : PackageManager.DELETE_FAILED_INTERNAL_ERROR;
     }
 
-    static class PackageRemovedInfo {
+    class PackageRemovedInfo {
         String removedPackage;
         int uid = -1;
         int removedAppId = -1;
@@ -11768,6 +11853,7 @@
         synchronized (mPackages) {
             if (deletedPs != null) {
                 if ((flags&PackageManager.DELETE_KEEP_DATA) == 0) {
+                    clearIntentFilterVerificationsLPw(deletedPs.name, UserHandle.USER_ALL);
                     if (outInfo != null) {
                         mSettings.mKeySetManagerService.removeAppKeySetDataLPw(packageName);
                         outInfo.removedAppId = mSettings.removePackageLPw(packageName);
@@ -11798,7 +11884,6 @@
                         }
                     }
                     clearPackagePreferredActivitiesLPw(deletedPs.name, UserHandle.USER_ALL);
-                    clearIntentFilterVerificationsLPw(deletedPs.name, UserHandle.USER_ALL);
                 }
                 // make sure to preserve per-user disabled state if this removal was just
                 // a downgrade of a system app to the factory package
@@ -11949,8 +12034,7 @@
         // Delete application code and resources
         if (deleteCodeAndResources && (outInfo != null)) {
             outInfo.args = createInstallArgsForExisting(packageFlagsToInstallFlags(ps),
-                    ps.codePathString, ps.resourcePathString, ps.legacyNativeLibraryPathString,
-                    getAppDexInstructionSets(ps));
+                    ps.codePathString, ps.resourcePathString, getAppDexInstructionSets(ps));
             if (DEBUG_SD_INSTALL) Slog.i(TAG, "args=" + outInfo.args);
         }
         return true;
@@ -12660,13 +12744,16 @@
     /** This method takes a specific user id as well as UserHandle.USER_ALL. */
     void clearIntentFilterVerificationsLPw(String packageName, int userId) {
         if (userId == UserHandle.USER_ALL) {
-            mSettings.removeIntentFilterVerificationLPw(packageName, sUserManager.getUserIds());
-            for (int oneUserId : sUserManager.getUserIds()) {
-                scheduleWritePackageRestrictionsLocked(oneUserId);
+            if (mSettings.removeIntentFilterVerificationLPw(packageName,
+                    sUserManager.getUserIds())) {
+                for (int oneUserId : sUserManager.getUserIds()) {
+                    scheduleWritePackageRestrictionsLocked(oneUserId);
+                }
             }
         } else {
-            mSettings.removeIntentFilterVerificationLPw(packageName, userId);
-            scheduleWritePackageRestrictionsLocked(userId);
+            if (mSettings.removeIntentFilterVerificationLPw(packageName, userId)) {
+                scheduleWritePackageRestrictionsLocked(userId);
+            }
         }
     }
 
@@ -13119,8 +13206,8 @@
         enforceCrossUserPermission(uid, userId, true, true, "stop package");
         // writer
         synchronized (mPackages) {
-            if (mSettings.setPackageStoppedStateLPw(packageName, stopped, allowedByPermission,
-                    uid, userId)) {
+            if (mSettings.setPackageStoppedStateLPw(this, packageName, stopped,
+                    allowedByPermission, uid, userId)) {
                 scheduleWritePackageRestrictionsLocked(userId);
             }
         }
@@ -14180,17 +14267,16 @@
     private void loadPrivatePackages(VolumeInfo vol) {
         final ArrayList<ApplicationInfo> loaded = new ArrayList<>();
         final int parseFlags = mDefParseFlags | PackageParser.PARSE_EXTERNAL_STORAGE;
+        synchronized (mInstallLock) {
         synchronized (mPackages) {
             final List<PackageSetting> packages = mSettings.getVolumePackagesLPr(vol.fsUuid);
             for (PackageSetting ps : packages) {
-                synchronized (mInstallLock) {
-                    final PackageParser.Package pkg;
-                    try {
-                        pkg = scanPackageLI(ps.codePath, parseFlags, 0, 0, null);
-                        loaded.add(pkg.applicationInfo);
-                    } catch (PackageManagerException e) {
-                        Slog.w(TAG, "Failed to scan " + ps.codePath + ": " + e.getMessage());
-                    }
+                final PackageParser.Package pkg;
+                try {
+                    pkg = scanPackageLI(ps.codePath, parseFlags, 0, 0, null);
+                    loaded.add(pkg.applicationInfo);
+                } catch (PackageManagerException e) {
+                    Slog.w(TAG, "Failed to scan " + ps.codePath + ": " + e.getMessage());
                 }
             }
 
@@ -14198,6 +14284,7 @@
 
             mSettings.writeLPr();
         }
+        }
 
         Slog.d(TAG, "Loaded packages " + loaded);
         sendResourcesChangedBroadcast(true, false, loaded, null);
@@ -14205,24 +14292,25 @@
 
     private void unloadPrivatePackages(VolumeInfo vol) {
         final ArrayList<ApplicationInfo> unloaded = new ArrayList<>();
+        synchronized (mInstallLock) {
         synchronized (mPackages) {
             final List<PackageSetting> packages = mSettings.getVolumePackagesLPr(vol.fsUuid);
             for (PackageSetting ps : packages) {
                 if (ps.pkg == null) continue;
-                synchronized (mInstallLock) {
-                    final ApplicationInfo info = ps.pkg.applicationInfo;
-                    final PackageRemovedInfo outInfo = new PackageRemovedInfo();
-                    if (deletePackageLI(ps.name, null, false, null, null,
-                            PackageManager.DELETE_KEEP_DATA, outInfo, false)) {
-                        unloaded.add(info);
-                    } else {
-                        Slog.w(TAG, "Failed to unload " + ps.codePath);
-                    }
+
+                final ApplicationInfo info = ps.pkg.applicationInfo;
+                final PackageRemovedInfo outInfo = new PackageRemovedInfo();
+                if (deletePackageLI(ps.name, null, false, null, null,
+                        PackageManager.DELETE_KEEP_DATA, outInfo, false)) {
+                    unloaded.add(info);
+                } else {
+                    Slog.w(TAG, "Failed to unload " + ps.codePath);
                 }
             }
 
             mSettings.writeLPr();
         }
+        }
 
         Slog.d(TAG, "Unloaded packages " + unloaded);
         sendResourcesChangedBroadcast(false, false, unloaded, null);
@@ -14255,6 +14343,7 @@
     private void movePackageInternal(final String packageName, final String volumeUuid,
             final int moveId) throws PackageManagerException {
         final UserHandle user = new UserHandle(UserHandle.getCallingUserId());
+        final StorageManager storage = mContext.getSystemService(StorageManager.class);
         final PackageManager pm = mContext.getPackageManager();
 
         final boolean currentAsec;
@@ -14284,11 +14373,17 @@
                         "Package already moved to " + volumeUuid);
             }
 
+            final File probe = new File(pkg.codePath);
+            final File probeOat = new File(probe, "oat");
+            if (!probe.isDirectory() || !probeOat.isDirectory()) {
+                throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
+                        "Move only supported for modern cluster style installs");
+            }
+
             if (ps.frozen) {
                 throw new PackageManagerException(MOVE_FAILED_OPERATION_PENDING,
                         "Failed to move already frozen package");
             }
-
             ps.frozen = true;
 
             currentAsec = pkg.applicationInfo.isForwardLocked()
@@ -14302,7 +14397,7 @@
             label = String.valueOf(pm.getApplicationLabel(pkg.applicationInfo));
         }
 
-        // Now that we're guarded by frozen state, kill app during upgrade
+        // Now that we're guarded by frozen state, kill app during move
         killApplication(packageName, appId, "move pkg");
 
         final Bundle extras = new Bundle();
@@ -14311,16 +14406,18 @@
         mMoveCallbacks.notifyCreated(moveId, extras);
 
         int installFlags;
-        final boolean moveData;
+        final boolean moveCompleteApp;
+        final File measurePath;
 
         if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, volumeUuid)) {
             installFlags = INSTALL_INTERNAL;
-            moveData = !currentAsec;
+            moveCompleteApp = !currentAsec;
+            measurePath = Environment.getDataAppDirectory(volumeUuid);
         } else if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, volumeUuid)) {
             installFlags = INSTALL_EXTERNAL;
-            moveData = false;
+            moveCompleteApp = false;
+            measurePath = storage.getPrimaryPhysicalVolume().getPath();
         } else {
-            final StorageManager storage = mContext.getSystemService(StorageManager.class);
             final VolumeInfo volume = storage.findVolumeByUuid(volumeUuid);
             if (volume == null || volume.getType() != VolumeInfo.TYPE_PRIVATE
                     || !volume.isMountedWritable()) {
@@ -14332,26 +14429,38 @@
             Preconditions.checkState(!currentAsec);
 
             installFlags = INSTALL_INTERNAL;
-            moveData = true;
+            moveCompleteApp = true;
+            measurePath = Environment.getDataAppDirectory(volumeUuid);
         }
 
-        Slog.d(TAG, "Moving " + packageName + " from " + currentVolumeUuid + " to " + volumeUuid);
-        mMoveCallbacks.notifyStatusChanged(moveId, 10);
-
-        if (moveData) {
-            synchronized (mInstallLock) {
-                // TODO: split this into separate copy and delete operations
-                if (mInstaller.moveUserDataDirs(currentVolumeUuid, volumeUuid, packageName, appId,
-                        seinfo) != 0) {
-                    unfreezePackage(packageName);
-                    throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
-                            "Failed to move private data to " + volumeUuid);
-                }
+        final PackageStats stats = new PackageStats(null, -1);
+        synchronized (mInstaller) {
+            if (!getPackageSizeInfoLI(packageName, -1, stats)) {
+                unfreezePackage(packageName);
+                throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
+                        "Failed to measure package size");
             }
         }
 
-        mMoveCallbacks.notifyStatusChanged(moveId, 50);
+        Slog.d(TAG, "Measured code size " + stats.codeSize + ", data size " + stats.dataSize);
 
+        final long startFreeBytes = measurePath.getFreeSpace();
+        final long sizeBytes;
+        if (moveCompleteApp) {
+            sizeBytes = stats.codeSize + stats.dataSize;
+        } else {
+            sizeBytes = stats.codeSize;
+        }
+
+        if (sizeBytes > storage.getStorageBytesUntilLow(measurePath)) {
+            unfreezePackage(packageName);
+            throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
+                    "Not enough free space to move");
+        }
+
+        mMoveCallbacks.notifyStatusChanged(moveId, 10);
+
+        final CountDownLatch installedLatch = new CountDownLatch(1);
         final IPackageInstallObserver2 installObserver = new IPackageInstallObserver2.Stub() {
             @Override
             public void onUserActionRequired(Intent intent) throws RemoteException {
@@ -14364,6 +14473,8 @@
                 Slog.d(TAG, "Install result for move: "
                         + PackageManager.installStatusToString(returnCode, msg));
 
+                installedLatch.countDown();
+
                 // Regardless of success or failure of the move operation,
                 // always unfreeze the package
                 unfreezePackage(packageName);
@@ -14386,13 +14497,40 @@
             }
         };
 
-        // Treat a move like reinstalling an existing app, which ensures that we
-        // process everythign uniformly, like unpacking native libraries.
+        final MoveInfo move;
+        if (moveCompleteApp) {
+            // Kick off a thread to report progress estimates
+            new Thread() {
+                @Override
+                public void run() {
+                    while (true) {
+                        try {
+                            if (installedLatch.await(1, TimeUnit.SECONDS)) {
+                                break;
+                            }
+                        } catch (InterruptedException ignored) {
+                        }
+
+                        final long deltaFreeBytes = startFreeBytes - measurePath.getFreeSpace();
+                        final int progress = 10 + (int) MathUtils.constrain(
+                                ((deltaFreeBytes * 80) / sizeBytes), 0, 80);
+                        mMoveCallbacks.notifyStatusChanged(moveId, progress);
+                    }
+                }
+            }.start();
+
+            final String dataAppName = codeFile.getName();
+            move = new MoveInfo(moveId, currentVolumeUuid, volumeUuid, packageName,
+                    dataAppName, appId, seinfo);
+        } else {
+            move = null;
+        }
+
         installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
 
         final Message msg = mHandler.obtainMessage(INIT_COPY);
         final OriginInfo origin = OriginInfo.fromExistingFile(codeFile);
-        msg.obj = new InstallParams(origin, installObserver, installFlags,
+        msg.obj = new InstallParams(origin, move, installObserver, installFlags,
                 installerPackageName, volumeUuid, null, user, packageAbiOverride);
         mHandler.sendMessage(msg);
     }
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index f9c248d..fd70ce1 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -985,6 +985,13 @@
         if (ivi == null) {
             ivi = new IntentFilterVerificationInfo(packageName, domains);
             ps.setIntentFilterVerificationInfo(ivi);
+            Slog.d(PackageManagerService.TAG,
+                    "Creating new IntentFilterVerificationInfo for packageName: " + packageName);
+        } else {
+            ivi.setDomains(domains);
+            Slog.d(PackageManagerService.TAG,
+                    "Setting domains to existing IntentFilterVerificationInfo for packageName: " +
+                            packageName + " and with domains: " + ivi.getDomainsString());
         }
         return ivi;
     }
@@ -1021,7 +1028,7 @@
 
         // 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().getDomainsSet();
+        ArraySet<String> currentDomains = current.getIntentFilterVerificationInfo().getDomains();
         if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) {
             for (PackageSetting ps : mPackages.values()) {
                 if (ps == null || ps.pkg.packageName.equals(packageName)) continue;
@@ -1029,7 +1036,7 @@
                 if (ivi == null) {
                     continue;
                 }
-                ArraySet<String> set = ivi.getDomainsSet();
+                ArraySet<String> set = ivi.getDomains();
                 set.retainAll(currentDomains);
                 if (set.size() > 0) {
                     ps.setDomainVerificationStatusForUser(
@@ -1060,19 +1067,22 @@
         return result;
     }
 
-    void removeIntentFilterVerificationLPw(String packageName, int userId) {
+    boolean removeIntentFilterVerificationLPw(String packageName, int userId) {
         PackageSetting ps = mPackages.get(packageName);
         if (ps == null) {
             Slog.w(PackageManagerService.TAG, "No package known for name: " + packageName);
-            return;
+            return false;
         }
         ps.clearDomainVerificationStatusForUser(userId);
+        return true;
     }
 
-    void removeIntentFilterVerificationLPw(String packageName, int[] userIds) {
+    boolean removeIntentFilterVerificationLPw(String packageName, int[] userIds) {
+        boolean result = false;
         for (int userId : userIds) {
-            removeIntentFilterVerificationLPw(packageName, userId);
+            result |= removeIntentFilterVerificationLPw(packageName, userId);
         }
+        return result;
     }
 
     boolean setDefaultBrowserPackageNameLPr(String packageName, int userId) {
@@ -3603,8 +3613,8 @@
         return pkg.getCurrentEnabledStateLPr(classNameStr, userId);
     }
 
-    boolean setPackageStoppedStateLPw(String packageName, boolean stopped,
-            boolean allowedByPermission, int uid, int userId) {
+    boolean setPackageStoppedStateLPw(PackageManagerService yucky, String packageName,
+            boolean stopped, boolean allowedByPermission, int uid, int userId) {
         int appId = UserHandle.getAppId(uid);
         final PackageSetting pkgSetting = mPackages.get(packageName);
         if (pkgSetting == null) {
@@ -3628,7 +3638,7 @@
             // pkgSetting.pkg.mSetStopped = stopped;
             if (pkgSetting.getNotLaunched(userId)) {
                 if (pkgSetting.installerPackageName != null) {
-                    PackageManagerService.sendPackageBroadcast(Intent.ACTION_PACKAGE_FIRST_LAUNCH,
+                    yucky.sendPackageBroadcast(Intent.ACTION_PACKAGE_FIRST_LAUNCH,
                             pkgSetting.name, null,
                             pkgSetting.installerPackageName, null, new int[] {userId});
                 }
@@ -4158,19 +4168,11 @@
         }
 
         public void writePermissionsForUserSyncLPr(int userId) {
-            if (!PackageManagerService.RUNTIME_PERMISSIONS_ENABLED) {
-                return;
-            }
-
             mHandler.removeMessages(userId);
             writePermissionsSync(userId);
         }
 
         public void writePermissionsForUserAsyncLPr(int userId) {
-            if (!PackageManagerService.RUNTIME_PERMISSIONS_ENABLED) {
-                return;
-            }
-
             final long currentTimeMillis = SystemClock.uptimeMillis();
 
             if (mWriteScheduled.get(userId)) {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index e79a2061..8dccfdf 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -50,6 +50,8 @@
 import android.util.TimeUtils;
 import android.util.Xml;
 
+import com.google.android.collect.Sets;
+
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.IAppOpsService;
 import com.android.internal.util.ArrayUtils;
@@ -68,11 +70,9 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 import libcore.io.IoUtils;
 
@@ -88,10 +88,6 @@
     private static final String ATTR_ID = "id";
     private static final String ATTR_CREATION_TIME = "created";
     private static final String ATTR_LAST_LOGGED_IN_TIME = "lastLoggedIn";
-    private static final String ATTR_SALT = "salt";
-    private static final String ATTR_PIN_HASH = "pinHash";
-    private static final String ATTR_FAILED_ATTEMPTS = "failedAttempts";
-    private static final String ATTR_LAST_RETRY_MS = "lastAttemptMs";
     private static final String ATTR_SERIAL_NO = "serialNumber";
     private static final String ATTR_NEXT_SERIAL_NO = "nextSerialNumber";
     private static final String ATTR_PARTIAL = "partial";
@@ -129,16 +125,13 @@
 
     private static final long EPOCH_PLUS_30_YEARS = 30L * 365 * 24 * 60 * 60 * 1000L; // ms
 
-    // Number of attempts before jumping to the next BACKOFF_TIMES slot
-    private static final int BACKOFF_INC_INTERVAL = 5;
-
     // Maximum number of managed profiles permitted is 1. This cannot be increased
     // without first making sure that the rest of the framework is prepared for it.
     private static final int MAX_MANAGED_PROFILES = 1;
 
-    // Amount of time to force the user to wait before entering the PIN again, after failing
-    // BACKOFF_INC_INTERVAL times.
-    private static final int[] BACKOFF_TIMES = { 0, 30*1000, 60*1000, 5*60*1000, 30*60*1000 };
+    // Set of user restrictions, which can only be enforced by the system
+    private static final Set<String> SYSTEM_CONTROLLED_RESTRICTIONS = Sets.newArraySet(
+            UserManager.DISALLOW_RECORD_AUDIO);
 
     static final int WRITE_USER_MSG = 1;
     static final int WRITE_USER_DELAY = 2*1000;  // 2 seconds
@@ -158,16 +151,6 @@
     private final SparseArray<Bundle> mUserRestrictions = new SparseArray<Bundle>();
     private final Bundle mGuestRestrictions = new Bundle();
 
-    class RestrictionsPinState {
-        long salt;
-        String pinHash;
-        int failedAttempts;
-        long lastAttemptTime;
-    }
-
-    private final SparseArray<RestrictionsPinState> mRestrictionsPinStates =
-            new SparseArray<RestrictionsPinState>();
-
     /**
      * Set of user IDs being actively removed. Removed IDs linger in this set
      * for several seconds to work around a VFS caching issue.
@@ -234,6 +217,14 @@
                 mUserListFile = new File(mUsersDir, USER_LIST_FILENAME);
                 initDefaultGuestRestrictions();
                 readUserListLocked();
+                sInstance = this;
+            }
+        }
+    }
+
+    void systemReady() {
+        synchronized (mInstallLock) {
+            synchronized (mPackagesLock) {
                 // Prune out any partially created/partially removed users.
                 ArrayList<UserInfo> partials = new ArrayList<UserInfo>();
                 for (int i = 0; i < mUsers.size(); i++) {
@@ -248,12 +239,8 @@
                             + " (name=" + ui.name + ")");
                     removeUserStateLocked(ui.id);
                 }
-                sInstance = this;
             }
         }
-    }
-
-    void systemReady() {
         userForeground(UserHandle.USER_OWNER);
         mAppOpsService = IAppOpsService.Stub.asInterface(
                 ServiceManager.getService(Context.APP_OPS_SERVICE));
@@ -520,7 +507,7 @@
     public boolean hasUserRestriction(String restrictionKey, int userId) {
         synchronized (mPackagesLock) {
             Bundle restrictions = mUserRestrictions.get(userId);
-            return restrictions != null ? restrictions.getBoolean(restrictionKey) : false;
+            return restrictions != null && restrictions.getBoolean(restrictionKey);
         }
     }
 
@@ -535,25 +522,59 @@
     }
 
     @Override
+    public void setUserRestriction(String key, boolean value, int userId) {
+        synchronized (mPackagesLock) {
+            if (!SYSTEM_CONTROLLED_RESTRICTIONS.contains(key)) {
+                Bundle restrictions = getUserRestrictions(userId);
+                restrictions.putBoolean(key, value);
+                setUserRestrictionsInternalLocked(restrictions, userId);
+            }
+        }
+    }
+
+    @Override
+    public void setSystemControlledUserRestriction(String key, boolean value, int userId) {
+        checkSystemOrRoot("setSystemControlledUserRestriction");
+        synchronized (mPackagesLock) {
+            Bundle restrictions = getUserRestrictions(userId);
+            restrictions.putBoolean(key, value);
+            setUserRestrictionsInternalLocked(restrictions, userId);
+        }
+    }
+
+    @Override
     public void setUserRestrictions(Bundle restrictions, int userId) {
         checkManageUsersPermission("setUserRestrictions");
         if (restrictions == null) return;
 
         synchronized (mPackagesLock) {
-            mUserRestrictions.get(userId).clear();
-            mUserRestrictions.get(userId).putAll(restrictions);
-            long token = Binder.clearCallingIdentity();
-            try {
-                mAppOpsService.setUserRestrictions(mUserRestrictions.get(userId), userId);
-            } catch (RemoteException e) {
-                Log.w(LOG_TAG, "Unable to notify AppOpsService of UserRestrictions");
-            } finally {
-                Binder.restoreCallingIdentity(token);
+            final Bundle oldUserRestrictions = mUserRestrictions.get(userId);
+            // Restore the original state of system controlled restrictions from oldUserRestrictions
+            for (String key : SYSTEM_CONTROLLED_RESTRICTIONS) {
+                restrictions.remove(key);
+                if (oldUserRestrictions.containsKey(key)) {
+                    restrictions.putBoolean(key, oldUserRestrictions.getBoolean(key));
+                }
             }
-            scheduleWriteUserLocked(mUsers.get(userId));
+            setUserRestrictionsInternalLocked(restrictions, userId);
         }
     }
 
+    private void setUserRestrictionsInternalLocked(Bundle restrictions, int userId) {
+        final Bundle userRestrictions = mUserRestrictions.get(userId);
+        userRestrictions.clear();
+        userRestrictions.putAll(restrictions);
+        long token = Binder.clearCallingIdentity();
+        try {
+        mAppOpsService.setUserRestrictions(userRestrictions, userId);
+        } catch (RemoteException e) {
+            Log.w(LOG_TAG, "Unable to notify AppOpsService of UserRestrictions");
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+        scheduleWriteUserLocked(mUsers.get(userId));
+    }
+
     /**
      * Check if we've hit the limit of how many users can be created.
      */
@@ -589,6 +610,13 @@
         }
     }
 
+    private static void checkSystemOrRoot(String message) {
+        final int uid = Binder.getCallingUid();
+        if (uid != Process.SYSTEM_UID && uid != 0) {
+            throw new SecurityException("Only system may call: " + message);
+        }
+    }
+
     private void writeBitmapLocked(UserInfo info, Bitmap bitmap) {
         try {
             File dir = new File(mUsersDir, Integer.toString(info.id));
@@ -806,21 +834,6 @@
             serializer.attribute(null, ATTR_CREATION_TIME, Long.toString(userInfo.creationTime));
             serializer.attribute(null, ATTR_LAST_LOGGED_IN_TIME,
                     Long.toString(userInfo.lastLoggedInTime));
-            RestrictionsPinState pinState = mRestrictionsPinStates.get(userInfo.id);
-            if (pinState != null) {
-                if (pinState.salt != 0) {
-                    serializer.attribute(null, ATTR_SALT, Long.toString(pinState.salt));
-                }
-                if (pinState.pinHash != null) {
-                    serializer.attribute(null, ATTR_PIN_HASH, pinState.pinHash);
-                }
-                if (pinState.failedAttempts != 0) {
-                    serializer.attribute(null, ATTR_FAILED_ATTEMPTS,
-                            Integer.toString(pinState.failedAttempts));
-                    serializer.attribute(null, ATTR_LAST_RETRY_MS,
-                            Long.toString(pinState.lastAttemptTime));
-                }
-            }
             if (userInfo.iconPath != null) {
                 serializer.attribute(null,  ATTR_ICON_PATH, userInfo.iconPath);
             }
@@ -940,11 +953,7 @@
         String iconPath = null;
         long creationTime = 0L;
         long lastLoggedInTime = 0L;
-        long salt = 0L;
-        String pinHash = null;
-        int failedAttempts = 0;
         int profileGroupId = UserInfo.NO_PROFILE_GROUP_ID;
-        long lastAttemptTime = 0L;
         boolean partial = false;
         boolean guestToRemove = false;
         Bundle restrictions = new Bundle();
@@ -978,10 +987,6 @@
                 iconPath = parser.getAttributeValue(null, ATTR_ICON_PATH);
                 creationTime = readLongAttribute(parser, ATTR_CREATION_TIME, 0);
                 lastLoggedInTime = readLongAttribute(parser, ATTR_LAST_LOGGED_IN_TIME, 0);
-                salt = readLongAttribute(parser, ATTR_SALT, 0L);
-                pinHash = parser.getAttributeValue(null, ATTR_PIN_HASH);
-                failedAttempts = readIntAttribute(parser, ATTR_FAILED_ATTEMPTS, 0);
-                lastAttemptTime = readLongAttribute(parser, ATTR_LAST_RETRY_MS, 0L);
                 profileGroupId = readIntAttribute(parser, ATTR_PROFILE_GROUP_ID,
                         UserInfo.NO_PROFILE_GROUP_ID);
                 String valueString = parser.getAttributeValue(null, ATTR_PARTIAL);
@@ -1019,17 +1024,6 @@
             userInfo.guestToRemove = guestToRemove;
             userInfo.profileGroupId = profileGroupId;
             mUserRestrictions.append(id, restrictions);
-            if (salt != 0L) {
-                RestrictionsPinState pinState = mRestrictionsPinStates.get(id);
-                if (pinState == null) {
-                    pinState = new RestrictionsPinState();
-                    mRestrictionsPinStates.put(id, pinState);
-                }
-                pinState.salt = salt;
-                pinState.pinHash = pinHash;
-                pinState.failedAttempts = failedAttempts;
-                pinState.lastAttemptTime = lastAttemptTime;
-            }
             return userInfo;
 
         } catch (IOException ioe) {
@@ -1431,8 +1425,6 @@
 
         // Remove this user from the list
         mUsers.remove(userHandle);
-
-        mRestrictionsPinStates.remove(userHandle);
         // Remove user file
         AtomicFile userFile = new AtomicFile(new File(mUsersDir, userHandle + XML_SUFFIX));
         userFile.delete();
@@ -1504,92 +1496,6 @@
     }
 
     @Override
-    public boolean setRestrictionsChallenge(String newPin) {
-        checkManageUsersPermission("Only system can modify the restrictions pin");
-        int userId = UserHandle.getCallingUserId();
-        synchronized (mPackagesLock) {
-            RestrictionsPinState pinState = mRestrictionsPinStates.get(userId);
-            if (pinState == null) {
-                pinState = new RestrictionsPinState();
-            }
-            if (newPin == null) {
-                pinState.salt = 0;
-                pinState.pinHash = null;
-            } else {
-                try {
-                    pinState.salt = SecureRandom.getInstance("SHA1PRNG").nextLong();
-                } catch (NoSuchAlgorithmException e) {
-                    pinState.salt = (long) (Math.random() * Long.MAX_VALUE);
-                }
-                pinState.pinHash = passwordToHash(newPin, pinState.salt);
-                pinState.failedAttempts = 0;
-            }
-            mRestrictionsPinStates.put(userId, pinState);
-            writeUserLocked(mUsers.get(userId));
-        }
-        return true;
-    }
-
-    @Override
-    public int checkRestrictionsChallenge(String pin) {
-        checkManageUsersPermission("Only system can verify the restrictions pin");
-        int userId = UserHandle.getCallingUserId();
-        synchronized (mPackagesLock) {
-            RestrictionsPinState pinState = mRestrictionsPinStates.get(userId);
-            // If there's no pin set, return error code
-            if (pinState == null || pinState.salt == 0 || pinState.pinHash == null) {
-                return UserManager.PIN_VERIFICATION_FAILED_NOT_SET;
-            } else if (pin == null) {
-                // If just checking if user can be prompted, return remaining time
-                int waitTime = getRemainingTimeForPinAttempt(pinState);
-                Slog.d(LOG_TAG, "Remaining waittime peek=" + waitTime);
-                return waitTime;
-            } else {
-                int waitTime = getRemainingTimeForPinAttempt(pinState);
-                Slog.d(LOG_TAG, "Remaining waittime=" + waitTime);
-                if (waitTime > 0) {
-                    return waitTime;
-                }
-                if (passwordToHash(pin, pinState.salt).equals(pinState.pinHash)) {
-                    pinState.failedAttempts = 0;
-                    scheduleWriteUserLocked(mUsers.get(userId));
-                    return UserManager.PIN_VERIFICATION_SUCCESS;
-                } else {
-                    pinState.failedAttempts++;
-                    pinState.lastAttemptTime = System.currentTimeMillis();
-                    scheduleWriteUserLocked(mUsers.get(userId));
-                    return waitTime;
-                }
-            }
-        }
-    }
-
-    private int getRemainingTimeForPinAttempt(RestrictionsPinState pinState) {
-        int backoffIndex = Math.min(pinState.failedAttempts / BACKOFF_INC_INTERVAL,
-                BACKOFF_TIMES.length - 1);
-        int backoffTime = (pinState.failedAttempts % BACKOFF_INC_INTERVAL) == 0 ?
-                BACKOFF_TIMES[backoffIndex] : 0;
-        return (int) Math.max(backoffTime + pinState.lastAttemptTime - System.currentTimeMillis(),
-                0);
-    }
-
-    @Override
-    public boolean hasRestrictionsChallenge() {
-        int userId = UserHandle.getCallingUserId();
-        synchronized (mPackagesLock) {
-            return hasRestrictionsPinLocked(userId);
-        }
-    }
-
-    private boolean hasRestrictionsPinLocked(int userId) {
-        RestrictionsPinState pinState = mRestrictionsPinStates.get(userId);
-        if (pinState == null || pinState.salt == 0 || pinState.pinHash == null) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
     public void removeRestrictions() {
         checkManageUsersPermission("Only system can remove restrictions");
         final int userHandle = UserHandle.getCallingUserId();
@@ -1600,8 +1506,6 @@
         synchronized (mPackagesLock) {
             // Remove all user restrictions
             setUserRestrictions(new Bundle(), userHandle);
-            // Remove restrictions pin
-            setRestrictionsChallenge(null);
             // Remove any app restrictions
             cleanAppRestrictions(userHandle);
         }
@@ -1633,42 +1537,6 @@
             }
         });
     }
-
-    /*
-     * Generate a hash for the given password. To avoid brute force attacks, we use a salted hash.
-     * Not the most secure, but it is at least a second level of protection. First level is that
-     * the file is in a location only readable by the system process.
-     * @param password the password.
-     * @param salt the randomly generated salt
-     * @return the hash of the pattern in a String.
-     */
-    private String passwordToHash(String password, long salt) {
-        if (password == null) {
-            return null;
-        }
-        String algo = null;
-        String hashed = salt + password;
-        try {
-            byte[] saltedPassword = (password + salt).getBytes();
-            byte[] sha1 = MessageDigest.getInstance(algo = "SHA-1").digest(saltedPassword);
-            byte[] md5 = MessageDigest.getInstance(algo = "MD5").digest(saltedPassword);
-            hashed = toHex(sha1) + toHex(md5);
-        } catch (NoSuchAlgorithmException e) {
-            Log.w(LOG_TAG, "Failed to encode string because of missing algorithm: " + algo);
-        }
-        return hashed;
-    }
-
-    private static String toHex(byte[] ary) {
-        final String hex = "0123456789ABCDEF";
-        String ret = "";
-        for (int i = 0; i < ary.length; i++) {
-            ret += hex.charAt((ary[i] >> 4) & 0xf);
-            ret += hex.charAt(ary[i] & 0xf);
-        }
-        return ret;
-    }
-
     private int getUidForPackage(String packageName) {
         long ident = Binder.clearCallingIdentity();
         try {
@@ -1954,11 +1822,6 @@
         return RESTRICTIONS_FILE_PREFIX + packageName + XML_SUFFIX;
     }
 
-    private String restrictionsFileNameToPackage(String fileName) {
-        return fileName.substring(RESTRICTIONS_FILE_PREFIX.length(),
-                (int) (fileName.length() - XML_SUFFIX.length()));
-    }
-
     @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 e972ec7..5877b3e 100644
--- a/services/core/java/com/android/server/policy/BarController.java
+++ b/services/core/java/com/android/server/policy/BarController.java
@@ -58,6 +58,9 @@
     private int mTransientBarState;
     private boolean mPendingShow;
     private long mLastTranslucent;
+    private boolean mShowTransparent;
+    private boolean mSetUnHideFlagWhenNextTransparent;
+    private boolean mNoAnimationOnNextShow;
 
     public BarController(String tag, int transientFlag, int unhideFlag, int translucentFlag,
             int statusBarManagerId, int translucentWmFlag) {
@@ -74,6 +77,14 @@
         mWin = win;
     }
 
+    public void setShowTransparent(boolean transparent) {
+        if (transparent != mShowTransparent) {
+            mShowTransparent = transparent;
+            mSetUnHideFlagWhenNextTransparent = transparent;
+            mNoAnimationOnNextShow = true;
+        }
+    }
+
     public void showTransient() {
         if (mWin != null) {
             setTransientBarState(TRANSIENT_BAR_SHOW_REQUESTED);
@@ -135,7 +146,9 @@
         }
         final boolean wasVis = mWin.isVisibleLw();
         final boolean wasAnim = mWin.isAnimatingLw();
-        final boolean change = show ? mWin.showLw(true) : mWin.hideLw(true);
+        final boolean change = show ? mWin.showLw(!mNoAnimationOnNextShow)
+                : mWin.hideLw(!mNoAnimationOnNextShow);
+        mNoAnimationOnNextShow = false;
         final int state = computeStateLw(wasVis, wasAnim, mWin, change);
         final boolean stateChanged = updateStateLw(state);
         return change || stateChanged;
@@ -233,6 +246,13 @@
                 setTransientBarState(TRANSIENT_BAR_NONE);  // request denied
             }
         }
+        if (mShowTransparent) {
+            vis |= View.SYSTEM_UI_TRANSPARENT;
+            if (mSetUnHideFlagWhenNextTransparent) {
+                vis |= mUnhideFlag;
+                mSetUnHideFlagWhenNextTransparent = false;
+            }
+        }
         if (mTransientBarState != TRANSIENT_BAR_NONE) {
             vis |= mTransientFlag;  // ignore clear requests until transition completes
             vis &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE;  // never show transient bars in low profile
diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java
index b431b33..3cee927 100644
--- a/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/services/core/java/com/android/server/policy/GlobalActions.java
@@ -1138,7 +1138,7 @@
 
         public GlobalActionsDialog(Context context, AlertParams params) {
             super(context, getDialogTheme(context));
-            mContext = context;
+            mContext = getContext();
             mAlert = new AlertController(mContext, this, getWindow());
             mAdapter = (MyAdapter) params.mAdapter;
             mWindowTouchSlop = ViewConfiguration.get(context).getScaledWindowTouchSlop();
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 5536d4d..185ef03 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -93,7 +93,7 @@
 import android.view.KeyCharacterMap.FallbackAction;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
-import android.view.PhoneWindow;
+import com.android.internal.policy.PhoneWindow;
 import android.view.Surface;
 import android.view.View;
 import android.view.ViewConfiguration;
@@ -285,6 +285,9 @@
     // Vibrator pattern for haptic feedback during boot when safe mode is enabled.
     long[] mSafeModeEnabledVibePattern;
 
+    // Vibrator pattern for haptic feedback of a stylus button press.
+    long[] mStylusButtonPressVibePattern;
+
     /** If true, hitting shift & menu will broadcast Intent.ACTION_BUG_REPORT */
     boolean mEnableShiftMenuBugReports = false;
 
@@ -473,6 +476,7 @@
     boolean mTopIsFullscreen;
     boolean mForceStatusBar;
     boolean mForceStatusBarFromKeyguard;
+    private boolean mForceStatusBarTransparent;
     boolean mHideLockScreen;
     boolean mForcingShowNavBar;
     int mForcingShowNavBarLayer;
@@ -1436,6 +1440,8 @@
                 com.android.internal.R.array.config_safeModeDisabledVibePattern);
         mSafeModeEnabledVibePattern = getLongIntArray(mContext.getResources(),
                 com.android.internal.R.array.config_safeModeEnabledVibePattern);
+        mStylusButtonPressVibePattern = getLongIntArray(mContext.getResources(),
+                com.android.internal.R.array.config_stylusButtonPressVibePattern);
 
         mScreenshotChordEnabled = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_enableScreenshotChord);
@@ -2668,6 +2674,17 @@
                 }
             }
             return -1;
+        } else if (keyCode == KeyEvent.KEYCODE_N && event.isMetaPressed()) {
+            if (down) {
+                IStatusBarService service = getStatusBarService();
+                if (service != null) {
+                    try {
+                        service.expandNotificationsPanel();
+                    } catch (RemoteException e) {
+                        // do nothing.
+                    }
+                }
+            }
         } else if (keyCode == KeyEvent.KEYCODE_ASSIST) {
             if (down) {
                 if (repeatCount == 0) {
@@ -4113,6 +4130,7 @@
         mAppsThatDismissKeyguard.clear();
         mForceStatusBar = false;
         mForceStatusBarFromKeyguard = false;
+        mForceStatusBarTransparent = false;
         mForcingShowNavBar = false;
         mForcingShowNavBarLayer = -1;
 
@@ -4138,8 +4156,13 @@
             mForcingShowNavBar = true;
             mForcingShowNavBarLayer = win.getSurfaceLayer();
         }
-        if (attrs.type == TYPE_STATUS_BAR && (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
-            mForceStatusBarFromKeyguard = true;
+        if (attrs.type == TYPE_STATUS_BAR) {
+            if ((attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
+                mForceStatusBarFromKeyguard = true;
+            }
+            if ((attrs.privateFlags & PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT) != 0) {
+                mForceStatusBarTransparent = true;
+            }
         }
 
         boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW
@@ -4286,7 +4309,15 @@
             if (DEBUG_LAYOUT) Slog.i(TAG, "force=" + mForceStatusBar
                     + " forcefkg=" + mForceStatusBarFromKeyguard
                     + " top=" + mTopFullscreenOpaqueWindowState);
-            if (mForceStatusBar || mForceStatusBarFromKeyguard) {
+            boolean shouldBeTransparent = mForceStatusBarTransparent
+                    && !mForceStatusBar
+                    && !mForceStatusBarFromKeyguard;
+            if (!shouldBeTransparent) {
+                mStatusBarController.setShowTransparent(false /* transparent */);
+            } else if (!mStatusBar.isVisibleLw()) {
+                mStatusBarController.setShowTransparent(true /* transparent */);
+            }
+            if (mForceStatusBar || mForceStatusBarFromKeyguard || mForceStatusBarTransparent) {
                 if (DEBUG_LAYOUT) Slog.v(TAG, "Showing status bar: forced");
                 if (mStatusBarController.setBarShowingLw(true)) {
                     changes |= FINISH_LAYOUT_REDO_LAYOUT;
@@ -6164,6 +6195,9 @@
             case HapticFeedbackConstants.SAFE_MODE_ENABLED:
                 pattern = mSafeModeEnabledVibePattern;
                 break;
+            case HapticFeedbackConstants.STYLUS_BUTTON_PRESS:
+                pattern = mStylusButtonPressVibePattern;
+                break;
             default:
                 return false;
         }
diff --git a/services/core/java/com/android/server/power/Notifier.java b/services/core/java/com/android/server/power/Notifier.java
index c48367e..fd98010 100644
--- a/services/core/java/com/android/server/power/Notifier.java
+++ b/services/core/java/com/android/server/power/Notifier.java
@@ -539,9 +539,11 @@
     };
 
     private void playWirelessChargingStartedSound() {
+        final boolean enabled = Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.CHARGING_SOUNDS_ENABLED, 1) != 0;
         final String soundPath = Settings.Global.getString(mContext.getContentResolver(),
                 Settings.Global.WIRELESS_CHARGING_STARTED_SOUND);
-        if (soundPath != null) {
+        if (enabled && soundPath != null) {
             final Uri soundUri = Uri.parse("file://" + soundPath);
             if (soundUri != null) {
                 final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index 1e0185da..84eab42 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -390,7 +390,7 @@
             }
         }
 
-        rebootOrShutdown(mReboot, mRebootReason);
+        rebootOrShutdown(mContext, mReboot, mRebootReason);
     }
 
     private void shutdownRadios(int timeout) {
@@ -507,17 +507,18 @@
      * Do not call this directly. Use {@link #reboot(Context, String, boolean)}
      * or {@link #shutdown(Context, boolean)} instead.
      *
+     * @param context Context used to vibrate or null without vibration
      * @param reboot true to reboot or false to shutdown
      * @param reason reason for reboot
      */
-    public static void rebootOrShutdown(boolean reboot, String reason) {
+    public static void rebootOrShutdown(final Context context, boolean reboot, String reason) {
         if (reboot) {
             Log.i(TAG, "Rebooting, reason: " + reason);
             PowerManagerService.lowLevelReboot(reason);
             Log.e(TAG, "Reboot failed, will attempt shutdown instead");
-        } else if (SHUTDOWN_VIBRATE_MS > 0) {
+        } else if (SHUTDOWN_VIBRATE_MS > 0 && context != null) {
             // vibrate before shutting down
-            Vibrator vibrator = new SystemVibrator();
+            Vibrator vibrator = new SystemVibrator(context);
             try {
                 vibrator.vibrate(SHUTDOWN_VIBRATE_MS, VIBRATION_ATTRIBUTES);
             } catch (Exception e) {
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index 7d2fb43..726db4e 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -227,7 +227,7 @@
             if (!userInfo.supportsSwitchTo()) continue;
             if (!mActivityManager.isUserRunning(userInfo.id)) continue;
             if (!lockPatternUtils.isSecure(userInfo.id)) continue;
-            if (!mUserHasAuthenticatedSinceBoot.get(userInfo.id)) continue;
+            if (!getUserHasAuthenticated(userInfo.id)) continue;
             DevicePolicyManager dpm = lockPatternUtils.getDevicePolicyManager();
             int disabledFeatures = dpm.getKeyguardDisabledFeatures(null, userInfo.id);
             final boolean disableTrustAgents =
@@ -506,7 +506,7 @@
     // Agent dispatch and aggregation
 
     private boolean aggregateIsTrusted(int userId) {
-        if (!mUserHasAuthenticatedSinceBoot.get(userId)) {
+        if (!getUserHasAuthenticated(userId)) {
             return false;
         }
         for (int i = 0; i < mActiveAgents.size(); i++) {
@@ -521,7 +521,7 @@
     }
 
     private boolean aggregateIsTrustManaged(int userId) {
-        if (!mUserHasAuthenticatedSinceBoot.get(userId)) {
+        if (!getUserHasAuthenticated(userId)) {
             return false;
         }
         for (int i = 0; i < mActiveAgents.size(); i++) {
@@ -549,21 +549,44 @@
     }
 
     private void updateUserHasAuthenticated(int userId) {
-        if (!mUserHasAuthenticatedSinceBoot.get(userId)) {
-            mUserHasAuthenticatedSinceBoot.put(userId, true);
+        boolean changed = setUserHasAuthenticated(userId);
+        if (changed) {
             refreshAgentList(userId);
         }
     }
 
+    private boolean getUserHasAuthenticated(int userId) {
+        synchronized (mUserHasAuthenticatedSinceBoot) {
+            return mUserHasAuthenticatedSinceBoot.get(userId);
+        }
+    }
+
+    /**
+     * @return whether the value has changed
+     */
+    private boolean setUserHasAuthenticated(int userId) {
+        synchronized (mUserHasAuthenticatedSinceBoot) {
+            if (!mUserHasAuthenticatedSinceBoot.get(userId)) {
+                mUserHasAuthenticatedSinceBoot.put(userId, true);
+                return true;
+            }
+            return false;
+        }
+    }
+
+    private void clearUserHasAuthenticated(int userId) {
+        synchronized (mUserHasAuthenticatedSinceBoot) {
+            if (userId == UserHandle.USER_ALL) {
+                mUserHasAuthenticatedSinceBoot.clear();
+            } else {
+                mUserHasAuthenticatedSinceBoot.put(userId, false);
+            }
+        }
+    }
 
     private void requireCredentialEntry(int userId) {
-        if (userId == UserHandle.USER_ALL) {
-            mUserHasAuthenticatedSinceBoot.clear();
-            refreshAgentList(UserHandle.USER_ALL);
-        } else {
-            mUserHasAuthenticatedSinceBoot.put(userId, false);
-            refreshAgentList(userId);
-        }
+        clearUserHasAuthenticated(userId);
+        refreshAgentList(userId);
     }
 
     // Listeners
@@ -705,6 +728,18 @@
             }
         }
 
+        @Override
+        public boolean hasUserAuthenticatedSinceBoot(int userId) throws RemoteException {
+            mContext.enforceCallingOrSelfPermission(
+                    Manifest.permission.ACCESS_KEYGUARD_SECURE_STORAGE, null);
+            long token = Binder.clearCallingIdentity();
+            try {
+                return getUserHasAuthenticated(userId);
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
+        }
+
         private void enforceReportPermission() {
             mContext.enforceCallingOrSelfPermission(
                     Manifest.permission.ACCESS_KEYGUARD_SECURE_STORAGE, "reporting trust events");
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index d4b3dab..6bf68e8 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -332,6 +332,7 @@
 
     final boolean mHasPermanentDpad;
     final long mDrawLockTimeoutMillis;
+    final boolean mAllowAnimationsInLowPowerMode;
 
     final boolean mAllowBootMessages;
 
@@ -899,6 +900,8 @@
                 com.android.internal.R.bool.config_defaultInTouchMode);
         mDrawLockTimeoutMillis = context.getResources().getInteger(
                 com.android.internal.R.integer.config_drawLockTimeoutMillis);
+        mAllowAnimationsInLowPowerMode = context.getResources().getBoolean(
+                com.android.internal.R.bool.config_allowAnimationsInLowPowerMode);
         mInputManager = inputManager; // Must be before createDisplayContentLocked.
         mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
         mDisplaySettings = new DisplaySettings();
@@ -924,7 +927,7 @@
             @Override
             public void onLowPowerModeChanged(boolean enabled) {
                 synchronized (mWindowMap) {
-                    if (mAnimationsDisabled != enabled) {
+                    if (mAnimationsDisabled != enabled && !mAllowAnimationsInLowPowerMode) {
                         mAnimationsDisabled = enabled;
                         dispatchNewAnimatorScaleLocked(null);
                     }
diff --git a/services/core/jni/com_android_server_AssetAtlasService.cpp b/services/core/jni/com_android_server_AssetAtlasService.cpp
index ad1d0f5..8f4fb51 100644
--- a/services/core/jni/com_android_server_AssetAtlasService.cpp
+++ b/services/core/jni/com_android_server_AssetAtlasService.cpp
@@ -64,7 +64,8 @@
 static jboolean com_android_server_AssetAtlasService_upload(JNIEnv* env, jobject,
         jobject graphicBuffer, jobject bitmapHandle) {
 
-    SkBitmap& bitmap = *GraphicsJNI::getSkBitmap(env, bitmapHandle);
+    SkBitmap bitmap;
+    GraphicsJNI::getSkBitmap(env, bitmapHandle, &bitmap);
     SkAutoLockPixels alp(bitmap);
 
     // The goal of this method is to copy the bitmap into the GraphicBuffer
diff --git a/services/core/jni/com_android_server_SystemServer.cpp b/services/core/jni/com_android_server_SystemServer.cpp
index c50d63c..64514a9 100644
--- a/services/core/jni/com_android_server_SystemServer.cpp
+++ b/services/core/jni/com_android_server_SystemServer.cpp
@@ -25,7 +25,7 @@
 
 namespace android {
 
-static void android_server_SystemServer_nativeInit(JNIEnv* /* env */, jobject /* clazz */) {
+static void android_server_SystemServer_startSensorService(JNIEnv* /* env */, jobject /* clazz */) {
     char propBuf[PROPERTY_VALUE_MAX];
     property_get("system_init.startsensorservice", propBuf, "1");
     if (strcmp(propBuf, "1") == 0) {
@@ -39,7 +39,7 @@
  */
 static JNINativeMethod gMethods[] = {
     /* name, signature, funcPtr */
-    { "nativeInit", "()V", (void*) android_server_SystemServer_nativeInit },
+    { "startSensorService", "()V", (void*) android_server_SystemServer_startSensorService },
 };
 
 int register_android_server_SystemServer(JNIEnv* env)
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index f801d2d..67c198f 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -161,7 +161,7 @@
 
     private static final String TAG_STATUS_BAR = "statusbar";
 
-    private static final String ATTR_ENABLED = "enabled";
+    private static final String ATTR_DISABLED = "disabled";
 
     private static final String DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML =
             "do-not-ask-credentials-on-boot";
@@ -313,7 +313,7 @@
         // This is the list of component allowed to start lock task mode.
         List<String> mLockTaskPackages = new ArrayList<>();
 
-        boolean mStatusBarEnabledState = true;
+        boolean mStatusBarDisabled = false;
 
         ComponentName mRestrictionsProvider;
 
@@ -1476,9 +1476,9 @@
                 out.endTag(null, TAG_LOCK_TASK_COMPONENTS);
             }
 
-            if (!policy.mStatusBarEnabledState) {
+            if (policy.mStatusBarDisabled) {
                 out.startTag(null, TAG_STATUS_BAR);
-                out.attribute(null, ATTR_ENABLED, Boolean.toString(policy.mStatusBarEnabledState));
+                out.attribute(null, ATTR_DISABLED, Boolean.toString(policy.mStatusBarDisabled));
                 out.endTag(null, TAG_STATUS_BAR);
             }
 
@@ -1615,8 +1615,8 @@
                 } else if (TAG_LOCK_TASK_COMPONENTS.equals(tag)) {
                     policy.mLockTaskPackages.add(parser.getAttributeValue(null, "name"));
                 } else if (TAG_STATUS_BAR.equals(tag)) {
-                    policy.mStatusBarEnabledState = Boolean.parseBoolean(
-                            parser.getAttributeValue(null, ATTR_ENABLED));
+                    policy.mStatusBarDisabled = Boolean.parseBoolean(
+                            parser.getAttributeValue(null, ATTR_DISABLED));
                 } else if (DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML.equals(tag)) {
                     policy.doNotAskCredentialsOnBoot = true;
                 } else {
@@ -1678,8 +1678,8 @@
         updateMaximumTimeToLockLocked(policy);
         addDeviceInitializerToLockTaskPackagesLocked(userHandle);
         updateLockTaskPackagesLocked(policy.mLockTaskPackages, userHandle);
-        if (!policy.mStatusBarEnabledState) {
-            setStatusBarEnabledStateInternal(policy.mStatusBarEnabledState, userHandle);
+        if (policy.mStatusBarDisabled) {
+            setStatusBarDisabledInternal(policy.mStatusBarDisabled, userHandle);
         }
         updatePreferredSetupActivityLocked(userHandle);
     }
@@ -2897,7 +2897,7 @@
 
         boolean callerIsDeviceOwnerAdmin = isCallerDeviceOwnerOrInitializer(callingUid);
         boolean doNotAskCredentialsOnBoot =
-                (flags & DevicePolicyManager.DO_NOT_ASK_CREDENTIALS_ON_BOOT) != 0;
+                (flags & DevicePolicyManager.RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT) != 0;
         if (callerIsDeviceOwnerAdmin && doNotAskCredentialsOnBoot) {
             setDoNotAskCredentialsOnBoot();
         }
@@ -4065,11 +4065,12 @@
         }
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
         synchronized (this) {
-            if (mDeviceOwner != null) {
-                return mDeviceOwner.getDeviceOwnerName();
+            if (mDeviceOwner == null || !mDeviceOwner.hasDeviceOwner()) {
+                return null;
             }
+            String deviceOwnerPackage = mDeviceOwner.getDeviceOwnerPackageName();
+            return getApplicationLabel(deviceOwnerPackage, UserHandle.USER_OWNER);
         }
-        return null;
     }
 
     // Returns the active device owner or null if there is no device owner.
@@ -4274,7 +4275,7 @@
             DevicePolicyData policy = getUserData(userId);
             policy.mPermissionPolicy = DevicePolicyManager.PERMISSION_POLICY_PROMPT;
             policy.mDelegatedCertInstallerPackage = null;
-            policy.mStatusBarEnabledState = true;
+            policy.mStatusBarDisabled = false;
             saveSettingsLocked(userId);
 
             long ident = Binder.clearCallingIdentity();
@@ -4426,7 +4427,6 @@
         if (profileOwner == null) {
             return null;
         }
-
         DevicePolicyData policy = getUserData(userHandle);
         final int n = policy.mAdminList.size();
         for (int i = 0; i < n; i++) {
@@ -4444,13 +4444,37 @@
             return null;
         }
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
-
-        synchronized (this) {
-            if (mDeviceOwner != null) {
-                return mDeviceOwner.getProfileOwnerName(userHandle);
-            }
+        ComponentName profileOwner = getProfileOwner(userHandle);
+        if (profileOwner == null) {
+            return null;
         }
-        return null;
+        return getApplicationLabel(profileOwner.getPackageName(), userHandle);
+    }
+
+    /**
+     * Canonical name for a given package.
+     */
+    private String getApplicationLabel(String packageName, int userHandle) {
+        long token = Binder.clearCallingIdentity();
+        try {
+            final Context userContext;
+            try {
+                UserHandle handle = new UserHandle(userHandle);
+                userContext = mContext.createPackageContextAsUser(packageName, 0, handle);
+            } catch (PackageManager.NameNotFoundException nnfe) {
+                Log.w(LOG_TAG, packageName + " is not installed for user " + userHandle, nnfe);
+                return null;
+            }
+            ApplicationInfo appInfo = userContext.getApplicationInfo();
+            CharSequence result = null;
+            if (appInfo != null) {
+                PackageManager pm = userContext.getPackageManager();
+                result = pm.getApplicationLabel(appInfo);
+            }
+            return result != null ? result.toString() : null;
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
     }
 
     /**
@@ -6002,7 +6026,7 @@
     }
 
     @Override
-    public boolean setKeyguardEnabledState(ComponentName who, boolean enabled) {
+    public boolean setKeyguardDisabled(ComponentName who, boolean disabled) {
         Preconditions.checkNotNull(who, "ComponentName is null");
         synchronized (this) {
             getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
@@ -6013,10 +6037,10 @@
         long ident = Binder.clearCallingIdentity();
         try {
             // disallow disabling the keyguard if a password is currently set
-            if (!enabled && utils.isSecure(userId)) {
+            if (disabled && utils.isSecure(userId)) {
                 return false;
             }
-            utils.setLockScreenDisabled(!enabled, userId);
+            utils.setLockScreenDisabled(disabled, userId);
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
@@ -6024,35 +6048,40 @@
     }
 
     @Override
-    public void setStatusBarEnabledState(ComponentName who, boolean enabled) {
+    public boolean setStatusBarDisabled(ComponentName who, boolean disabled) {
         int userId = UserHandle.getCallingUserId();
         synchronized (this) {
             getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
             DevicePolicyData policy = getUserData(userId);
-            if (policy.mStatusBarEnabledState != enabled) {
-                policy.mStatusBarEnabledState = enabled;
-                setStatusBarEnabledStateInternal(enabled, userId);
+            if (policy.mStatusBarDisabled != disabled) {
+                if (!setStatusBarDisabledInternal(disabled, userId)) {
+                    return false;
+                }
+                policy.mStatusBarDisabled = disabled;
                 saveSettingsLocked(userId);
             }
         }
+        return true;
     }
 
-    private void setStatusBarEnabledStateInternal(boolean enabled, int userId) {
+    private boolean setStatusBarDisabledInternal(boolean disabled, int userId) {
         long ident = Binder.clearCallingIdentity();
         try {
             IStatusBarService statusBarService = IStatusBarService.Stub.asInterface(
                     ServiceManager.checkService(Context.STATUS_BAR_SERVICE));
             if (statusBarService != null) {
-                int flags1 = enabled ? StatusBarManager.DISABLE_NONE : STATUS_BAR_DISABLE_MASK;
-                int flags2 = enabled ? StatusBarManager.DISABLE2_NONE : STATUS_BAR_DISABLE2_MASK;
+                int flags1 = disabled ? STATUS_BAR_DISABLE_MASK : StatusBarManager.DISABLE_NONE;
+                int flags2 = disabled ? STATUS_BAR_DISABLE2_MASK : StatusBarManager.DISABLE2_NONE;
                 statusBarService.disableForUser(flags1, mToken, mContext.getPackageName(), userId);
                 statusBarService.disable2ForUser(flags2, mToken, mContext.getPackageName(), userId);
+                return true;
             }
         } catch (RemoteException e) {
             Slog.e(LOG_TAG, "Failed to disable the status bar", e);
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
+        return false;
     }
 
     /**
@@ -6289,7 +6318,7 @@
     public void setPermissionPolicy(ComponentName admin, int policy) throws RemoteException {
         int userId = UserHandle.getCallingUserId();
         synchronized (this) {
-            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
+            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
             DevicePolicyData userPolicy = getUserData(userId);
             if (userPolicy.mPermissionPolicy != policy) {
                 userPolicy.mPermissionPolicy = policy;
@@ -6312,7 +6341,7 @@
             String permission, boolean granted) throws RemoteException {
         UserHandle user = Binder.getCallingUserHandle();
         synchronized (this) {
-            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
+            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
             long ident = Binder.clearCallingIdentity();
             try {
                 if (granted) {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 2922130..925a609 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -28,6 +28,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
+import android.content.res.Resources.Theme;
 import android.os.Build;
 import android.os.Environment;
 import android.os.FactoryTest;
@@ -156,9 +157,9 @@
     private boolean mFirstBoot;
 
     /**
-     * Called to initialize native system services.
+     * Start the sensor service.
      */
-    private static native void nativeInit();
+    private static native void startSensorService();
 
     /**
      * The main entry point from zygote.
@@ -233,7 +234,6 @@
 
         // Initialize native services.
         System.loadLibrary("android_servers");
-        nativeInit();
 
         // Check whether we failed to shut down last time we tried.
         // This call may not return.
@@ -285,14 +285,14 @@
                 reason = null;
             }
 
-            ShutdownThread.rebootOrShutdown(reboot, reason);
+            ShutdownThread.rebootOrShutdown(null, reboot, reason);
         }
     }
 
     private void createSystemContext() {
         ActivityThread activityThread = ActivityThread.systemMain();
         mSystemContext = activityThread.getSystemContext();
-        mSystemContext.setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar);
+        mSystemContext.setTheme(android.R.style.Theme_Material_DayNight_DarkActionBar);
     }
 
     /**
@@ -359,6 +359,10 @@
 
         // Set up the Application instance for the system process and get started.
         mActivityManagerService.setSystemProcess();
+
+        // The sensor service needs access to package manager service, app ops
+        // service, and permissions service, therefore we start it after them.
+        startSensorService();
     }
 
     /**
@@ -1023,6 +1027,12 @@
         w.getDefaultDisplay().getMetrics(metrics);
         context.getResources().updateConfiguration(config, metrics);
 
+        // The system context's theme may be configuration-dependent.
+        final Theme systemTheme = context.getTheme();
+        if (systemTheme.getChangingConfigurations() != 0) {
+            systemTheme.rebase();
+        }
+
         try {
             // TODO: use boot phase
             mPowerManagerService.systemReady(mActivityManagerService.getAppOpsService());
diff --git a/services/midi/java/com/android/server/midi/MidiService.java b/services/midi/java/com/android/server/midi/MidiService.java
index c1c5c56..176f54b1 100644
--- a/services/midi/java/com/android/server/midi/MidiService.java
+++ b/services/midi/java/com/android/server/midi/MidiService.java
@@ -294,8 +294,10 @@
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder("Device: ");
+            StringBuilder sb = new StringBuilder("Device Info: ");
             sb.append(mDeviceInfo);
+            sb.append(" Status: ");
+            sb.append(mDeviceStatus);
             sb.append(" UID: ");
             sb.append(mUid);
             return sb.toString();
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index c2e61c6..48b127a 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -28,6 +28,7 @@
 import android.app.usage.UsageStats;
 import android.app.usage.UsageStatsManagerInternal;
 import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
+import android.appwidget.AppWidgetManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -56,6 +57,7 @@
 import android.util.Slog;
 import android.util.SparseArray;
 
+import com.android.internal.appwidget.IAppWidgetService;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.SystemConfig;
@@ -96,6 +98,7 @@
     Handler mHandler;
     AppOpsManager mAppOps;
     UserManager mUserManager;
+    AppWidgetManager mAppWidgetManager;
 
     private final SparseArray<UserUsageStatsService> mUserState = new SparseArray<>();
     private File mUsageStatsDir;
@@ -158,6 +161,7 @@
         if (phase == PHASE_SYSTEM_SERVICES_READY) {
             // Observe changes to the threshold
             new SettingsObserver(mHandler).registerObserver();
+            mAppWidgetManager = getContext().getSystemService(AppWidgetManager.class);
         } else if (phase == PHASE_BOOT_COMPLETED) {
             setAppIdleParoled(getContext().getSystemService(BatteryManager.class).isCharging());
         }
@@ -500,6 +504,11 @@
             return false;
         }
 
+        if (mAppWidgetManager != null
+                && mAppWidgetManager.isBoundWidgetPackage(packageName, userId)) {
+            return false;
+        }
+
         final long lastUsed = getLastPackageAccessTime(packageName, userId);
         return hasPassedIdleDuration(lastUsed);
     }
@@ -709,10 +718,10 @@
         }
 
         @Override
-        public boolean isAppIdle(String packageName, int userId) {
+        public boolean isAppInactive(String packageName, int userId) {
             try {
                 userId = ActivityManagerNative.getDefault().handleIncomingUser(Binder.getCallingPid(),
-                        Binder.getCallingUid(), userId, false, true, "isAppIdle", null);
+                        Binder.getCallingUid(), userId, false, true, "isAppInactive", null);
             } catch (RemoteException re) {
                 return false;
             }
@@ -725,7 +734,7 @@
         }
 
         @Override
-        public void setAppIdle(String packageName, boolean idle, int userId) {
+        public void setAppInactive(String packageName, boolean idle, int userId) {
             final int callingUid = Binder.getCallingUid();
             try {
                 userId = ActivityManagerNative.getDefault().handleIncomingUser(
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 6adb8be..f84beb6 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -78,8 +78,6 @@
             "/sys/class/android_usb/android0/functions";
     private static final String STATE_PATH =
             "/sys/class/android_usb/android0/state";
-    private static final String MASS_STORAGE_FILE_PATH =
-            "/sys/class/android_usb/android0/f_mass_storage/lun/file";
     private static final String RNDIS_ETH_ADDR_PATH =
             "/sys/class/android_usb/android0/f_rndis/ethaddr";
     private static final String AUDIO_SOURCE_PCM_PATH =
@@ -832,8 +830,6 @@
                         + FileUtils.readTextFile(new File(STATE_PATH), 0, null).trim());
                 pw.println("    Kernel function list: "
                         + FileUtils.readTextFile(new File(FUNCTIONS_PATH), 0, null).trim());
-                pw.println("    Mass storage backing file: "
-                        + FileUtils.readTextFile(new File(MASS_STORAGE_FILE_PATH), 0, null).trim());
             } catch (IOException e) {
                 pw.println("IOException: " + e);
             }
@@ -866,15 +862,6 @@
         mHandler.sendMessage(MSG_SET_CURRENT_FUNCTIONS, functions, makeDefault);
     }
 
-    public void setMassStorageBackingFile(String path) {
-        if (path == null) path = "";
-        try {
-            FileUtils.stringToFile(MASS_STORAGE_FILE_PATH, path);
-        } catch (IOException e) {
-           Slog.e(TAG, "failed to write to " + MASS_STORAGE_FILE_PATH);
-        }
-    }
-
     private void readOemUsbOverrideConfig() {
         String[] configList = mContext.getResources().getStringArray(
             com.android.internal.R.array.config_oemUsbModeOverride);
diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java
index fda8076..e03884f 100644
--- a/services/usb/java/com/android/server/usb/UsbService.java
+++ b/services/usb/java/com/android/server/usb/UsbService.java
@@ -271,16 +271,6 @@
     }
 
     @Override
-    public void setMassStorageBackingFile(String path) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
-        if (mDeviceManager != null) {
-            mDeviceManager.setMassStorageBackingFile(path);
-        } else {
-            throw new IllegalStateException("USB device mode not supported");
-        }
-    }
-
-    @Override
     public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
         mDeviceManager.allowUsbDebugging(alwaysAllow, publicKey);
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 81c5e6a..fcdb6d6 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -28,7 +28,6 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
-import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.hardware.soundtrigger.IRecognitionStatusCallback;
@@ -726,6 +725,24 @@
         }
 
         @Override
+        public void launchVoiceAssistFromKeyguard() {
+            enforceCallingPermission(Manifest.permission.ACCESS_VOICE_INTERACTION_SERVICE);
+            synchronized (this) {
+                if (mImpl == null) {
+                    Slog.w(TAG, "launchVoiceAssistFromKeyguard without running voice interaction"
+                            + "service");
+                    return;
+                }
+                final long caller = Binder.clearCallingIdentity();
+                try {
+                    mImpl.launchVoiceAssistFromKeyguard();
+                } finally {
+                    Binder.restoreCallingIdentity(caller);
+                }
+            }
+        }
+
+        @Override
         public boolean isSessionRunning() {
             enforceCallingPermission(Manifest.permission.ACCESS_VOICE_INTERACTION_SERVICE);
             synchronized (this) {
@@ -734,10 +751,19 @@
         }
 
         @Override
-        public boolean activeServiceSupportsAssistGesture() {
+        public boolean activeServiceSupportsAssist() {
             enforceCallingPermission(Manifest.permission.ACCESS_VOICE_INTERACTION_SERVICE);
             synchronized (this) {
-                return mImpl != null && mImpl.mInfo.getSupportsAssistGesture();
+                return mImpl != null && mImpl.mInfo != null && mImpl.mInfo.getSupportsAssist();
+            }
+        }
+
+        @Override
+        public boolean activeServiceSupportsLaunchFromKeyguard() throws RemoteException {
+            enforceCallingPermission(Manifest.permission.ACCESS_VOICE_INTERACTION_SERVICE);
+            synchronized (this) {
+                return mImpl != null && mImpl.mInfo != null
+                        && mImpl.mInfo.getSupportsLaunchFromKeyguard();
             }
         }
 
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
index f439915..0a5b668 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
@@ -235,6 +235,18 @@
         }
     }
 
+    public void launchVoiceAssistFromKeyguard() {
+        if (mService == null) {
+            Slog.w(TAG, "Not bound to voice interaction service " + mComponent);
+            return;
+        }
+        try {
+            mService.launchVoiceAssistFromKeyguard();
+        } catch (RemoteException e) {
+            Slog.w(TAG, "RemoteException while calling launchVoiceAssistFromKeyguard", e);
+        }
+    }
+
     void shutdownLocked() {
         try {
             if (mService != null) {
@@ -256,6 +268,7 @@
     void notifySoundModelsChangedLocked() {
         if (mService == null) {
             Slog.w(TAG, "Not bound to voice interaction service " + mComponent);
+            return;
         }
         try {
             mService.soundModelsChanged();
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index d92c0c7..adab00b 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -19,10 +19,12 @@
 import android.annotation.SystemApi;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
 
 import java.lang.String;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -130,7 +132,7 @@
         /**
          * @hide
          */
-        public static final int CAPABILITY_UNUSED = 0x00000010;
+        public static final int CAPABILITY_UNUSED_1 = 0x00000010;
 
         /** Call supports responding via text option. */
         public static final int CAPABILITY_RESPOND_VIA_TEXT = 0x00000020;
@@ -187,27 +189,6 @@
         public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 0x00002000;
 
         /**
-         * Whether the call is a generic conference, where we do not know the precise state of
-         * participants in the conference (eg. on CDMA).
-         */
-        public static final int CAPABILITY_GENERIC_CONFERENCE = 0x00004000;
-
-        /**
-         * Call is using high definition audio.
-         */
-        public static final int CAPABILITY_HIGH_DEF_AUDIO = 0x00008000;
-
-        /**
-         * Call is using WIFI.
-         */
-        public static final int CAPABILITY_WIFI = 0x00010000;
-
-        /**
-         * Indicates that the current device callback number should be shown.
-         */
-        public static final int CAPABILITY_SHOW_CALLBACK_NUMBER = 0x00020000;
-
-        /**
          * Speed up audio setup for MT call.
          * @hide
          */
@@ -226,7 +207,37 @@
         public static final int CAPABILITY_CAN_PAUSE_VIDEO = 0x00100000;
 
         //******************************************************************************************
-        // Next CAPABILITY value: 0x00200000
+        // Next CAPABILITY value: 0x00004000
+        //******************************************************************************************
+
+        /**
+         * Whether the call is currently a conference.
+         */
+        public static final int PROPERTY_CONFERENCE = 0x00000001;
+
+        /**
+         * Whether the call is a generic conference, where we do not know the precise state of
+         * participants in the conference (eg. on CDMA).
+         */
+        public static final int PROPERTY_GENERIC_CONFERENCE = 0x00000002;
+
+        /**
+         * Whether the call is made while the device is in emergency callback mode.
+         */
+        public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 0x00000004;
+
+        /**
+         * Connection is using WIFI.
+         */
+        public static final int PROPERTY_WIFI = 0x00000008;
+
+        /**
+         * Call is using high definition audio.
+         */
+        public static final int PROPERTY_HIGH_DEF_AUDIO = 0x00000010;
+
+        //******************************************************************************************
+        // Next PROPERTY value: 0x00000020
         //******************************************************************************************
 
         private final Uri mHandle;
@@ -312,18 +323,6 @@
             if (can(capabilities, CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL)) {
                 builder.append(" CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL");
             }
-            if (can(capabilities, CAPABILITY_HIGH_DEF_AUDIO)) {
-                builder.append(" CAPABILITY_HIGH_DEF_AUDIO");
-            }
-            if (can(capabilities, CAPABILITY_WIFI)) {
-                builder.append(" CAPABILITY_WIFI");
-            }
-            if (can(capabilities, CAPABILITY_GENERIC_CONFERENCE)) {
-                builder.append(" CAPABILITY_GENERIC_CONFERENCE");
-            }
-            if (can(capabilities, CAPABILITY_SHOW_CALLBACK_NUMBER)) {
-                builder.append(" CAPABILITY_SHOW_CALLBACK_NUMBER");
-            }
             if (can(capabilities, CAPABILITY_SPEED_UP_MT_AUDIO)) {
                 builder.append(" CAPABILITY_SPEED_UP_MT_AUDIO");
             }
@@ -338,6 +337,55 @@
         }
 
         /**
+         * Whether the supplied properties includes the specified property.
+         *
+         * @param properties A bit field of properties.
+         * @param property The property to check properties for.
+         * @return Whether the specified property is supported.
+         */
+        public static boolean hasProperty(int properties, int property) {
+            return (properties & property) != 0;
+        }
+
+        /**
+         * Whether the properties of this {@code Details} includes the specified property.
+         *
+         * @param property The property to check properties for.
+         * @return Whether the specified property is supported.
+         */
+        public boolean hasProperty(int property) {
+            return hasProperty(mCallProperties, property);
+        }
+
+        /**
+         * Render a set of property bits ({@code PROPERTY_*}) as a human readable string.
+         *
+         * @param properties A property bit field.
+         * @return A human readable string representation.
+         */
+        public static String propertiesToString(int properties) {
+            StringBuilder builder = new StringBuilder();
+            builder.append("[Properties:");
+            if (hasProperty(properties, PROPERTY_CONFERENCE)) {
+                builder.append(" PROPERTY_CONFERENCE");
+            }
+            if (hasProperty(properties, PROPERTY_GENERIC_CONFERENCE)) {
+                builder.append(" PROPERTY_GENERIC_CONFERENCE");
+            }
+            if (hasProperty(properties, PROPERTY_WIFI)) {
+                builder.append(" PROPERTY_WIFI");
+            }
+            if (hasProperty(properties, PROPERTY_HIGH_DEF_AUDIO)) {
+                builder.append(" PROPERTY_HIGH_DEF_AUDIO");
+            }
+            if (hasProperty(properties, PROPERTY_EMERGENCY_CALLBACK_MODE)) {
+                builder.append(" EMERGENCY_CALLBACK_MODE");
+            }
+            builder.append("]");
+            return builder.toString();
+        }
+
+        /**
          * @return The handle (e.g., phone number) to which the {@code Call} is currently
          * connected.
          */
@@ -385,8 +433,8 @@
         }
 
         /**
-         * @return A bitmask of the properties of the {@code Call}, as defined in
-         *         {@link CallProperties}.
+         * @return A bitmask of the properties of the {@code Call}, as defined by the various
+         *         {@code PROPERTY_*} constants in this class.
          */
         public int getCallProperties() {
             return mCallProperties;
@@ -608,7 +656,7 @@
     private final List<String> mChildrenIds = new ArrayList<>();
     private final List<Call> mChildren = new ArrayList<>();
     private final List<Call> mUnmodifiableChildren = Collections.unmodifiableList(mChildren);
-    private final List<Callback> mCallbacks = new CopyOnWriteArrayList<>();
+    private final List<CallbackRecord<Callback>> mCallbackRecords = new CopyOnWriteArrayList<>();
     private final List<Call> mConferenceableCalls = new ArrayList<>();
     private final List<Call> mUnmodifiableConferenceableCalls =
             Collections.unmodifiableList(mConferenceableCalls);
@@ -850,7 +898,20 @@
      * @param callback A {@code Callback}.
      */
     public void registerCallback(Callback callback) {
-        mCallbacks.add(callback);
+        registerCallback(callback, new Handler());
+    }
+
+    /**
+     * Registers a callback to this {@code Call}.
+     *
+     * @param callback A {@code Callback}.
+     * @param handler A handler which command and status changes will be delivered to.
+     */
+    public void registerCallback(Callback callback, Handler handler) {
+        unregisterCallback(callback);
+        if (callback != null && handler != null) {
+            mCallbackRecords.add(new CallbackRecord<Callback>(callback, handler));
+        }
     }
 
     /**
@@ -860,7 +921,12 @@
      */
     public void unregisterCallback(Callback callback) {
         if (callback != null) {
-            mCallbacks.remove(callback);
+            for (CallbackRecord<Callback> record : mCallbackRecords) {
+                if (record.getCallback() == callback) {
+                    mCallbackRecords.remove(record);
+                    break;
+                }
+            }
         }
     }
 
@@ -934,9 +1000,9 @@
         }
 
         boolean videoCallChanged = parcelableCall.isVideoCallProviderChanged() &&
-                !Objects.equals(mVideoCall, parcelableCall.getVideoCall());
+                !Objects.equals(mVideoCall, parcelableCall.getVideoCall(this));
         if (videoCallChanged) {
-            mVideoCall = parcelableCall.getVideoCall();
+            mVideoCall = parcelableCall.getVideoCall(this);
         }
 
         int state = parcelableCall.getState();
@@ -1021,57 +1087,120 @@
         }
     }
 
-    private void fireStateChanged(int newState) {
-        for (Callback callback : mCallbacks) {
-            callback.onStateChanged(this, newState);
+    private void fireStateChanged(final int newState) {
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onStateChanged(call, newState);
+                }
+            });
         }
     }
 
-    private void fireParentChanged(Call newParent) {
-        for (Callback callback : mCallbacks) {
-            callback.onParentChanged(this, newParent);
+    private void fireParentChanged(final Call newParent) {
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onParentChanged(call, newParent);
+                }
+            });
         }
     }
 
-    private void fireChildrenChanged(List<Call> children) {
-        for (Callback callback : mCallbacks) {
-            callback.onChildrenChanged(this, children);
+    private void fireChildrenChanged(final List<Call> children) {
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onChildrenChanged(call, children);
+                }
+            });
         }
     }
 
-    private void fireDetailsChanged(Details details) {
-        for (Callback callback : mCallbacks) {
-            callback.onDetailsChanged(this, details);
+    private void fireDetailsChanged(final Details details) {
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onDetailsChanged(call, details);
+                }
+            });
         }
     }
 
-    private void fireCannedTextResponsesLoaded(List<String> cannedTextResponses) {
-        for (Callback callback : mCallbacks) {
-            callback.onCannedTextResponsesLoaded(this, cannedTextResponses);
+    private void fireCannedTextResponsesLoaded(final List<String> cannedTextResponses) {
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onCannedTextResponsesLoaded(call, cannedTextResponses);
+                }
+            });
         }
     }
 
-    private void fireVideoCallChanged(InCallService.VideoCall videoCall) {
-        for (Callback callback : mCallbacks) {
-            callback.onVideoCallChanged(this, videoCall);
+    private void fireVideoCallChanged(final InCallService.VideoCall videoCall) {
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onVideoCallChanged(call, videoCall);
+                }
+            });
         }
     }
 
-    private void firePostDialWait(String remainingPostDialSequence) {
-        for (Callback callback : mCallbacks) {
-            callback.onPostDialWait(this, remainingPostDialSequence);
+    private void firePostDialWait(final String remainingPostDialSequence) {
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onPostDialWait(call, remainingPostDialSequence);
+                }
+            });
         }
     }
 
     private void fireCallDestroyed() {
-        for (Callback callback : mCallbacks) {
-            callback.onCallDestroyed(this);
+        for (CallbackRecord<Callback> record: mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onCallDestroyed(call);
+                }
+            });
         }
     }
 
     private void fireConferenceableCallsChanged() {
-        for (Callback callback : mCallbacks) {
-            callback.onConferenceableCallsChanged(this, mUnmodifiableConferenceableCalls);
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final Call call = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onConferenceableCallsChanged(call, mUnmodifiableConferenceableCalls);
+                }
+            });
         }
     }
 }
diff --git a/telecomm/java/android/telecom/CallProperties.java b/telecomm/java/android/telecom/CallProperties.java
deleted file mode 100644
index 1721a39..0000000
--- a/telecomm/java/android/telecom/CallProperties.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2014 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.telecom;
-
-/**
- * Defines properties of a phone call which may be affected by changes to the call.
- */
-public class CallProperties {
-    /** Call is currently in a conference call. */
-    public static final int CONFERENCE                      = 0x00000001;
-}
diff --git a/telecomm/java/android/telecom/CallbackRecord.java b/telecomm/java/android/telecom/CallbackRecord.java
new file mode 100644
index 0000000..1a81925
--- /dev/null
+++ b/telecomm/java/android/telecom/CallbackRecord.java
@@ -0,0 +1,44 @@
+/*
+ * 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.telecom;
+
+import android.os.Handler;
+
+
+/**
+ * This class is used to associate a generic callback of type T with a handler to which commands and
+ * status updates will be delivered to.
+ *
+ * @hide
+ */
+class CallbackRecord<T> {
+    private final T mCallback;
+    private final Handler mHandler;
+
+    public CallbackRecord(T callback, Handler handler) {
+        mCallback = callback;
+        mHandler = handler;
+    }
+
+    public T getCallback() {
+        return mCallback;
+    }
+
+    public Handler getHandler() {
+        return mHandler;
+    }
+}
diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java
index 0424548..e682697 100644
--- a/telecomm/java/android/telecom/Conference.java
+++ b/telecomm/java/android/telecom/Conference.java
@@ -179,7 +179,6 @@
 
     /**
      * Returns VideoProvider of the primary call. This can be null.
-     *  @hide
      */
     public VideoProvider getVideoProvider() {
         return null;
@@ -187,7 +186,6 @@
 
     /**
      * Returns video state of the primary call.
-     *  @hide
      */
     public int getVideoState() {
         return VideoProfile.VideoState.AUDIO_ONLY;
@@ -373,7 +371,6 @@
      * {@link VideoProfile.VideoState#RX_ENABLED}.
      *
      * @param videoState The new video state.
-     * @hide
      */
     public final void setVideoState(Connection c, int videoState) {
         Log.d(this, "setVideoState Conference: %s Connection: %s VideoState: %s",
@@ -387,7 +384,6 @@
      * Sets the video connection provider.
      *
      * @param videoProvider The video provider.
-     * @hide
      */
     public final void setVideoProvider(Connection c, Connection.VideoProvider videoProvider) {
         Log.d(this, "setVideoProvider Conference: %s Connection: %s VideoState: %s",
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index cd10050..0bf9118 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -16,6 +16,7 @@
 
 package android.telecom;
 
+import com.android.internal.os.SomeArgs;
 import com.android.internal.telecom.IVideoCallback;
 import com.android.internal.telecom.IVideoProvider;
 
@@ -105,38 +106,32 @@
 
     /**
      * Local device supports receiving video.
-     * @hide
      */
     public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 0x00000100;
 
     /**
      * Local device supports transmitting video.
-     * @hide
      */
     public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 0x00000200;
 
     /**
      * Local device supports bidirectional video calling.
-     * @hide
      */
     public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL =
             CAPABILITY_SUPPORTS_VT_LOCAL_RX | CAPABILITY_SUPPORTS_VT_LOCAL_TX;
 
     /**
      * Remote device supports receiving video.
-     * @hide
      */
     public static final int CAPABILITY_SUPPORTS_VT_REMOTE_RX = 0x00000400;
 
     /**
      * Remote device supports transmitting video.
-     * @hide
      */
     public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 0x00000800;
 
     /**
      * Remote device supports bidirectional video calling.
-     * @hide
      */
     public static final int CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL =
             CAPABILITY_SUPPORTS_VT_REMOTE_RX | CAPABILITY_SUPPORTS_VT_REMOTE_TX;
@@ -186,14 +181,12 @@
 
     /**
      * Call can be upgraded to a video call.
-     * @hide
      */
     public static final int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 0x00080000;
 
     /**
      * For video calls, indicates whether the outgoing video for the call can be paused using
      * the {@link android.telecom.VideoProfile.VideoState#PAUSED} VideoState.
-     * @hide
      */
     public static final int CAPABILITY_CAN_PAUSE_VIDEO = 0x00100000;
 
@@ -339,6 +332,7 @@
         public void onConferenceParticipantsChanged(Connection c,
                 List<ConferenceParticipant> participants) {}
         public void onConferenceStarted() {}
+        public void onConferenceMergeFailed(Connection c) {}
     }
 
     public static abstract class VideoProvider {
@@ -470,9 +464,16 @@
                     case MSG_SET_ZOOM:
                         onSetZoom((Float) msg.obj);
                         break;
-                    case MSG_SEND_SESSION_MODIFY_REQUEST:
-                        onSendSessionModifyRequest((VideoProfile) msg.obj);
+                    case MSG_SEND_SESSION_MODIFY_REQUEST: {
+                        SomeArgs args = (SomeArgs) msg.obj;
+                        try {
+                            onSendSessionModifyRequest((VideoProfile) args.arg1,
+                                    (VideoProfile) args.arg2);
+                        } finally {
+                            args.recycle();
+                        }
                         break;
+                    }
                     case MSG_SEND_SESSION_MODIFY_RESPONSE:
                         onSendSessionModifyResponse((VideoProfile) msg.obj);
                         break;
@@ -526,9 +527,11 @@
                 mMessageHandler.obtainMessage(MSG_SET_ZOOM, value).sendToTarget();
             }
 
-            public void sendSessionModifyRequest(VideoProfile requestProfile) {
-                mMessageHandler.obtainMessage(
-                        MSG_SEND_SESSION_MODIFY_REQUEST, requestProfile).sendToTarget();
+            public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
+                SomeArgs args = SomeArgs.obtain();
+                args.arg1 = fromProfile;
+                args.arg2 = toProfile;
+                mMessageHandler.obtainMessage(MSG_SEND_SESSION_MODIFY_REQUEST, args).sendToTarget();
             }
 
             public void sendSessionModifyResponse(VideoProfile responseProfile) {
@@ -605,9 +608,11 @@
          * Some examples of session modification requests: upgrade connection from audio to video,
          * downgrade connection from video to audio, pause video.
          *
-         * @param requestProfile The requested connection video properties.
+         * @param fromProfile The video properties prior to the request.
+         * @param toProfile The video properties with the requested changes made.
          */
-        public abstract void onSendSessionModifyRequest(VideoProfile requestProfile);
+        public abstract void onSendSessionModifyRequest(VideoProfile fromProfile,
+                VideoProfile toProfile);
 
         /**te
          * Provides a response to a request to change the current connection session video
@@ -1028,7 +1033,6 @@
      * {@link VideoProfile.VideoState#RX_ENABLED}.
      *
      * @param videoState The new video state.
-     * @hide
      */
     public final void setVideoState(int videoState) {
         checkImmutable();
@@ -1092,7 +1096,6 @@
     /**
      * Sets the video connection provider.
      * @param videoProvider The video provider.
-     * @hide
      */
     public final void setVideoProvider(VideoProvider videoProvider) {
         checkImmutable();
@@ -1401,7 +1404,6 @@
      * a request to accept.
      *
      * @param videoState The video state in which to answer the connection.
-     * @hide
      */
     public void onAnswer(int videoState) {}
 
@@ -1544,6 +1546,17 @@
     }
 
     /**
+     * Notifies listeners that the merge request failed.
+     *
+     * @hide
+     */
+    protected final void notifyConferenceMergeFailed() {
+        for (Listener l : mListeners) {
+            l.onConferenceMergeFailed(this);
+        }
+    }
+
+    /**
      * Notifies listeners of a change to conference participant(s).
      *
      * @param conferenceParticipants The participants.
diff --git a/telecomm/java/android/telecom/ConnectionRequest.java b/telecomm/java/android/telecom/ConnectionRequest.java
index 71b481b..f5cceea 100644
--- a/telecomm/java/android/telecom/ConnectionRequest.java
+++ b/telecomm/java/android/telecom/ConnectionRequest.java
@@ -50,7 +50,6 @@
      * @param handle The handle (e.g., phone number) to which the {@link Connection} is to connect.
      * @param extras Application-specific extra data.
      * @param videoState Determines the video state for the connection.
-     * @hide
      */
     public ConnectionRequest(
             PhoneAccountHandle accountHandle,
@@ -95,7 +94,6 @@
      * {@link VideoProfile.VideoState#RX_ENABLED}.
      *
      * @return The video state for the connection.
-     * @hide
      */
     public int getVideoState() {
         return mVideoState;
diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java
index c039acf..13eb016 100644
--- a/telecomm/java/android/telecom/ConnectionService.java
+++ b/telecomm/java/android/telecom/ConnectionService.java
@@ -147,7 +147,6 @@
         }
 
         @Override
-        /** @hide */
         public void answerVideo(String callId, int videoState) {
             SomeArgs args = SomeArgs.obtain();
             args.arg1 = callId;
@@ -562,6 +561,14 @@
                 mAdapter.setIsConferenced(id, conferenceId);
             }
         }
+
+        @Override
+        public void onConferenceMergeFailed(Connection connection) {
+            String id = mIdByConnection.get(connection);
+            if (id != null) {
+                mAdapter.onConferenceMergeFailed(id);
+            }
+        }
     };
 
     /** {@inheritDoc} */
diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapter.java b/telecomm/java/android/telecom/ConnectionServiceAdapter.java
index d026a28..a87dbe7 100644
--- a/telecomm/java/android/telecom/ConnectionServiceAdapter.java
+++ b/telecomm/java/android/telecom/ConnectionServiceAdapter.java
@@ -203,6 +203,21 @@
     }
 
     /**
+     * Indicates that the merge request on this call has failed.
+     *
+     * @param callId The unique ID of the call being conferenced.
+     */
+    void onConferenceMergeFailed(String callId) {
+        for (IConnectionServiceAdapter adapter : mAdapters) {
+            try {
+                Log.d(this, "merge failed for call %s", callId);
+                adapter.setConferenceMergeFailed(callId);
+            } catch (RemoteException ignored) {
+            }
+        }
+    }
+
+    /**
      * Indicates that the call no longer exists. Can be used with either a call or a conference
      * call.
      *
diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java
index 429f296..db815ba 100644
--- a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java
+++ b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java
@@ -59,6 +59,7 @@
     private static final int MSG_SET_CONFERENCEABLE_CONNECTIONS = 20;
     private static final int MSG_ADD_EXISTING_CONNECTION = 21;
     private static final int MSG_ON_POST_DIAL_CHAR = 22;
+    private static final int MSG_SET_CONFERENCE_MERGE_FAILED = 23;
 
     private final IConnectionServiceAdapter mDelegate;
 
@@ -220,6 +221,15 @@
                     }
                     break;
                 }
+                case MSG_SET_CONFERENCE_MERGE_FAILED: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    try {
+                        mDelegate.setConferenceMergeFailed((String) args.arg1);
+                    } finally {
+                        args.recycle();
+                    }
+                    break;
+                }
             }
         }
     };
@@ -280,6 +290,13 @@
         }
 
         @Override
+        public void setConferenceMergeFailed(String callId) {
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = callId;
+            mHandler.obtainMessage(MSG_SET_CONFERENCE_MERGE_FAILED, args).sendToTarget();
+        }
+
+        @Override
         public void setIsConferenced(String callId, String conferenceCallId) {
             SomeArgs args = SomeArgs.obtain();
             args.arg1 = callId;
diff --git a/telecomm/java/android/telecom/DefaultDialerManager.java b/telecomm/java/android/telecom/DefaultDialerManager.java
index b5d566a..d3df151 100644
--- a/telecomm/java/android/telecom/DefaultDialerManager.java
+++ b/telecomm/java/android/telecom/DefaultDialerManager.java
@@ -14,11 +14,13 @@
 
 package android.telecom;
 
+import android.app.ActivityManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.net.Uri;
 import android.provider.Settings;
 import android.text.TextUtils;
 
@@ -35,15 +37,27 @@
     private static final String TAG = "DefaultDialerManager";
 
     /**
-     * Sets the specified package name as the default dialer application. The caller of this method
-     * needs to have permission to write to secure settings.
+     * Sets the specified package name as the default dialer application for the current user.
+     * The caller of this method needs to have permission to write to secure settings and
+     * manage users on the device.
      *
      * @hide
      * */
     public static void setDefaultDialerApplication(Context context, String packageName) {
+        setDefaultDialerApplication(context, packageName, ActivityManager.getCurrentUser());
+    }
+
+    /**
+     * Sets the specified package name as the default dialer application for the specified user.
+     * The caller of this method needs to have permission to write to secure settings and
+     * manage users on the device.
+     *
+     * @hide
+     * */
+    public static void setDefaultDialerApplication(Context context, String packageName, int user) {
         // Get old package name
-        String oldPackageName = Settings.Secure.getString(context.getContentResolver(),
-                Settings.Secure.DIALER_DEFAULT_APPLICATION);
+        String oldPackageName = Settings.Secure.getStringForUser(context.getContentResolver(),
+                Settings.Secure.DIALER_DEFAULT_APPLICATION, user);
 
         if (packageName != null && oldPackageName != null && packageName.equals(oldPackageName)) {
             // No change
@@ -55,26 +69,44 @@
 
         if (packageNames.contains(packageName)) {
             // Update the secure setting.
-            Settings.Secure.putString(context.getContentResolver(),
-                    Settings.Secure.DIALER_DEFAULT_APPLICATION, packageName);
+            Settings.Secure.putStringForUser(context.getContentResolver(),
+                    Settings.Secure.DIALER_DEFAULT_APPLICATION, packageName, user);
         }
     }
 
     /**
-     * Returns the installed dialer application that will be used to receive incoming calls, and is
-     * allowed to make emergency calls.
+     * Returns the installed dialer application for the current user that will be used to receive
+     * incoming calls, and is allowed to make emergency calls.
      *
      * The application will be returned in order of preference:
      * 1) User selected phone application (if still installed)
      * 2) Pre-installed system dialer (if not disabled)
      * 3) Null
      *
+     * The caller of this method needs to have permission to manage users on the device.
+     *
      * @hide
      * */
     public static String getDefaultDialerApplication(Context context) {
-        String defaultPackageName = Settings.Secure.getString(context.getContentResolver(),
-                Settings.Secure.DIALER_DEFAULT_APPLICATION);
+        return getDefaultDialerApplication(context, ActivityManager.getCurrentUser());
+    }
 
+    /**
+     * Returns the installed dialer application for the specified user that will be used to receive
+     * incoming calls, and is allowed to make emergency calls.
+     *
+     * The application will be returned in order of preference:
+     * 1) User selected phone application (if still installed)
+     * 2) Pre-installed system dialer (if not disabled)
+     * 3) Null
+     *
+     * The caller of this method needs to have permission to manage users on the device.
+     *
+     * @hide
+     * */
+    public static String getDefaultDialerApplication(Context context, int user) {
+        String defaultPackageName = Settings.Secure.getStringForUser(context.getContentResolver(),
+                Settings.Secure.DIALER_DEFAULT_APPLICATION, user);
 
         final List<String> packageNames = getInstalledDialerApplications(context);
 
@@ -120,14 +152,14 @@
 
         for (ResolveInfo resolveInfo : resolveInfoList) {
             final ActivityInfo activityInfo = resolveInfo.activityInfo;
-            if (activityInfo == null) {
-                continue;
+            if (activityInfo != null && !packageNames.contains(activityInfo.packageName)) {
+                packageNames.add(activityInfo.packageName);
             }
-            packageNames.add(activityInfo.packageName);
         }
 
-        // TODO: Filter for apps that don't handle DIAL intent with tel scheme
-        return packageNames;
+        final Intent dialIntentWithTelScheme = new Intent(Intent.ACTION_DIAL);
+        dialIntentWithTelScheme.setData(Uri.fromParts(PhoneAccount.SCHEME_TEL, "", null));
+        return filterByIntent(context, packageNames, dialIntentWithTelScheme);
     }
 
     /**
@@ -151,6 +183,36 @@
                 || packageName.equals(tm.getSystemDialerPackage());
     }
 
+    /**
+     * Filter a given list of package names for those packages that contain an activity that has
+     * an intent filter for a given intent.
+     *
+     * @param context A valid context
+     * @param packageNames List of package names to filter.
+     * @return The filtered list.
+     */
+    private static List<String> filterByIntent(Context context, List<String> packageNames,
+            Intent intent) {
+        if (packageNames == null || packageNames.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        final List<String> result = new ArrayList<>();
+        final List<ResolveInfo> resolveInfoList =
+                context.getPackageManager().queryIntentActivities(intent, 0);
+        final int length = resolveInfoList.size();
+        for (int i = 0; i < length; i++) {
+            final ActivityInfo info = resolveInfoList.get(i).activityInfo;
+            if (info != null && packageNames.contains(info.packageName)
+                    && !result.contains(info.packageName)) {
+                result.add(info.packageName);
+            }
+        }
+
+        return result;
+    }
+
+
     private static TelecomManager getTelecomManager(Context context) {
         return (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
     }
diff --git a/telecomm/java/android/telecom/InCallService.java b/telecomm/java/android/telecom/InCallService.java
index 2c8415a..3cb4e87 100644
--- a/telecomm/java/android/telecom/InCallService.java
+++ b/telecomm/java/android/telecom/InCallService.java
@@ -362,6 +362,9 @@
      */
     public static abstract class VideoCall {
 
+        /** @hide */
+        public abstract void destroy();
+
         /**
          * Registers a callback to receive commands and state changes for video calls.
          *
@@ -370,9 +373,17 @@
         public abstract void registerCallback(VideoCall.Callback callback);
 
         /**
+         * Registers a callback to receive commands and state changes for video calls.
+         *
+         * @param callback The video call callback.
+         * @param handler A handler which commands and status changes will be delivered to.
+         */
+        public abstract void registerCallback(VideoCall.Callback callback, Handler handler);
+
+        /**
          * Clears the video call listener set via {@link #registerCallback}.
          */
-        public abstract void unregisterCallback();
+        public abstract void unregisterCallback(VideoCall.Callback callback);
 
         /**
          * Sets the camera to be used for video recording in a video call.
diff --git a/telecomm/java/android/telecom/ParcelableCall.java b/telecomm/java/android/telecom/ParcelableCall.java
index 1a30910..bb65ce9a 100644
--- a/telecomm/java/android/telecom/ParcelableCall.java
+++ b/telecomm/java/android/telecom/ParcelableCall.java
@@ -178,10 +178,10 @@
      * Returns an object for remotely communicating through the video call provider's binder.
      * @return The video call.
      */
-    public InCallService.VideoCall getVideoCall() {
+    public InCallService.VideoCall getVideoCall(Call call) {
         if (mVideoCall == null && mVideoCallProvider != null) {
             try {
-                mVideoCall = new VideoCallImpl(mVideoCallProvider);
+                mVideoCall = new VideoCallImpl(mVideoCallProvider, call);
             } catch (RemoteException ignored) {
                 // Ignore RemoteException.
             }
diff --git a/telecomm/java/android/telecom/ParcelableConference.java b/telecomm/java/android/telecom/ParcelableConference.java
index e54e79d..3d0c558 100644
--- a/telecomm/java/android/telecom/ParcelableConference.java
+++ b/telecomm/java/android/telecom/ParcelableConference.java
@@ -121,11 +121,10 @@
             List<String> connectionIds = new ArrayList<>(2);
             source.readList(connectionIds, classLoader);
             long connectTimeMillis = source.readLong();
-            StatusHints statusHints = source.readParcelable(classLoader);
-
             IVideoProvider videoCallProvider =
                     IVideoProvider.Stub.asInterface(source.readStrongBinder());
             int videoState = source.readInt();
+            StatusHints statusHints = source.readParcelable(classLoader);
 
             return new ParcelableConference(phoneAccount, state, capabilities, connectionIds,
                     videoCallProvider, videoState, connectTimeMillis, statusHints);
diff --git a/telecomm/java/android/telecom/Phone.java b/telecomm/java/android/telecom/Phone.java
index 3d9acda..4cdfd2e 100644
--- a/telecomm/java/android/telecom/Phone.java
+++ b/telecomm/java/android/telecom/Phone.java
@@ -125,7 +125,7 @@
 
         InCallService.VideoCall videoCall = call.getVideoCall();
         if (videoCall != null) {
-            videoCall.unregisterCallback();
+            videoCall.destroy();
         }
         fireCallRemoved(call);
     }
@@ -174,7 +174,7 @@
         for (Call call : mCalls) {
             InCallService.VideoCall videoCall = call.getVideoCall();
             if (videoCall != null) {
-                videoCall.unregisterCallback();
+                videoCall.destroy();
             }
             if (call.getState() != Call.STATE_DISCONNECTED) {
                 call.internalSetDisconnected();
diff --git a/telecomm/java/android/telecom/RemoteConference.java b/telecomm/java/android/telecom/RemoteConference.java
index fba3ee3..a76bf59 100644
--- a/telecomm/java/android/telecom/RemoteConference.java
+++ b/telecomm/java/android/telecom/RemoteConference.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.telecom.IConnectionService;
 
+import android.os.Handler;
 import android.os.RemoteException;
 
 import java.util.ArrayList;
@@ -49,7 +50,7 @@
     private final String mId;
     private final IConnectionService mConnectionService;
 
-    private final Set<Callback> mCallbacks = new CopyOnWriteArraySet<>();
+    private final Set<CallbackRecord<Callback>> mCallbackRecords = new CopyOnWriteArraySet<>();
     private final List<RemoteConnection> mChildConnections = new CopyOnWriteArrayList<>();
     private final List<RemoteConnection> mUnmodifiableChildConnections =
             Collections.unmodifiableList(mChildConnections);
@@ -77,13 +78,20 @@
         for (RemoteConnection connection : mChildConnections) {
             connection.setConference(null);
         }
-        for (Callback c : mCallbacks) {
-            c.onDestroyed(this);
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final RemoteConference conference = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onDestroyed(conference);
+                }
+            });
         }
     }
 
     /** {@hide} */
-    void setState(int newState) {
+    void setState(final int newState) {
         if (newState != Connection.STATE_ACTIVE &&
                 newState != Connection.STATE_HOLDING &&
                 newState != Connection.STATE_DISCONNECTED) {
@@ -93,42 +101,71 @@
         }
 
         if (mState != newState) {
-            int oldState = mState;
+            final int oldState = mState;
             mState = newState;
-            for (Callback c : mCallbacks) {
-                c.onStateChanged(this, oldState, newState);
+            for (CallbackRecord<Callback> record : mCallbackRecords) {
+                final RemoteConference conference = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onStateChanged(conference, oldState, newState);
+                    }
+                });
             }
         }
     }
 
     /** {@hide} */
-    void addConnection(RemoteConnection connection) {
+    void addConnection(final RemoteConnection connection) {
         if (!mChildConnections.contains(connection)) {
             mChildConnections.add(connection);
             connection.setConference(this);
-            for (Callback c : mCallbacks) {
-                c.onConnectionAdded(this, connection);
+            for (CallbackRecord<Callback> record : mCallbackRecords) {
+                final RemoteConference conference = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onConnectionAdded(conference, connection);
+                    }
+                });
             }
         }
     }
 
     /** {@hide} */
-    void removeConnection(RemoteConnection connection) {
+    void removeConnection(final RemoteConnection connection) {
         if (mChildConnections.contains(connection)) {
             mChildConnections.remove(connection);
             connection.setConference(null);
-            for (Callback c : mCallbacks) {
-                c.onConnectionRemoved(this, connection);
+            for (CallbackRecord<Callback> record : mCallbackRecords) {
+                final RemoteConference conference = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onConnectionRemoved(conference, connection);
+                    }
+                });
             }
         }
     }
 
     /** {@hide} */
-    void setConnectionCapabilities(int connectionCapabilities) {
+    void setConnectionCapabilities(final int connectionCapabilities) {
         if (mConnectionCapabilities != connectionCapabilities) {
             mConnectionCapabilities = connectionCapabilities;
-            for (Callback c : mCallbacks) {
-                c.onConnectionCapabilitiesChanged(this, mConnectionCapabilities);
+            for (CallbackRecord<Callback> record : mCallbackRecords) {
+                final RemoteConference conference = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onConnectionCapabilitiesChanged(
+                                conference, mConnectionCapabilities);
+                    }
+                });
             }
         }
     }
@@ -137,18 +174,33 @@
     void setConferenceableConnections(List<RemoteConnection> conferenceableConnections) {
         mConferenceableConnections.clear();
         mConferenceableConnections.addAll(conferenceableConnections);
-        for (Callback c : mCallbacks) {
-            c.onConferenceableConnectionsChanged(this, mUnmodifiableConferenceableConnections);
+        for (CallbackRecord<Callback> record : mCallbackRecords) {
+            final RemoteConference conference = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onConferenceableConnectionsChanged(
+                            conference, mUnmodifiableConferenceableConnections);
+                }
+            });
         }
     }
 
     /** {@hide} */
-    void setDisconnected(DisconnectCause disconnectCause) {
+    void setDisconnected(final DisconnectCause disconnectCause) {
         if (mState != Connection.STATE_DISCONNECTED) {
             mDisconnectCause = disconnectCause;
             setState(Connection.STATE_DISCONNECTED);
-            for (Callback c : mCallbacks) {
-                c.onDisconnected(this, disconnectCause);
+            for (CallbackRecord<Callback> record : mCallbackRecords) {
+                final RemoteConference conference = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onDisconnected(conference, disconnectCause);
+                    }
+                });
             }
         }
     }
@@ -239,10 +291,24 @@
     }
 
     public final void registerCallback(Callback callback) {
-        mCallbacks.add(callback);
+        registerCallback(callback, new Handler());
+    }
+
+    public final void registerCallback(Callback callback, Handler handler) {
+        unregisterCallback(callback);
+        if (callback != null && handler != null) {
+            mCallbackRecords.add(new CallbackRecord(callback, handler));
+        }
     }
 
     public final void unregisterCallback(Callback callback) {
-        mCallbacks.remove(callback);
+        if (callback != null) {
+            for (CallbackRecord<Callback> record : mCallbackRecords) {
+                if (record.getCallback() == callback) {
+                    mCallbackRecords.remove(record);
+                    break;
+                }
+            }
+        }
     }
 }
diff --git a/telecomm/java/android/telecom/RemoteConnection.java b/telecomm/java/android/telecom/RemoteConnection.java
index 4ecfd50..9ca9f316 100644
--- a/telecomm/java/android/telecom/RemoteConnection.java
+++ b/telecomm/java/android/telecom/RemoteConnection.java
@@ -21,6 +21,7 @@
 import com.android.internal.telecom.IVideoProvider;
 
 import android.net.Uri;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.view.Surface;
@@ -349,9 +350,9 @@
             }
         }
 
-        public void sendSessionModifyRequest(VideoProfile reqProfile) {
+        public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
             try {
-                mVideoProviderBinder.sendSessionModifyRequest(reqProfile);
+                mVideoProviderBinder.sendSessionModifyRequest(fromProfile, toProfile);
             } catch (RemoteException e) {
             }
         }
@@ -392,8 +393,8 @@
      * load factor before resizing, 1 means we only expect a single thread to
      * access the map so make only a single shard
      */
-    private final Set<Callback> mCallbacks = Collections.newSetFromMap(
-            new ConcurrentHashMap<Callback, Boolean>(8, 0.9f, 1));
+    private final Set<CallbackRecord> mCallbackRecords = Collections.newSetFromMap(
+            new ConcurrentHashMap<CallbackRecord, Boolean>(8, 0.9f, 1));
     private final List<RemoteConnection> mConferenceableConnections = new ArrayList<>();
     private final List<RemoteConnection> mUnmodifiableconferenceableConnections =
             Collections.unmodifiableList(mConferenceableConnections);
@@ -470,7 +471,20 @@
      * @param callback A {@code Callback}.
      */
     public void registerCallback(Callback callback) {
-        mCallbacks.add(callback);
+        registerCallback(callback, new Handler());
+    }
+
+    /**
+     * Adds a callback to this {@code RemoteConnection}.
+     *
+     * @param callback A {@code Callback}.
+     * @param handler A {@code Handler} which command and status changes will be delivered to.
+     */
+    public void registerCallback(Callback callback, Handler handler) {
+        unregisterCallback(callback);
+        if (callback != null && handler != null) {
+            mCallbackRecords.add(new CallbackRecord(callback, handler));
+        }
     }
 
     /**
@@ -480,7 +494,12 @@
      */
     public void unregisterCallback(Callback callback) {
         if (callback != null) {
-            mCallbacks.remove(callback);
+            for (CallbackRecord record : mCallbackRecords) {
+                if (record.getCallback() == callback) {
+                    mCallbackRecords.remove(record);
+                    break;
+                }
+            }
         }
     }
 
@@ -800,11 +819,18 @@
     /**
      * @hide
      */
-    void setState(int state) {
+    void setState(final int state) {
         if (mState != state) {
             mState = state;
-            for (Callback c: mCallbacks) {
-                c.onStateChanged(this, state);
+            for (CallbackRecord record: mCallbackRecords) {
+                final RemoteConnection connection = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onStateChanged(connection, state);
+                    }
+                });
             }
         }
     }
@@ -812,13 +838,20 @@
     /**
      * @hide
      */
-    void setDisconnected(DisconnectCause disconnectCause) {
+    void setDisconnected(final DisconnectCause disconnectCause) {
         if (mState != Connection.STATE_DISCONNECTED) {
             mState = Connection.STATE_DISCONNECTED;
             mDisconnectCause = disconnectCause;
 
-            for (Callback c : mCallbacks) {
-                c.onDisconnected(this, mDisconnectCause);
+            for (CallbackRecord record : mCallbackRecords) {
+                final RemoteConnection connection = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onDisconnected(connection, disconnectCause);
+                    }
+                });
             }
         }
     }
@@ -826,11 +859,18 @@
     /**
      * @hide
      */
-    void setRingbackRequested(boolean ringback) {
+    void setRingbackRequested(final boolean ringback) {
         if (mRingbackRequested != ringback) {
             mRingbackRequested = ringback;
-            for (Callback c : mCallbacks) {
-                c.onRingbackRequested(this, ringback);
+            for (CallbackRecord record : mCallbackRecords) {
+                final RemoteConnection connection = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onRingbackRequested(connection, ringback);
+                    }
+                });
             }
         }
     }
@@ -838,10 +878,17 @@
     /**
      * @hide
      */
-    void setConnectionCapabilities(int connectionCapabilities) {
+    void setConnectionCapabilities(final int connectionCapabilities) {
         mConnectionCapabilities = connectionCapabilities;
-        for (Callback c : mCallbacks) {
-            c.onConnectionCapabilitiesChanged(this, connectionCapabilities);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onConnectionCapabilitiesChanged(connection, connectionCapabilities);
+                }
+            });
         }
     }
 
@@ -849,17 +896,24 @@
      * @hide
      */
     void setDestroyed() {
-        if (!mCallbacks.isEmpty()) {
+        if (!mCallbackRecords.isEmpty()) {
             // Make sure that the callbacks are notified that the call is destroyed first.
             if (mState != Connection.STATE_DISCONNECTED) {
                 setDisconnected(
                         new DisconnectCause(DisconnectCause.ERROR, "Connection destroyed."));
             }
 
-            for (Callback c : mCallbacks) {
-                c.onDestroyed(this);
+            for (CallbackRecord record : mCallbackRecords) {
+                final RemoteConnection connection = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onDestroyed(connection);
+                    }
+                });
             }
-            mCallbacks.clear();
+            mCallbackRecords.clear();
 
             mConnected = false;
         }
@@ -868,90 +922,162 @@
     /**
      * @hide
      */
-    void setPostDialWait(String remainingDigits) {
-        for (Callback c : mCallbacks) {
-            c.onPostDialWait(this, remainingDigits);
+    void setPostDialWait(final String remainingDigits) {
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onPostDialWait(connection, remainingDigits);
+                }
+            });
         }
     }
 
     /**
      * @hide
      */
-    void onPostDialChar(char nextChar) {
-        for (Callback c : mCallbacks) {
-            c.onPostDialChar(this, nextChar);
+    void onPostDialChar(final char nextChar) {
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onPostDialWait(connection, String.valueOf(nextChar));
+                }
+            });
         }
     }
 
     /**
      * @hide
      */
-    void setVideoState(int videoState) {
+    void setVideoState(final int videoState) {
         mVideoState = videoState;
-        for (Callback c : mCallbacks) {
-            c.onVideoStateChanged(this, videoState);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onVideoStateChanged(connection, videoState);
+                }
+            });
         }
     }
 
     /**
      * @hide
      */
-    void setVideoProvider(VideoProvider videoProvider) {
+    void setVideoProvider(final VideoProvider videoProvider) {
         mVideoProvider = videoProvider;
-        for (Callback c : mCallbacks) {
-            c.onVideoProviderChanged(this, videoProvider);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onVideoProviderChanged(connection, videoProvider);
+                }
+            });
         }
     }
 
     /** @hide */
-    void setIsVoipAudioMode(boolean isVoip) {
+    void setIsVoipAudioMode(final boolean isVoip) {
         mIsVoipAudioMode = isVoip;
-        for (Callback c : mCallbacks) {
-            c.onVoipAudioChanged(this, isVoip);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onVoipAudioChanged(connection, isVoip);
+                }
+            });
         }
     }
 
     /** @hide */
-    void setStatusHints(StatusHints statusHints) {
+    void setStatusHints(final StatusHints statusHints) {
         mStatusHints = statusHints;
-        for (Callback c : mCallbacks) {
-            c.onStatusHintsChanged(this, statusHints);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onStatusHintsChanged(connection, statusHints);
+                }
+            });
         }
     }
 
     /** @hide */
-    void setAddress(Uri address, int presentation) {
+    void setAddress(final Uri address, final int presentation) {
         mAddress = address;
         mAddressPresentation = presentation;
-        for (Callback c : mCallbacks) {
-            c.onAddressChanged(this, address, presentation);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onAddressChanged(connection, address, presentation);
+                }
+            });
         }
     }
 
     /** @hide */
-    void setCallerDisplayName(String callerDisplayName, int presentation) {
+    void setCallerDisplayName(final String callerDisplayName, final int presentation) {
         mCallerDisplayName = callerDisplayName;
         mCallerDisplayNamePresentation = presentation;
-        for (Callback c : mCallbacks) {
-            c.onCallerDisplayNameChanged(this, callerDisplayName, presentation);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onCallerDisplayNameChanged(
+                            connection, callerDisplayName, presentation);
+                }
+            });
         }
     }
 
     /** @hide */
-    void setConferenceableConnections(List<RemoteConnection> conferenceableConnections) {
+    void setConferenceableConnections(final List<RemoteConnection> conferenceableConnections) {
         mConferenceableConnections.clear();
         mConferenceableConnections.addAll(conferenceableConnections);
-        for (Callback c : mCallbacks) {
-            c.onConferenceableConnectionsChanged(this, mUnmodifiableconferenceableConnections);
+        for (CallbackRecord record : mCallbackRecords) {
+            final RemoteConnection connection = this;
+            final Callback callback = record.getCallback();
+            record.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onConferenceableConnectionsChanged(
+                            connection, mUnmodifiableconferenceableConnections);
+                }
+            });
         }
     }
 
     /** @hide */
-    void setConference(RemoteConference conference) {
+    void setConference(final RemoteConference conference) {
         if (mConference != conference) {
             mConference = conference;
-            for (Callback c : mCallbacks) {
-                c.onConferenceChanged(this, conference);
+            for (CallbackRecord record : mCallbackRecords) {
+                final RemoteConnection connection = this;
+                final Callback callback = record.getCallback();
+                record.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        callback.onConferenceChanged(connection, conference);
+                    }
+                });
             }
         }
     }
@@ -968,4 +1094,22 @@
     public static RemoteConnection failure(DisconnectCause disconnectCause) {
         return new RemoteConnection(disconnectCause);
     }
+
+    private static final class CallbackRecord extends Callback {
+        private final Callback mCallback;
+        private final Handler mHandler;
+
+        public CallbackRecord(Callback callback, Handler handler) {
+            mCallback = callback;
+            mHandler = handler;
+        }
+
+        public Callback getCallback() {
+            return mCallback;
+        }
+
+        public Handler getHandler() {
+            return mHandler;
+        }
+    }
 }
diff --git a/telecomm/java/android/telecom/RemoteConnectionService.java b/telecomm/java/android/telecom/RemoteConnectionService.java
index a9b725b..0208744 100644
--- a/telecomm/java/android/telecom/RemoteConnectionService.java
+++ b/telecomm/java/android/telecom/RemoteConnectionService.java
@@ -176,6 +176,13 @@
         }
 
         @Override
+        public void setConferenceMergeFailed(String callId) {
+            // Nothing to do here.
+            // The event has already been handled and there is no state to update
+            // in the underlying connection or conference objects
+        }
+
+        @Override
         public void addConferenceCall(
                 final String callId,
                 ParcelableConference parcel) {
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index 8d6bda8..ebd3f12 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -921,7 +921,7 @@
     public void silenceRinger() {
         try {
             if (isServiceConnected()) {
-                getTelecomService().silenceRinger();
+                getTelecomService().silenceRinger(mContext.getOpPackageName());
             }
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelecomService#silenceRinger", e);
@@ -1029,7 +1029,7 @@
         ITelecomService service = getTelecomService();
         if (service != null) {
             try {
-                return service.handlePinMmi(dialString);
+                return service.handlePinMmi(dialString, mContext.getOpPackageName());
             } catch (RemoteException e) {
                 Log.e(TAG, "Error calling ITelecomService#handlePinMmi", e);
             }
@@ -1053,7 +1053,8 @@
         ITelecomService service = getTelecomService();
         if (service != null) {
             try {
-                return service.handlePinMmiForPhoneAccount(accountHandle, dialString);
+                return service.handlePinMmiForPhoneAccount(accountHandle, dialString,
+                        mContext.getOpPackageName());
             } catch (RemoteException e) {
                 Log.e(TAG, "Error calling ITelecomService#handlePinMmi", e);
             }
@@ -1071,7 +1072,7 @@
         ITelecomService service = getTelecomService();
         if (service != null && accountHandle != null) {
             try {
-                return service.getAdnUriForPhoneAccount(accountHandle);
+                return service.getAdnUriForPhoneAccount(accountHandle, mContext.getOpPackageName());
             } catch (RemoteException e) {
                 Log.e(TAG, "Error calling ITelecomService#getAdnUriForPhoneAccount", e);
             }
@@ -1089,7 +1090,7 @@
         ITelecomService service = getTelecomService();
         if (service != null) {
             try {
-                service.cancelMissedCallsNotification();
+                service.cancelMissedCallsNotification(mContext.getOpPackageName());
             } catch (RemoteException e) {
                 Log.e(TAG, "Error calling ITelecomService#cancelMissedCallsNotification", e);
             }
@@ -1142,8 +1143,12 @@
     public void placeCall(Uri address, Bundle extras) {
         ITelecomService service = getTelecomService();
         if (service != null) {
+            if (address == null) {
+                Log.w(TAG, "Cannot place call to empty address.");
+            }
             try {
-                service.placeCall(address, extras, mContext.getOpPackageName());
+                service.placeCall(address, extras == null ? new Bundle() : extras,
+                        mContext.getOpPackageName());
             } catch (RemoteException e) {
                 Log.e(TAG, "Error calling ITelecomService#placeCall", e);
             }
diff --git a/telecomm/java/android/telecom/VideoCallImpl.java b/telecomm/java/android/telecom/VideoCallImpl.java
index 3779d1a..331f57e 100644
--- a/telecomm/java/android/telecom/VideoCallImpl.java
+++ b/telecomm/java/android/telecom/VideoCallImpl.java
@@ -36,17 +36,12 @@
  * {@hide}
  */
 public class VideoCallImpl extends VideoCall {
-    private static final int MSG_RECEIVE_SESSION_MODIFY_REQUEST = 1;
-    private static final int MSG_RECEIVE_SESSION_MODIFY_RESPONSE = 2;
-    private static final int MSG_HANDLE_CALL_SESSION_EVENT = 3;
-    private static final int MSG_CHANGE_PEER_DIMENSIONS = 4;
-    private static final int MSG_CHANGE_CALL_DATA_USAGE = 5;
-    private static final int MSG_CHANGE_CAMERA_CAPABILITIES = 6;
-    private static final int MSG_CHANGE_VIDEO_QUALITY = 7;
 
     private final IVideoProvider mVideoProvider;
     private final VideoCallListenerBinder mBinder;
     private VideoCall.Callback mCallback;
+    private int mVideoQuality = VideoProfile.QUALITY_UNKNOWN;
+    private Call mCall;
 
     private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
         @Override
@@ -61,7 +56,7 @@
     private final class VideoCallListenerBinder extends IVideoCallback.Stub {
         @Override
         public void receiveSessionModifyRequest(VideoProfile videoProfile) {
-            mHandler.obtainMessage(MSG_RECEIVE_SESSION_MODIFY_REQUEST,
+            mHandler.obtainMessage(MessageHandler.MSG_RECEIVE_SESSION_MODIFY_REQUEST,
                     videoProfile).sendToTarget();
         }
 
@@ -72,12 +67,14 @@
             args.arg1 = status;
             args.arg2 = requestProfile;
             args.arg3 = responseProfile;
-            mHandler.obtainMessage(MSG_RECEIVE_SESSION_MODIFY_RESPONSE, args).sendToTarget();
+            mHandler.obtainMessage(MessageHandler.MSG_RECEIVE_SESSION_MODIFY_RESPONSE, args)
+                    .sendToTarget();
         }
 
         @Override
         public void handleCallSessionEvent(int event) {
-            mHandler.obtainMessage(MSG_HANDLE_CALL_SESSION_EVENT, event).sendToTarget();
+            mHandler.obtainMessage(MessageHandler.MSG_HANDLE_CALL_SESSION_EVENT, event)
+                    .sendToTarget();
         }
 
         @Override
@@ -85,28 +82,42 @@
             SomeArgs args = SomeArgs.obtain();
             args.arg1 = width;
             args.arg2 = height;
-            mHandler.obtainMessage(MSG_CHANGE_PEER_DIMENSIONS, args).sendToTarget();
+            mHandler.obtainMessage(MessageHandler.MSG_CHANGE_PEER_DIMENSIONS, args).sendToTarget();
         }
 
         @Override
         public void changeVideoQuality(int videoQuality) {
-            mHandler.obtainMessage(MSG_CHANGE_VIDEO_QUALITY, videoQuality, 0).sendToTarget();
+            mHandler.obtainMessage(MessageHandler.MSG_CHANGE_VIDEO_QUALITY, videoQuality, 0)
+                    .sendToTarget();
         }
 
         @Override
         public void changeCallDataUsage(long dataUsage) {
-            mHandler.obtainMessage(MSG_CHANGE_CALL_DATA_USAGE, dataUsage).sendToTarget();
+            mHandler.obtainMessage(MessageHandler.MSG_CHANGE_CALL_DATA_USAGE, dataUsage)
+                    .sendToTarget();
         }
 
         @Override
         public void changeCameraCapabilities(CameraCapabilities cameraCapabilities) {
-            mHandler.obtainMessage(MSG_CHANGE_CAMERA_CAPABILITIES,
+            mHandler.obtainMessage(MessageHandler.MSG_CHANGE_CAMERA_CAPABILITIES,
                     cameraCapabilities).sendToTarget();
         }
     }
 
     /** Default handler used to consolidate binder method calls onto a single thread. */
-    private final Handler mHandler = new Handler(Looper.getMainLooper()) {
+    private final class MessageHandler extends Handler {
+        private static final int MSG_RECEIVE_SESSION_MODIFY_REQUEST = 1;
+        private static final int MSG_RECEIVE_SESSION_MODIFY_RESPONSE = 2;
+        private static final int MSG_HANDLE_CALL_SESSION_EVENT = 3;
+        private static final int MSG_CHANGE_PEER_DIMENSIONS = 4;
+        private static final int MSG_CHANGE_CALL_DATA_USAGE = 5;
+        private static final int MSG_CHANGE_CAMERA_CAPABILITIES = 6;
+        private static final int MSG_CHANGE_VIDEO_QUALITY = 7;
+
+        public MessageHandler(Looper looper) {
+            super(looper);
+        }
+
         @Override
         public void handleMessage(Message msg) {
             if (mCallback == null) {
@@ -152,6 +163,7 @@
                             (CameraCapabilities) msg.obj);
                     break;
                 case MSG_CHANGE_VIDEO_QUALITY:
+                    mVideoQuality = msg.arg1;
                     mCallback.onVideoQualityChanged(msg.arg1);
                     break;
                 default:
@@ -160,22 +172,42 @@
         }
     };
 
-    /** {@hide} */
-    VideoCallImpl(IVideoProvider videoProvider) throws RemoteException {
+    private Handler mHandler;
+
+    VideoCallImpl(IVideoProvider videoProvider, Call call) throws RemoteException {
         mVideoProvider = videoProvider;
         mVideoProvider.asBinder().linkToDeath(mDeathRecipient, 0);
 
         mBinder = new VideoCallListenerBinder();
         mVideoProvider.addVideoCallback(mBinder);
+        mCall = call;
+    }
+
+    public void destroy() {
+        unregisterCallback(mCallback);
     }
 
     /** {@inheritDoc} */
     public void registerCallback(VideoCall.Callback callback) {
-        mCallback = callback;
+        registerCallback(callback, null);
     }
 
     /** {@inheritDoc} */
-    public void unregisterCallback() {
+    public void registerCallback(VideoCall.Callback callback, Handler handler) {
+        mCallback = callback;
+        if (handler == null) {
+            mHandler = new MessageHandler(Looper.getMainLooper());
+        } else {
+            mHandler = new MessageHandler(handler.getLooper());
+        }
+    }
+
+    /** {@inheritDoc} */
+    public void unregisterCallback(VideoCall.Callback callback) {
+        if (callback != mCallback) {
+            return;
+        }
+
         mCallback = null;
         try {
             mVideoProvider.removeVideoCallback(mBinder);
@@ -223,10 +255,24 @@
         }
     }
 
-    /** {@inheritDoc} */
+    /**
+     * Sends a session modification request to the video provider.
+     * <p>
+     * The {@link InCallService} will create the {@code requestProfile} based on the current
+     * video state (i.e. {@link Call.Details#getVideoState()}).  It is, however, possible that the
+     * video state maintained by the {@link InCallService} could get out of sync with what is known
+     * by the {@link android.telecom.Connection.VideoProvider}.  To remove ambiguity, the
+     * {@link VideoCallImpl} passes along the pre-modify video profile to the {@code VideoProvider}
+     * to ensure it has full context of the requested change.
+     *
+     * @param requestProfile The requested video profile.
+     */
     public void sendSessionModifyRequest(VideoProfile requestProfile) {
         try {
-            mVideoProvider.sendSessionModifyRequest(requestProfile);
+            VideoProfile originalProfile = new VideoProfile(mCall.getDetails().getVideoState(),
+                    mVideoQuality);
+
+            mVideoProvider.sendSessionModifyRequest(originalProfile, requestProfile);
         } catch (RemoteException e) {
         }
     }
diff --git a/telecomm/java/android/telecom/VideoProfile.java b/telecomm/java/android/telecom/VideoProfile.java
index 2fd438a..902fddb 100644
--- a/telecomm/java/android/telecom/VideoProfile.java
+++ b/telecomm/java/android/telecom/VideoProfile.java
@@ -144,6 +144,17 @@
         dest.writeInt(mQuality);
     }
 
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[VideoProfile videoState = ");
+        sb.append(VideoState.videoStateToString(mVideoState));
+        sb.append(" videoQuality = ");
+        sb.append(mQuality);
+        sb.append("]");
+        return sb.toString();
+    }
+
     /**
     * The video state of the call, stored as a bit-field describing whether video transmission and
     * receipt it enabled, as well as whether the video is currently muted.
@@ -241,5 +252,30 @@
         private static boolean hasState(int videoState, int state) {
             return (videoState & state) == state;
         }
+
+        /**
+         * Generates a string representation of a {@link VideoState}.
+         *
+         * @param videoState The video state.
+         * @return String representation of the {@link VideoState}.
+         */
+        public static String videoStateToString(int videoState) {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Audio");
+
+            if (VideoProfile.VideoState.isTransmissionEnabled(videoState)) {
+                sb.append(" Tx");
+            }
+
+            if (VideoProfile.VideoState.isReceptionEnabled(videoState)) {
+                sb.append(" Rx");
+            }
+
+            if (VideoProfile.VideoState.isPaused(videoState)) {
+                sb.append(" Pause");
+            }
+
+            return sb.toString();
+        }
     }
 }
diff --git a/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl b/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl
index 7e7e9cc..67e2edb 100644
--- a/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl
+++ b/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl
@@ -56,6 +56,8 @@
 
     void setIsConferenced(String callId, String conferenceCallId);
 
+    void setConferenceMergeFailed(String callId);
+
     void addConferenceCall(String callId, in ParcelableConference conference);
 
     void removeCall(String callId);
diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
index 49f2aad..bc76f06 100644
--- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
+++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
@@ -154,7 +154,7 @@
     /**
      * @see TelecomServiceImpl#silenceRinger
      */
-    void silenceRinger();
+    void silenceRinger(String callingPackage);
 
     /**
      * @see TelecomServiceImpl#isInCall
@@ -184,22 +184,23 @@
     /**
      * @see TelecomServiceImpl#cancelMissedCallsNotification
      */
-    void cancelMissedCallsNotification();
+    void cancelMissedCallsNotification(String callingPackage);
 
     /**
      * @see TelecomServiceImpl#handleMmi
      */
-    boolean handlePinMmi(String dialString);
+    boolean handlePinMmi(String dialString, String callingPackage);
 
     /**
      * @see TelecomServiceImpl#handleMmi
      */
-    boolean handlePinMmiForPhoneAccount(in PhoneAccountHandle accountHandle, String dialString);
+    boolean handlePinMmiForPhoneAccount(in PhoneAccountHandle accountHandle, String dialString,
+            String callingPackage);
 
     /**
      * @see TelecomServiceImpl#getAdnUriForPhoneAccount
      */
-    Uri getAdnUriForPhoneAccount(in PhoneAccountHandle accountHandle);
+    Uri getAdnUriForPhoneAccount(in PhoneAccountHandle accountHandle, String callingPackage);
 
     /**
      * @see TelecomServiceImpl#isTtySupported
diff --git a/telecomm/java/com/android/internal/telecom/IVideoProvider.aidl b/telecomm/java/com/android/internal/telecom/IVideoProvider.aidl
index bff3865..d095744 100644
--- a/telecomm/java/com/android/internal/telecom/IVideoProvider.aidl
+++ b/telecomm/java/com/android/internal/telecom/IVideoProvider.aidl
@@ -39,7 +39,7 @@
 
     void setZoom(float value);
 
-    void sendSessionModifyRequest(in VideoProfile reqProfile);
+    void sendSessionModifyRequest(in VideoProfile fromProfile, in VideoProfile toProfile);
 
     void sendSessionModifyResponse(in VideoProfile responseProfile);
 
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index cdecb33..303a492 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -1104,6 +1104,58 @@
                 || radioTechnology == RIL_RADIO_TECHNOLOGY_EHRPD;
     }
 
+    /** @hide */
+    public static boolean hasCdma(int radioTechnologyBitmask) {
+        int cdmaBitmask = (RIL_RADIO_TECHNOLOGY_IS95A
+                | RIL_RADIO_TECHNOLOGY_IS95B
+                | RIL_RADIO_TECHNOLOGY_1xRTT
+                | RIL_RADIO_TECHNOLOGY_EVDO_0
+                | RIL_RADIO_TECHNOLOGY_EVDO_A
+                | RIL_RADIO_TECHNOLOGY_EVDO_B
+                | RIL_RADIO_TECHNOLOGY_EHRPD);
+
+        return ((radioTechnologyBitmask & cdmaBitmask) != 0);
+    }
+
+    /** @hide */
+    public static boolean bitmaskHasTech(int bearerBitmask, int radioTech) {
+        if (bearerBitmask == 0) {
+            return true;
+        } else if (radioTech >= 1) {
+            return ((bearerBitmask & (1 << (radioTech - 1))) != 0);
+        }
+        return false;
+    }
+
+    /** @hide */
+    public static int getBitmaskForTech(int radioTech) {
+        if (radioTech >= 1) {
+            return (1 << (radioTech - 1));
+        }
+        return 0;
+    }
+
+    /** @hide */
+    public static int getBitmaskFromString(String bearerList) {
+        String[] bearers = bearerList.split("\\|");
+        int bearerBitmask = 0;
+        for (String bearer : bearers) {
+            int bearerInt = 0;
+            try {
+                bearerInt = Integer.parseInt(bearer.trim());
+            } catch (NumberFormatException nfe) {
+                return 0;
+            }
+
+            if (bearerInt == 0) {
+                return 0;
+            }
+
+            bearerBitmask |= getBitmaskForTech(bearerInt);
+        }
+        return bearerBitmask;
+    }
+
     /**
      * Returns a merged ServiceState consisting of the base SS with voice settings from the
      * voice SS. The voice SS is only used if it is IN_SERVICE (otherwise the base SS is returned).
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index e4c003a..33e52bf 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -1129,5 +1129,19 @@
         logd("getSimStateForSubscriber: simState=" + simState + " subId=" + subId);
         return simState;
     }
+
+    /**
+     * @return true if the sub ID is active. i.e. The sub ID corresponds to a known subscription
+     * and the SIM providing the subscription is present in a slot and in "LOADED" state.
+     * @hide
+     */
+    public boolean isActiveSubId(int subId) {
+        try {
+            ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
+            return iSub.isActiveSubId(subId);
+        } catch (RemoteException ex) {
+        }
+        return false;
+    }
 }
 
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index ee7f0ea..d674b31 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -3703,7 +3703,7 @@
     @SystemApi
     public void silenceRinger() {
         try {
-            getTelecomService().silenceRinger();
+            getTelecomService().silenceRinger(mContext.getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelecomService#silenceRinger", e);
         }
diff --git a/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl b/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl
index 1fd88e7..4ff0b43 100644
--- a/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl
+++ b/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl
@@ -52,7 +52,7 @@
 
     void setZoom(float value);
 
-    void sendSessionModifyRequest(in VideoProfile reqProfile);
+    void sendSessionModifyRequest(in VideoProfile fromProfile, in VideoProfile toProfile);
 
     void sendSessionModifyResponse(in VideoProfile responseProfile);
 
diff --git a/telephony/java/com/android/internal/telephony/ISms.aidl b/telephony/java/com/android/internal/telephony/ISms.aidl
index 24bdb7a..21c94c2 100644
--- a/telephony/java/com/android/internal/telephony/ISms.aidl
+++ b/telephony/java/com/android/internal/telephony/ISms.aidl
@@ -37,13 +37,6 @@
 interface ISms {
     /**
      * Retrieves all messages currently stored on ICC.
-     *
-     * @return list of SmsRawData of all sms on ICC
-     */
-     List<SmsRawData> getAllMessagesFromIccEf(String callingPkg);
-
-    /**
-     * Retrieves all messages currently stored on ICC.
      * @param subId the subId id.
      * @return list of SmsRawData of all sms on ICC
      */
@@ -57,20 +50,6 @@
      *                  STATUS_ON_ICC_UNREAD, STATUS_ON_ICC_SENT,
      *                  STATUS_ON_ICC_UNSENT, STATUS_ON_ICC_FREE)
      * @param pdu the raw PDU to store
-     * @return success or not
-     *
-     */
-     boolean updateMessageOnIccEf(String callingPkg, int messageIndex, int newStatus,
-            in byte[] pdu);
-
-    /**
-     * Update the specified message on the ICC.
-     *
-     * @param messageIndex record index of message to update
-     * @param newStatus new message status (STATUS_ON_ICC_READ,
-     *                  STATUS_ON_ICC_UNREAD, STATUS_ON_ICC_SENT,
-     *                  STATUS_ON_ICC_UNSENT, STATUS_ON_ICC_FREE)
-     * @param pdu the raw PDU to store
      * @param subId the subId id.
      * @return success or not
      *
@@ -84,17 +63,6 @@
      * @param pdu the raw PDU to store
      * @param status message status (STATUS_ON_ICC_READ, STATUS_ON_ICC_UNREAD,
      *               STATUS_ON_ICC_SENT, STATUS_ON_ICC_UNSENT)
-     * @return success or not
-     *
-     */
-    boolean copyMessageToIccEf(String callingPkg, int status, in byte[] pdu, in byte[] smsc);
-
-    /**
-     * Copy a raw SMS PDU to the ICC.
-     *
-     * @param pdu the raw PDU to store
-     * @param status message status (STATUS_ON_ICC_READ, STATUS_ON_ICC_UNREAD,
-     *               STATUS_ON_ICC_SENT, STATUS_ON_ICC_UNSENT)
      * @param subId the subId id.
      * @return success or not
      *
@@ -124,32 +92,6 @@
      * @param deliveryIntent if not NULL this <code>PendingIntent</code> is
      *  broadcast when the message is delivered to the recipient.  The
      *  raw pdu of the status report is in the extended data ("pdu").
-     */
-    void sendData(String callingPkg, in String destAddr, in String scAddr, in int destPort,
-            in byte[] data, in PendingIntent sentIntent, in PendingIntent deliveryIntent);
-
-    /**
-     * Send a data SMS.
-     *
-     * @param smsc the SMSC to send the message through, or NULL for the
-     *  default SMSC
-     * @param data the body of the message to send
-     * @param sentIntent if not NULL this <code>PendingIntent</code> is
-     *  broadcast when the message is sucessfully sent, or failed.
-     *  The result code will be <code>Activity.RESULT_OK<code> for success,
-     *  or one of these errors:<br>
-     *  <code>RESULT_ERROR_GENERIC_FAILURE</code><br>
-     *  <code>RESULT_ERROR_RADIO_OFF</code><br>
-     *  <code>RESULT_ERROR_NULL_PDU</code><br>
-     *  For <code>RESULT_ERROR_GENERIC_FAILURE</code> the sentIntent may include
-     *  the extra "errorCode" containing a radio technology specific value,
-     *  generally only useful for troubleshooting.<br>
-     *  The per-application based SMS control checks sentIntent. If sentIntent
-     *  is NULL the caller will be checked against all unknown applicaitons,
-     *  which cause smaller number of SMS to be sent in checking period.
-     * @param deliveryIntent if not NULL this <code>PendingIntent</code> is
-     *  broadcast when the message is delivered to the recipient.  The
-     *  raw pdu of the status report is in the extended data ("pdu").
      * @param subId the subId id.
      */
     void sendDataForSubscriber(int subId, String callingPkg, in String destAddr,
@@ -206,32 +148,6 @@
      * @param deliveryIntent if not NULL this <code>PendingIntent</code> is
      *  broadcast when the message is delivered to the recipient.  The
      *  raw pdu of the status report is in the extended data ("pdu").
-     */
-    void sendText(String callingPkg, in String destAddr, in String scAddr, in String text,
-            in PendingIntent sentIntent, in PendingIntent deliveryIntent);
-
-    /**
-     * Send an SMS.
-     *
-     * @param smsc the SMSC to send the message through, or NULL for the
-     *  default SMSC
-     * @param text the body of the message to send
-     * @param sentIntent if not NULL this <code>PendingIntent</code> is
-     *  broadcast when the message is sucessfully sent, or failed.
-     *  The result code will be <code>Activity.RESULT_OK<code> for success,
-     *  or one of these errors:<br>
-     *  <code>RESULT_ERROR_GENERIC_FAILURE</code><br>
-     *  <code>RESULT_ERROR_RADIO_OFF</code><br>
-     *  <code>RESULT_ERROR_NULL_PDU</code><br>
-     *  For <code>RESULT_ERROR_GENERIC_FAILURE</code> the sentIntent may include
-     *  the extra "errorCode" containing a radio technology specific value,
-     *  generally only useful for troubleshooting.<br>
-     *  The per-application based SMS control checks sentIntent. If sentIntent
-     *  is NULL the caller will be checked against all unknown applications,
-     *  which cause smaller number of SMS to be sent in checking period.
-     * @param deliveryIntent if not NULL this <code>PendingIntent</code> is
-     *  broadcast when the message is delivered to the recipient.  The
-     *  raw pdu of the status report is in the extended data ("pdu").
      * @param subId the subId on which the SMS has to be sent.
      */
     void sendTextForSubscriber(in int subId, String callingPkg, in String destAddr,
@@ -269,6 +185,7 @@
     /**
      * Inject an SMS PDU into the android platform.
      *
+     * @param subId the subId on which the SMS has to be injected.
      * @param pdu is the byte array of pdu to be injected into android application framework
      * @param format is the format of SMS pdu (android.telephony.SmsMessage.FORMAT_3GPP or
      * android.telephony.SmsMessage.FORMAT_3GPP2)
@@ -277,33 +194,8 @@
      *  android application framework. This intent is broadcasted at
      *  the same time an SMS received from radio is acknowledged back.
      */
-    void injectSmsPdu(in byte[] pdu, String format, in PendingIntent receivedIntent);
-
-    /**
-     * Send a multi-part text based SMS.
-     *
-     * @param destinationAddress the address to send the message to
-     * @param scAddress is the service center address or null to use
-     *   the current default SMSC
-     * @param parts an <code>ArrayList</code> of strings that, in order,
-     *   comprise the original message
-     * @param sentIntents if not null, an <code>ArrayList</code> of
-     *   <code>PendingIntent</code>s (one for each message part) that is
-     *   broadcast when the corresponding message part has been sent.
-     *   The result code will be <code>Activity.RESULT_OK<code> for success,
-     *   or one of these errors:
-     *   <code>RESULT_ERROR_GENERIC_FAILURE</code>
-     *   <code>RESULT_ERROR_RADIO_OFF</code>
-     *   <code>RESULT_ERROR_NULL_PDU</code>.
-     * @param deliveryIntents if not null, an <code>ArrayList</code> of
-     *   <code>PendingIntent</code>s (one for each message part) that is
-     *   broadcast when the corresponding message part has been delivered
-     *   to the recipient.  The raw pdu of the status report is in the
-     *   extended data ("pdu").
-     */
-    void sendMultipartText(String callingPkg, in String destinationAddress, in String scAddress,
-            in List<String> parts, in List<PendingIntent> sentIntents,
-            in List<PendingIntent> deliveryIntents);
+    void injectSmsPduForSubscriber(
+            int subId, in byte[] pdu, String format, in PendingIntent receivedIntent);
 
     /**
      * Send a multi-part text based SMS.
@@ -342,31 +234,13 @@
      *
      * @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP) or
      *   C.R1001-G (3GPP2)
-     * @param ranType as defined in class SmsManager, the value can be one of these:
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
-     * @return true if successful, false otherwise
-     *
-     * @see #disableCellBroadcast(int, int)
-     */
-    boolean enableCellBroadcast(int messageIdentifier, int ranType);
-
-    /**
-     * Enable reception of cell broadcast (SMS-CB) messages with the given
-     * message identifier and RAN type. The RAN type specify this message ID
-     * belong to 3GPP (GSM) or 3GPP2(CDMA). Note that if two different clients
-     * enable the same message identifier, they must both disable it for the
-     * device to stop receiving those messages.
-     *
-     * @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP) or
-     *   C.R1001-G (3GPP2)
      * @param subId for which the broadcast has to be enabled
      * @param ranType as defined in class SmsManager, the value can be one of these:
      *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
      *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
      * @return true if successful, false otherwise
      *
-     * @see #disableCellBroadcast(int, int)
+     * @see #disableCellBroadcastForSubscriber(int, int, int)
      */
     boolean enableCellBroadcastForSubscriber(int subId, int messageIdentifier, int ranType);
 
@@ -379,56 +253,18 @@
      *
      * @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP) or
      *   C.R1001-G (3GPP2)
-     * @param ranType as defined in class SmsManager, the value can be one of these:
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
-     * @return true if successful, false otherwise
-     *
-     * @see #enableCellBroadcast(int, int)
-     */
-    boolean disableCellBroadcast(int messageIdentifier, int ranType);
-
-    /**
-     * Disable reception of cell broadcast (SMS-CB) messages with the given
-     * message identifier and RAN type. The RAN type specify this message ID
-     * belong to 3GPP (GSM) or 3GPP2(CDMA). Note that if two different clients
-     * enable the same message identifier, they must both disable it for the
-     * device to stop receiving those messages.
-     *
-     * @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP) or
-     *   C.R1001-G (3GPP2)
      * @param subId for which the broadcast has to be disabled
      * @param ranType as defined in class SmsManager, the value can be one of these:
      *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
      *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
      * @return true if successful, false otherwise
      *
-     * @see #enableCellBroadcast(int, int)
+     * @see #enableCellBroadcastForSubscriber(int, int, int)
      */
     boolean disableCellBroadcastForSubscriber(int subId, int messageIdentifier, int ranType);
 
     /*
      * Enable reception of cell broadcast (SMS-CB) messages with the given
-     * message identifier range and RAN type. The RAN type specify this message
-     * ID range belong to 3GPP (GSM) or 3GPP2(CDMA). Note that if two different
-     * clients enable a message identifier range, they must both disable it for
-     * the device to stop receiving those messages.
-     *
-     * @param startMessageId first message identifier as specified in TS 23.041 (3GPP) or
-     *   C.R1001-G (3GPP2)
-     * @param endMessageId last message identifier as specified in TS 23.041 (3GPP) or
-     *   C.R1001-G (3GPP2)
-     * @param ranType as defined in class SmsManager, the value can be one of these:
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
-     * @return true if successful, false otherwise
-     *
-     * @see #disableCellBroadcastRange(int, int, int)
-     */
-    boolean enableCellBroadcastRange(int startMessageId, int endMessageId, int ranType);
-
-    /*
-     * Enable reception of cell broadcast (SMS-CB) messages with the given
      * message identifier range and RAN type. The RAN type specify this message ID range
      * belong to 3GPP (GSM) or 3GPP2(CDMA). Note that if two different clients enable
      * a message identifier range, they must both disable it for the device
@@ -444,7 +280,7 @@
      *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
      * @return true if successful, false otherwise
      *
-     * @see #disableCellBroadcastRange(int, int, int)
+     * @see #disableCellBroadcastRangeForSubscriber(int, int, int, int)
      */
     boolean enableCellBroadcastRangeForSubscriber(int subId, int startMessageId, int endMessageId,
             int ranType);
@@ -460,33 +296,13 @@
      *   C.R1001-G (3GPP2)
      * @param endMessageId last message identifier as specified in TS 23.041 (3GPP) or
      *   C.R1001-G (3GPP2)
-     * @param ranType as defined in class SmsManager, the value can be one of these:
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
-     *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
-     * @return true if successful, false otherwise
-     *
-     * @see #enableCellBroadcastRange(int, int, int)
-     */
-    boolean disableCellBroadcastRange(int startMessageId, int endMessageId, int ranType);
-
-    /**
-     * Disable reception of cell broadcast (SMS-CB) messages with the given
-     * message identifier range and RAN type. The RAN type specify this message ID range
-     * belong to 3GPP (GSM) or 3GPP2(CDMA). Note that if two different clients enable
-     * a message identifier range, they must both disable it for the device
-     * to stop receiving those messages.
-     *
-     * @param startMessageId first message identifier as specified in TS 23.041 (3GPP) or
-     *   C.R1001-G (3GPP2)
-     * @param endMessageId last message identifier as specified in TS 23.041 (3GPP) or
-     *   C.R1001-G (3GPP2)
      * @param subId for which the broadcast has to be disabled
      * @param ranType as defined in class SmsManager, the value can be one of these:
      *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
      *    android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
      * @return true if successful, false otherwise
      *
-     * @see #enableCellBroadcastRange(int, int, int, int)
+     * @see #enableCellBroadcastRangeForSubscriber(int, int, int, int)
      */
     boolean disableCellBroadcastRangeForSubscriber(int subId, int startMessageId,
             int endMessageId, int ranType);
@@ -518,20 +334,10 @@
     /**
      * SMS over IMS is supported if IMS is registered and SMS is supported
      * on IMS.
-     *
-     * @return true if SMS over IMS is supported, false otherwise
-     *
-     * @see #getImsSmsFormat()
-     */
-    boolean isImsSmsSupported();
-
-    /**
-     * SMS over IMS is supported if IMS is registered and SMS is supported
-     * on IMS.
      * @param subId for subId which isImsSmsSupported is queried
      * @return true if SMS over IMS is supported, false otherwise
      *
-     * @see #getImsSmsFormat()
+     * @see #getImsSmsFormatForSubscriber(int)
      */
     boolean isImsSmsSupportedForSubscriber(int subId);
 
@@ -552,24 +358,12 @@
     /**
      * Gets SMS format supported on IMS.  SMS over IMS format is
      * either 3GPP or 3GPP2.
-     *
-     * @return android.telephony.SmsMessage.FORMAT_3GPP,
-     *         android.telephony.SmsMessage.FORMAT_3GPP2
-     *      or android.telephony.SmsMessage.FORMAT_UNKNOWN
-     *
-     * @see #isImsSmsSupported()
-     */
-    String getImsSmsFormat();
-
-    /**
-     * Gets SMS format supported on IMS.  SMS over IMS format is
-     * either 3GPP or 3GPP2.
      * @param subId for subId which getImsSmsFormat is queried
      * @return android.telephony.SmsMessage.FORMAT_3GPP,
      *         android.telephony.SmsMessage.FORMAT_3GPP2
      *      or android.telephony.SmsMessage.FORMAT_UNKNOWN
      *
-     * @see #isImsSmsSupported()
+     * @see #isImsSmsSupportedForSubscriber(int)
      */
     String getImsSmsFormatForSubscriber(int subId);
 
diff --git a/telephony/java/com/android/internal/telephony/ISub.aidl b/telephony/java/com/android/internal/telephony/ISub.aidl
index 3f8aca0..1037f2d 100755
--- a/telephony/java/com/android/internal/telephony/ISub.aidl
+++ b/telephony/java/com/android/internal/telephony/ISub.aidl
@@ -185,4 +185,5 @@
      */
     int getSimStateForSubscriber(int subId);
 
+    boolean isActiveSubId(int subId);
 }
diff --git a/telephony/java/com/android/internal/telephony/PhoneConstants.java b/telephony/java/com/android/internal/telephony/PhoneConstants.java
index 0ebd719..2a4032c 100644
--- a/telephony/java/com/android/internal/telephony/PhoneConstants.java
+++ b/telephony/java/com/android/internal/telephony/PhoneConstants.java
@@ -150,6 +150,10 @@
 
     public static final String SLOT_KEY  = "slot";
 
+    /** Fired when a subscriptions phone state changes. */
+    public static final String ACTION_SUBSCRIPTION_PHONE_STATE_CHANGED =
+        "android.intent.action.SUBSCRIPTION_PHONE_STATE";
+
     // FIXME: This is used to pass a subId via intents, we need to look at its usage, which is
     // FIXME: extensive, and see if this should be an array of all active subId's or ...?
     public static final String SUBSCRIPTION_KEY  = "subscription";
diff --git a/telephony/java/com/android/internal/telephony/TelephonyIntents.java b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
index 85a489b..f563839 100644
--- a/telephony/java/com/android/internal/telephony/TelephonyIntents.java
+++ b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
@@ -317,6 +317,7 @@
     public static final String EXTRA_PLMN       = "plmn";
     public static final String EXTRA_SHOW_SPN   = "showSpn";
     public static final String EXTRA_SPN        = "spn";
+    public static final String EXTRA_DATA_SPN   = "spnData";
 
     /**
      * <p>Broadcast Action: It indicates one column of a subinfo record has been changed
diff --git a/tests/Assist/AndroidManifest.xml b/tests/Assist/AndroidManifest.xml
index 4eceed9..9d4c4ad 100644
--- a/tests/Assist/AndroidManifest.xml
+++ b/tests/Assist/AndroidManifest.xml
@@ -30,10 +30,20 @@
             <meta-data
                 android:name="com.android.systemui.action_assist_icon"
                 android:resource="@drawable/assistant" />
+            <meta-data
+                android:name="com.android.keyguard.layout"
+                android:resource="@layout/keyguard_preview" />
         </service>
         <service android:name="AssistInteractionSessionService"
                 android:permission="android.permission.BIND_VOICE_INTERACTION"
                 android:process=":session">
         </service>
+        <activity android:name=".AboveKeyguardActivity"
+                  android:label="Test Above Keyguard Activity"
+                  android:theme="@android:style/Theme.NoTitleBar"
+                  android:excludeFromRecents="true"
+                  android:launchMode="singleTask"
+                  android:exported="false" >
+        </activity>
     </application>
 </manifest>
diff --git a/tests/Assist/res/layout/keyguard_preview.xml b/tests/Assist/res/layout/keyguard_preview.xml
new file mode 100644
index 0000000..d56c52e
--- /dev/null
+++ b/tests/Assist/res/layout/keyguard_preview.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2015 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent"
+             android:orientation="vertical"
+             android:background="#d3d3d3">
+
+    <View
+        android:id="@+id/background"
+        android:layout_width="match_parent"
+        android:layout_height="350dp"
+        android:layout_gravity="bottom"
+        android:elevation="30dp"
+        android:background="#e0e0e0"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="350dp"
+        android:orientation="vertical"
+        android:elevation="30dp"
+        android:layout_gravity="bottom">
+
+        <FrameLayout
+            android:id="@+id/card1"
+            android:layout_width="match_parent"
+            android:layout_height="150dp"
+            android:layout_marginStart="8dp"
+            android:layout_marginEnd="8dp"
+            android:layout_marginTop="16dp"
+            android:elevation="3dp"
+            android:background="@drawable/round_rect">
+        </FrameLayout>
+
+        <View
+            android:id="@+id/card2"
+            android:layout_width="match_parent"
+            android:layout_height="200dp"
+            android:layout_marginStart="8dp"
+            android:layout_marginEnd="8dp"
+            android:layout_marginTop="16dp"
+            android:elevation="3dp"
+            android:background="@drawable/round_rect"/>
+
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/tests/Assist/res/xml/interaction_service.xml b/tests/Assist/res/xml/interaction_service.xml
index 2fd50aa..a90c824 100644
--- a/tests/Assist/res/xml/interaction_service.xml
+++ b/tests/Assist/res/xml/interaction_service.xml
@@ -18,4 +18,5 @@
 <voice-interaction-service xmlns:android="http://schemas.android.com/apk/res/android"
     android:sessionService="com.android.test.assist.AssistInteractionSessionService"
     android:recognitionService="com.android.test.assist.AssistRecognitionService"
-    android:supportsAssistGesture="true"/>
+    android:supportsAssist="true"
+    android:supportsLaunchVoiceAssistFromKeyguard="true"/>
diff --git a/tests/Assist/src/com/android/test/assist/AboveKeyguardActivity.java b/tests/Assist/src/com/android/test/assist/AboveKeyguardActivity.java
new file mode 100644
index 0000000..3e37345
--- /dev/null
+++ b/tests/Assist/src/com/android/test/assist/AboveKeyguardActivity.java
@@ -0,0 +1,37 @@
+/*
+ * 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.test.assist;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.WindowManager;
+
+import com.android.test.assist.R;
+
+/**
+ * An activity which can be shown above the keyguard.
+ */
+public class AboveKeyguardActivity extends Activity {
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+        setContentView(R.layout.keyguard_preview);
+    }
+}
diff --git a/tests/Assist/src/com/android/test/assist/AssistInteractionService.java b/tests/Assist/src/com/android/test/assist/AssistInteractionService.java
index e6a6713..bf40747 100644
--- a/tests/Assist/src/com/android/test/assist/AssistInteractionService.java
+++ b/tests/Assist/src/com/android/test/assist/AssistInteractionService.java
@@ -16,8 +16,15 @@
 
 package com.android.test.assist;
 
+import android.content.Intent;
 import android.service.voice.VoiceInteractionService;
 
 public class AssistInteractionService extends VoiceInteractionService {
-
+    @Override
+    public void onLaunchVoiceAssistFromKeyguard() {
+        super.onLaunchVoiceAssistFromKeyguard();
+        Intent intent = new Intent(this, AboveKeyguardActivity.class);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        startActivity(intent);
+    }
 }
diff --git a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
index dd823ae..1f9e636 100644
--- a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
+++ b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
@@ -30,6 +30,7 @@
 
 import junit.framework.Assert;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -102,7 +103,11 @@
             // otherwise raise an
             // exception with the first error encountered.
             assertNull(getStackTrace(err), err);
-            assertTrue("App crashed after launch.", processStillUp(packageName));
+            try {
+                assertTrue("App crashed after launch.", processStillUp(packageName));
+            } finally {
+                returnHome();
+            }
         } else {
             Log.d(TAG, "Missing argument, use " + PACKAGE_TO_LAUNCH +
                     " to specify the package to launch");
@@ -138,6 +143,19 @@
         }
     }
 
+    private void returnHome() {
+        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
+        homeIntent.addCategory(Intent.CATEGORY_HOME);
+        homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        // Send the "home" intent and wait 2 seconds for us to get there
+        mContext.startActivity(homeIntent);
+        try {
+            Thread.sleep(mWorkspaceLaunchTimeout);
+        } catch (InterruptedException e) {
+            // ignore
+        }
+    }
+
     /**
      * Launches and activity and queries for errors.
      *
@@ -150,9 +168,6 @@
         // the recommended way to see if this is a tv or not.
         boolean isleanback = !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)
             && !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
-        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
-        homeIntent.addCategory(Intent.CATEGORY_HOME);
-        homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         Intent intent;
         if (isleanback) {
             Log.d(TAG, "Leanback and relax! " + packageName);
@@ -173,14 +188,6 @@
             // ignore
         }
 
-        // Send the "home" intent and wait 2 seconds for us to get there
-        mContext.startActivity(homeIntent);
-        try {
-            Thread.sleep(mWorkspaceLaunchTimeout);
-        } catch (InterruptedException e) {
-            // ignore
-        }
-
         // See if there are any errors. We wait until down here to give ANRs as
         // much time as
         // possible to occur.
@@ -198,6 +205,13 @@
         return null;
     }
 
+    private boolean ensureForegroundActivity(RunningAppProcessInfo info) {
+        Log.d(TAG, String.format("ensureForegroundActivity: proc=%s, pid=%d, state=%d",
+                info.processName, info.pid, info.processState));
+        return info.processState == ActivityManager.PROCESS_STATE_TOP
+            || info.processState == ActivityManager.PROCESS_STATE_TOP_SLEEPING;
+    }
+
     /**
      * Determine if a given package is still running.
      *
@@ -207,19 +221,32 @@
     private boolean processStillUp(String packageName) {
         String processName = getProcessName(packageName);
         List<RunningAppProcessInfo> runningApps = mActivityManager.getRunningAppProcesses();
+        List<RunningAppProcessInfo> relatedProcs = new ArrayList<>();
         for (RunningAppProcessInfo app : runningApps) {
             if (app.processName.equalsIgnoreCase(processName)) {
-                Log.d(TAG, "Found process " + app.processName);
+                if (!ensureForegroundActivity(app)) {
+                    Log.w(TAG, "Found process but it's not top activity.");
+                    return false;
+                }
                 return true;
             }
             for (String relatedPackage : app.pkgList) {
-                if (relatedPackage.equalsIgnoreCase(processName)) {
-                    Log.d(TAG, "Found process " + app.processName);
-                    return true;
+                if (relatedPackage.equalsIgnoreCase(packageName)) {
+                    relatedProcs.add(app);
                 }
             }
         }
-        Log.d(TAG, "Failed to find process " + processName + " with package name "
+        // now that we are here, we've found no RAPI's directly matching processName, but
+        // potentially a List of them with one of related packages being processName
+        if (!relatedProcs.isEmpty()) {
+            for (RunningAppProcessInfo app : relatedProcs) {
+                if (ensureForegroundActivity(app)) {
+                    return true;
+                }
+            }
+            Log.w(TAG, "Found related processes, but none has top activity.");
+        }
+        Log.w(TAG, "Failed to find process " + processName + " with package name "
                 + packageName);
         return false;
     }
diff --git a/tests/HierarchyViewerTest/.gitignore b/tests/HierarchyViewerTest/.gitignore
new file mode 100644
index 0000000..75eec98
--- /dev/null
+++ b/tests/HierarchyViewerTest/.gitignore
@@ -0,0 +1,6 @@
+.gradle
+.idea
+*.iml
+gradle*
+build
+local.properties
diff --git a/tests/HierarchyViewerTest/Android.mk b/tests/HierarchyViewerTest/Android.mk
new file mode 100644
index 0000000..07b90f0
--- /dev/null
+++ b/tests/HierarchyViewerTest/Android.mk
@@ -0,0 +1,12 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := HierarchyViewerTest
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+include $(BUILD_PACKAGE)
diff --git a/tests/HierarchyViewerTest/AndroidManifest.xml b/tests/HierarchyViewerTest/AndroidManifest.xml
new file mode 100644
index 0000000..65f2fd3
--- /dev/null
+++ b/tests/HierarchyViewerTest/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<!--
+  ~ 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
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.test.hierarchyviewer">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+
+        <activity
+            android:name=".MainActivity"
+            android:label="HvTest" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+    <instrumentation
+        android:name="android.test.InstrumentationTestRunner"
+        android:targetPackage="com.android.test.hierarchyviewer" />
+</manifest>
diff --git a/tests/HierarchyViewerTest/build.gradle b/tests/HierarchyViewerTest/build.gradle
new file mode 100644
index 0000000..e8cdfa2
--- /dev/null
+++ b/tests/HierarchyViewerTest/build.gradle
@@ -0,0 +1,31 @@
+buildscript {
+    repositories {
+        jcenter()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.1.0+'
+
+    }
+}
+
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 21
+    buildToolsVersion "22.0.0"
+
+    defaultConfig {
+        minSdkVersion 21
+        targetSdkVersion 21
+        versionCode 1
+        versionName "1.0"
+    }
+
+    sourceSets {
+	main {
+	    manifest.srcFile 'AndroidManifest.xml'
+	    java.srcDirs = ['src']
+	    res.srcDirs = ['res']
+	}
+    }
+}
diff --git a/tests/HierarchyViewerTest/res/layout/activity_main.xml b/tests/HierarchyViewerTest/res/layout/activity_main.xml
new file mode 100644
index 0000000..410a776
--- /dev/null
+++ b/tests/HierarchyViewerTest/res/layout/activity_main.xml
@@ -0,0 +1,12 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:scaleX="10"
+        android:text="@string/test" />
+
+</RelativeLayout>
diff --git a/tests/HierarchyViewerTest/res/menu/menu_main.xml b/tests/HierarchyViewerTest/res/menu/menu_main.xml
new file mode 100644
index 0000000..9b78a1e
--- /dev/null
+++ b/tests/HierarchyViewerTest/res/menu/menu_main.xml
@@ -0,0 +1,5 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
+    <item android:id="@+id/action_settings" android:title="Settings"
+        android:orderInCategory="100" android:showAsAction="never" />
+</menu>
diff --git a/tests/HierarchyViewerTest/res/values/strings.xml b/tests/HierarchyViewerTest/res/values/strings.xml
new file mode 100644
index 0000000..800ee1c
--- /dev/null
+++ b/tests/HierarchyViewerTest/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="test">Hello World</string>
+</resources>
\ No newline at end of file
diff --git a/tests/HierarchyViewerTest/run_tests.sh b/tests/HierarchyViewerTest/run_tests.sh
new file mode 100644
index 0000000..094bb4c
--- /dev/null
+++ b/tests/HierarchyViewerTest/run_tests.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+# Runs the tests in this apk
+adb install $OUT/data/app/HierarchyViewerTest/HierarchyViewerTest.apk
+adb shell am instrument -w com.android.test.hierarchyviewer/android.test.InstrumentationTestRunner
diff --git a/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/Decoder.java b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/Decoder.java
new file mode 100644
index 0000000..c6f1470
--- /dev/null
+++ b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/Decoder.java
@@ -0,0 +1,101 @@
+package com.android.test.hierarchyviewer;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Decoder {
+    // Prefixes for simple primitives. These match the JNI definitions.
+    public static final byte SIG_BOOLEAN = 'Z';
+    public static final byte SIG_BYTE = 'B';
+    public static final byte SIG_SHORT = 'S';
+    public static final byte SIG_INT = 'I';
+    public static final byte SIG_LONG = 'J';
+    public static final byte SIG_FLOAT = 'F';
+    public static final byte SIG_DOUBLE = 'D';
+
+    // Prefixes for some commonly used objects
+    public static final byte SIG_STRING = 'R';
+
+    public static final byte SIG_MAP = 'M'; // a map with an short key
+    public static final short SIG_END_MAP = 0;
+
+    private final ByteBuffer mBuf;
+
+    public Decoder(byte[] buf) {
+        this(ByteBuffer.wrap(buf));
+    }
+
+    public Decoder(ByteBuffer buf) {
+        mBuf = buf;
+    }
+
+    public boolean hasRemaining() {
+        return mBuf.hasRemaining();
+    }
+
+    public Object readObject() {
+        byte sig = mBuf.get();
+
+        switch (sig) {
+            case SIG_BOOLEAN:
+                return mBuf.get() == 0 ? Boolean.FALSE : Boolean.TRUE;
+            case SIG_BYTE:
+                return mBuf.get();
+            case SIG_SHORT:
+                return mBuf.getShort();
+            case SIG_INT:
+                return mBuf.getInt();
+            case SIG_LONG:
+                return mBuf.getLong();
+            case SIG_FLOAT:
+                return mBuf.getFloat();
+            case SIG_DOUBLE:
+                return mBuf.getDouble();
+            case SIG_STRING:
+                return readString();
+            case SIG_MAP:
+                return readMap();
+            default:
+                throw new DecoderException(sig, mBuf.position() - 1);
+        }
+    }
+
+    private String readString() {
+        short len = mBuf.getShort();
+        byte[] b = new byte[len];
+        mBuf.get(b, 0, len);
+        return new String(b, Charset.forName("utf-8"));
+    }
+
+    private Map<Short, Object> readMap() {
+        Map<Short, Object> m = new HashMap<Short, Object>();
+
+        while (true) {
+            Object o = readObject();
+            if (!(o instanceof Short)) {
+                throw new DecoderException("Expected short key, got " + o.getClass());
+            }
+
+            Short key = (Short)o;
+            if (key == SIG_END_MAP) {
+                break;
+            }
+
+            m.put(key, readObject());
+        }
+
+        return m;
+    }
+
+    public static class DecoderException extends RuntimeException {
+        public DecoderException(byte seen, int pos) {
+            super(String.format("Unexpected byte %c seen at position %d", (char)seen, pos));
+        }
+
+        public DecoderException(String msg) {
+            super(msg);
+        }
+    }
+}
diff --git a/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/MainActivity.java b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/MainActivity.java
new file mode 100644
index 0000000..3a67273
--- /dev/null
+++ b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/MainActivity.java
@@ -0,0 +1,44 @@
+package com.android.test.hierarchyviewer;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+
+
+public class MainActivity extends Activity {
+    private static final String TAG = "Main";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        View textView = findViewById(R.id.textView);
+        Log.d(TAG, "x, y = " + textView.getX() + ", " + textView.getY());
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu; this adds items to the action bar if it is present.
+        getMenuInflater().inflate(R.menu.menu_main, menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        // Handle action bar item clicks here. The action bar will
+        // automatically handle clicks on the Home/Up button, so long
+        // as you specify a parent activity in AndroidManifest.xml.
+        int id = item.getItemId();
+
+        //noinspection SimplifiableIfStatement
+        if (id == R.id.action_settings) {
+            return true;
+        }
+
+        return super.onOptionsItemSelected(item);
+    }
+}
diff --git a/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/MainActivityTest.java b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/MainActivityTest.java
new file mode 100644
index 0000000..ea3710d
--- /dev/null
+++ b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/MainActivityTest.java
@@ -0,0 +1,81 @@
+package com.android.test.hierarchyviewer;
+
+import android.test.ActivityInstrumentationTestCase2;
+import android.view.View;
+
+import java.io.ByteArrayOutputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+
+public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
+    private MainActivity mActivity;
+    private View mTextView;
+
+
+    public MainActivityTest() {
+        super(MainActivity.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        mActivity = getActivity();
+        mTextView = mActivity.findViewById(R.id.textView);
+    }
+
+    private byte[] encode(View view) throws ClassNotFoundException, NoSuchMethodException,
+            IllegalAccessException, InstantiationException, InvocationTargetException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(1024 * 1024);
+
+        Object encoder = createEncoder(baos);
+        invokeMethod(View.class, view, "encode", encoder);
+        invokeMethod(encoder.getClass(), encoder, "endStream");
+
+        return baos.toByteArray();
+    }
+
+    private Object invokeMethod(Class targetClass, Object target, String methodName, Object... params)
+            throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+        Class[] paramClasses = new Class[params.length];
+        for (int i = 0; i < params.length; i++) {
+            paramClasses[i] = params[i].getClass();
+        }
+        Method method = targetClass.getDeclaredMethod(methodName, paramClasses);
+        method.setAccessible(true);
+        return method.invoke(target, params);
+    }
+
+    private Object createEncoder(ByteArrayOutputStream baos) throws ClassNotFoundException,
+            NoSuchMethodException, IllegalAccessException, InvocationTargetException,
+            InstantiationException {
+        Class clazz = Class.forName("android.view.ViewHierarchyEncoder");
+        Constructor constructor = clazz.getConstructor(ByteArrayOutputStream.class);
+        return constructor.newInstance(baos);
+    }
+
+    public void testTextView() throws Exception {
+        byte[] data = encode(mTextView);
+        assertNotNull(data);
+        assertTrue(data.length > 0);
+
+        ViewDumpParser parser = new ViewDumpParser();
+        parser.parse(data);
+
+        List<Map<Short, Object>> views = parser.getViews();
+        Map<String, Short> propertyNameTable = parser.getIds();
+
+        assertEquals(1, views.size());
+        assertNotNull(propertyNameTable);
+
+        Map<Short, Object> textViewProperties = views.get(0);
+        assertEquals("android.widget.TextView",
+                textViewProperties.get(propertyNameTable.get("meta:__name__")));
+
+        assertEquals(mActivity.getString(R.string.test),
+                textViewProperties.get(propertyNameTable.get("text:text")));
+    }
+}
diff --git a/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/ViewDumpParser.java b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/ViewDumpParser.java
new file mode 100644
index 0000000..0111bc6
--- /dev/null
+++ b/tests/HierarchyViewerTest/src/com/android/test/hierarchyviewer/ViewDumpParser.java
@@ -0,0 +1,73 @@
+package com.android.test.hierarchyviewer;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+public class ViewDumpParser {
+    private Map<String, Short> mIds;
+    private List<Map<Short,Object>> mViews;
+
+    public void parse(byte[] data) {
+        Decoder d = new Decoder(ByteBuffer.wrap(data));
+
+        mViews = new ArrayList<>(100);
+        while (d.hasRemaining()) {
+            Object o = d.readObject();
+            if (o instanceof Map) {
+                //noinspection unchecked
+                mViews.add((Map<Short, Object>) o);
+            }
+        }
+
+        if (mViews.isEmpty()) {
+            return;
+        }
+
+        // the last one is the property map
+        Map<Short,Object> idMap = mViews.remove(mViews.size() - 1);
+        mIds = reverse(idMap);
+    }
+
+    public String getFirstView() {
+        if (mViews.isEmpty()) {
+            return null;
+        }
+
+        Map<Short, Object> props = mViews.get(0);
+        Object name = getProperty(props, "__name__");
+        Object hash = getProperty(props, "__hash__");
+
+        if (name instanceof String && hash instanceof Integer) {
+            return String.format(Locale.US, "%s@%x", name, hash);
+        } else {
+            return null;
+        }
+    }
+
+    private Object getProperty(Map<Short, Object> props, String key) {
+        return props.get(mIds.get(key));
+    }
+
+    private static Map<String, Short> reverse(Map<Short, Object> m) {
+        Map<String, Short> r = new HashMap<String, Short>(m.size());
+
+        for (Map.Entry<Short, Object> e : m.entrySet()) {
+            r.put((String)e.getValue(), e.getKey());
+        }
+
+        return r;
+    }
+
+    public List<Map<Short, Object>> getViews() {
+        return mViews;
+    }
+
+    public Map<String, Short> getIds() {
+        return mIds;
+    }
+
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java
index 5ba3ad9..be5d7f9 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java
@@ -46,9 +46,9 @@
         }
 
         private void setProject(boolean value) {
-            RenderNode displayList = getDisplayList();
-            if (displayList != null) {
-                displayList.setProjectBackwards(value);
+            RenderNode renderNode = updateDisplayListIfDirty();
+            if (renderNode != null) {
+                renderNode.setProjectBackwards(value);
             }
             // NOTE: we can't invalidate ProjectedView for the redraw because:
             // 1) the view won't preserve displayList properties that it doesn't know about
diff --git a/tests/MemoryUsage/AndroidManifest.xml b/tests/MemoryUsage/AndroidManifest.xml
index 3932e5b..cd559c5 100644
--- a/tests/MemoryUsage/AndroidManifest.xml
+++ b/tests/MemoryUsage/AndroidManifest.xml
@@ -6,7 +6,9 @@
                      android:name="com.android.tests.memoryusage.MemoryUsageInstrumentation"
                      android:targetPackage="com.android.tests.memoryusage" />
 
+    <uses-permission android:name="android.permission.REAL_GET_TASKS" />
+
     <application android:label="Memory Usage Test">
         <uses-library android:name="android.test.runner" />
     </application>
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/tests/OneMedia/Android.mk b/tests/OneMedia/Android.mk
index b7d7f98..9fc6403 100644
--- a/tests/OneMedia/Android.mk
+++ b/tests/OneMedia/Android.mk
@@ -9,9 +9,6 @@
 LOCAL_PACKAGE_NAME := OneMedia
 LOCAL_CERTIFICATE := platform
 
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-media-protocols
-
 LOCAL_JAVA_LIBRARIES += org.apache.http.legacy
 
 LOCAL_PROGUARD_ENABLED := disabled
diff --git a/tests/OneMedia/AndroidManifest.xml b/tests/OneMedia/AndroidManifest.xml
index ef3fad5..c6824ec 100644
--- a/tests/OneMedia/AndroidManifest.xml
+++ b/tests/OneMedia/AndroidManifest.xml
@@ -27,15 +27,6 @@
             android:name="com.android.onemedia.OnePlayerService"
             android:exported="true"
             android:process="com.android.onemedia.service" />
-        <service
-            android:name=".provider.OneMediaRouteProvider"
-            android:permission="android.permission.BIND_MEDIA_ROUTE_SERVICE"
-            android:exported="true"
-            android:process="com.android.onemedia.provider">
-            <intent-filter>
-                <action android:name="android.media.routing.MediaRouteService" />
-            </intent-filter>
-          </service>
     </application>
 
 </manifest>
diff --git a/tests/OneMedia/src/com/android/onemedia/PlayerSession.java b/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
index 141a209..2455c9c 100644
--- a/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
+++ b/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
@@ -19,25 +19,17 @@
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.media.MediaMetadata;
-import android.media.routing.MediaRouteSelector;
-import android.media.routing.MediaRouter;
-import android.media.routing.MediaRouter.ConnectionRequest;
-import android.media.routing.MediaRouter.DestinationInfo;
-import android.media.routing.MediaRouter.RouteInfo;
 import android.media.session.MediaSession;
 import android.media.session.MediaSession.QueueItem;
 import android.media.session.MediaSessionManager;
 import android.media.session.PlaybackState;
 import android.os.Bundle;
-import android.support.media.protocols.MediaPlayerProtocol;
-import android.support.media.protocols.MediaPlayerProtocol.MediaStatus;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.util.Log;
 import android.view.KeyEvent;
 
 import com.android.onemedia.playback.LocalRenderer;
-import com.android.onemedia.playback.OneMRPRenderer;
 import com.android.onemedia.playback.Renderer;
 import com.android.onemedia.playback.RequestUtils;
 
@@ -48,7 +40,6 @@
     private static final String TAG = "PlayerSession";
 
     protected MediaSession mSession;
-    protected MediaRouter mRouter;
     protected Context mContext;
     protected Renderer mRenderer;
     protected MediaSession.Callback mCallback;
@@ -84,22 +75,11 @@
                 .getSystemService(Context.MEDIA_SESSION_SERVICE);
         Log.d(TAG, "Creating session for package " + mContext.getBasePackageName());
 
-        mRouter = new MediaRouter(mContext);
-        mRouter.addSelector(new MediaRouteSelector.Builder()
-                .addRequiredProtocol(MediaPlayerProtocol.class)
-                .build());
-        mRouter.addSelector(new MediaRouteSelector.Builder()
-                .setRequiredFeatures(MediaRouter.ROUTE_FEATURE_LIVE_AUDIO)
-                .setOptionalFeatures(MediaRouter.ROUTE_FEATURE_LIVE_VIDEO)
-                .build());
-        mRouter.setRoutingCallback(new RoutingCallback(), null);
-
         mSession = new MediaSession(mContext, "OneMedia");
         mSession.setCallback(mCallback);
         mSession.setPlaybackState(mPlaybackState);
         mSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS
                 | MediaSession.FLAG_HANDLES_MEDIA_BUTTONS);
-        mSession.setMediaRouter(mRouter);
         mSession.setActive(true);
         updateMetadata();
     }
@@ -117,10 +97,6 @@
             mSession.release();
             mSession = null;
         }
-        if (mRouter != null) {
-            mRouter.release();
-            mRouter = null;
-        }
     }
 
     public void setListener(Listener listener) {
@@ -278,63 +254,4 @@
             mRenderer.onPause();
         }
     }
-
-    private class RoutingCallback extends MediaRouter.RoutingCallback {
-        @Override
-        public void onConnectionStateChanged(int state) {
-            if (state == MediaRouter.CONNECTION_STATE_CONNECTING) {
-                if (mRenderer != null) {
-                    mRenderer.onStop();
-                }
-                mRenderer = null;
-                updateState(PlaybackState.STATE_CONNECTING);
-                return;
-            }
-
-            MediaRouter.ConnectionInfo connection = mRouter.getConnection();
-            if (connection != null) {
-                MediaPlayerProtocol protocol =
-                        connection.getProtocolObject(MediaPlayerProtocol.class);
-                if (protocol != null) {
-                    Log.d(TAG, "Connected to route using media player protocol");
-
-                    protocol.setCallback(new PlayerCallback(), null);
-                    mRenderer = new OneMRPRenderer(protocol);
-                    updateState(PlaybackState.STATE_NONE);
-                    return;
-                }
-            }
-
-            // Use local route
-            mRenderer = new LocalRenderer(mContext, null);
-            mRenderer.registerListener(mRenderListener);
-            updateState(PlaybackState.STATE_NONE);
-        }
-    }
-
-    private class PlayerCallback extends MediaPlayerProtocol.Callback {
-        @Override
-        public void onStatusUpdated(MediaStatus status, Bundle extras) {
-            if (status != null) {
-                Log.d(TAG, "Received status update: " + status.toBundle());
-                switch (status.getPlayerState()) {
-                    case MediaStatus.PLAYER_STATE_BUFFERING:
-                        updateState(PlaybackState.STATE_BUFFERING);
-                        break;
-                    case MediaStatus.PLAYER_STATE_IDLE:
-                        updateState(PlaybackState.STATE_STOPPED);
-                        break;
-                    case MediaStatus.PLAYER_STATE_PAUSED:
-                        updateState(PlaybackState.STATE_PAUSED);
-                        break;
-                    case MediaStatus.PLAYER_STATE_PLAYING:
-                        updateState(PlaybackState.STATE_PLAYING);
-                        break;
-                    case MediaStatus.PLAYER_STATE_UNKNOWN:
-                        updateState(PlaybackState.STATE_NONE);
-                        break;
-                }
-            }
-        }
-    }
 }
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/OneMRPRenderer.java b/tests/OneMedia/src/com/android/onemedia/playback/OneMRPRenderer.java
deleted file mode 100644
index 55eb92c..0000000
--- a/tests/OneMedia/src/com/android/onemedia/playback/OneMRPRenderer.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.android.onemedia.playback;
-
-import android.os.Bundle;
-import android.support.media.protocols.MediaPlayerProtocol;
-import android.support.media.protocols.MediaPlayerProtocol.MediaInfo;
-
-/**
- * Renderer for communicating with the OneMRP route
- */
-public class OneMRPRenderer extends Renderer {
-    private final MediaPlayerProtocol mProtocol;
-
-    public OneMRPRenderer(MediaPlayerProtocol protocol) {
-        super(null, null);
-        mProtocol = protocol;
-    }
-
-    @Override
-    public void setContent(Bundle request) {
-        MediaInfo mediaInfo = new MediaInfo(request.getString(RequestUtils.EXTRA_KEY_SOURCE),
-                MediaInfo.STREAM_TYPE_BUFFERED, "audio/mp3");
-        mProtocol.load(mediaInfo, true, 0, null);
-    }
-
-    @Override
-    public boolean onStop() {
-        mProtocol.stop(null);
-        return true;
-    }
-
-    @Override
-    public boolean onPlay() {
-        mProtocol.play(null);
-        return true;
-    }
-
-    @Override
-    public boolean onPause() {
-        mProtocol.pause(null);
-        return true;
-    }
-
-    @Override
-    public long getSeekPosition() {
-        return -1;
-    }
-}
diff --git a/tests/OneMedia/src/com/android/onemedia/provider/OneMediaRouteProvider.java b/tests/OneMedia/src/com/android/onemedia/provider/OneMediaRouteProvider.java
deleted file mode 100644
index 5845e48..0000000
--- a/tests/OneMedia/src/com/android/onemedia/provider/OneMediaRouteProvider.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (C) 2014 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.onemedia.provider;
-
-import android.media.routing.MediaRouteSelector;
-import android.media.routing.MediaRouteService;
-import android.media.routing.MediaRouter.ConnectionInfo;
-import android.media.routing.MediaRouter.ConnectionRequest;
-import android.media.routing.MediaRouter.DestinationInfo;
-import android.media.routing.MediaRouter.DiscoveryRequest;
-import android.media.routing.MediaRouter.RouteInfo;
-import android.media.session.PlaybackState;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Process;
-import android.support.media.protocols.MediaPlayerProtocol;
-import android.support.media.protocols.MediaPlayerProtocol.MediaInfo;
-import android.support.media.protocols.MediaPlayerProtocol.MediaStatus;
-import android.os.Looper;
-import android.os.ResultReceiver;
-import android.os.SystemClock;
-import android.util.Log;
-
-import com.android.onemedia.playback.LocalRenderer;
-import com.android.onemedia.playback.Renderer;
-import com.android.onemedia.playback.RequestUtils;
-
-import java.util.ArrayList;
-
-/**
- * Test of MediaRouteProvider. Show a dummy provider with a simple interface for
- * playing music.
- */
-public class OneMediaRouteProvider extends MediaRouteService {
-    private static final String TAG = "OneMRP";
-    private static final boolean DEBUG = true;
-
-    private static final String TEST_DESTINATION_ID = "testDestination";
-    private static final String TEST_ROUTE_ID = "testRoute";
-
-    private Renderer mRenderer;
-    private RenderListener mRenderListener;
-    private PlaybackState mPlaybackState;
-    private Handler mHandler;
-
-    private OneStub mStub;
-
-    @Override
-    public void onCreate() {
-        mHandler = new Handler();
-        mRenderer = new LocalRenderer(this, null);
-        mRenderListener = new RenderListener();
-        PlaybackState.Builder bob = new PlaybackState.Builder();
-        bob.setActions(PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_PLAY);
-        mPlaybackState = bob.build();
-
-        mRenderer.registerListener(mRenderListener);
-    }
-
-    @Override
-    public ClientSession onCreateClientSession(ClientInfo client) {
-        if (client.getUid() != Process.myUid()) {
-            // for testing purposes, only allow connections from this application
-            // since this provider is not fully featured
-            return null;
-        }
-        return new OneSession(client);
-    }
-
-    private final class OneSession extends ClientSession {
-        private final ClientInfo mClient;
-
-        public OneSession(ClientInfo client) {
-            mClient = client;
-        }
-
-        @Override
-        public boolean onStartDiscovery(DiscoveryRequest req, DiscoveryCallback callback) {
-            for (MediaRouteSelector selector : req.getSelectors()) {
-                if (isMatch(selector)) {
-                    DestinationInfo destination = new DestinationInfo.Builder(
-                            TEST_DESTINATION_ID, getServiceMetadata(), "OneMedia")
-                            .setDescription("Test route from OneMedia app.")
-                            .build();
-                    ArrayList<RouteInfo> routes = new ArrayList<RouteInfo>();
-                    routes.add(new RouteInfo.Builder(
-                            TEST_ROUTE_ID, destination, selector).build());
-                    callback.onDestinationFound(destination, routes);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        @Override
-        public void onStopDiscovery() {
-        }
-
-        @Override
-        public boolean onConnect(ConnectionRequest req, ConnectionCallback callback) {
-            if (req.getRoute().getId().equals(TEST_ROUTE_ID)) {
-                mStub = new OneStub();
-                ConnectionInfo connection = new ConnectionInfo.Builder(req.getRoute())
-                        .setProtocolStub(MediaPlayerProtocol.class, mStub)
-                        .build();
-                callback.onConnected(connection);
-                return true;
-            }
-            return false;
-        }
-
-        @Override
-        public void onDisconnect() {
-            mStub = null;
-        }
-
-        private boolean isMatch(MediaRouteSelector selector) {
-            if (!selector.containsProtocol(MediaPlayerProtocol.class)) {
-                return false;
-            }
-            for (String protocol : selector.getRequiredProtocols()) {
-                if (!protocol.equals(MediaPlayerProtocol.class.getName())) {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-
-    private final class OneStub extends MediaPlayerProtocol.Stub {
-        MediaInfo mMediaInfo;
-
-        public OneStub() {
-            super(mHandler);
-        }
-
-        @Override
-        public void onLoad(MediaInfo mediaInfo, boolean autoplay, long playPosition,
-                Bundle extras) {
-            if (DEBUG) {
-                Log.d(TAG, "Attempting to play " + mediaInfo.getContentId());
-            }
-            // look up the route and send a play command to it
-            mMediaInfo = mediaInfo;
-            Bundle bundle = new Bundle();
-            bundle.putString(RequestUtils.EXTRA_KEY_SOURCE, mediaInfo.getContentId());
-            mRenderer.setContent(bundle);
-        }
-
-        @Override
-        public void onPlay(Bundle extras) {
-            mRenderer.onPlay();
-        }
-
-        @Override
-        public void onPause(Bundle extras) {
-            mRenderer.onPause();
-        }
-    }
-
-    private class RenderListener implements Renderer.Listener {
-
-        @Override
-        public void onError(int type, int extra, Bundle extras, Throwable error) {
-            Log.d(TAG, "Sending onError with type " + type + " and extra " + extra);
-            sendStatusUpdate(PlaybackState.STATE_ERROR);
-        }
-
-        @Override
-        public void onStateChanged(int newState) {
-            long position = -1;
-            if (mRenderer != null) {
-                position = mRenderer.getSeekPosition();
-            }
-            int pbState;
-            float rate = 0;
-            String errorMsg = null;
-            switch (newState) {
-                case Renderer.STATE_ENDED:
-                case Renderer.STATE_STOPPED:
-                    pbState = PlaybackState.STATE_STOPPED;
-                    break;
-                case Renderer.STATE_INIT:
-                case Renderer.STATE_PREPARING:
-                    pbState = PlaybackState.STATE_BUFFERING;
-                    break;
-                case Renderer.STATE_ERROR:
-                    pbState = PlaybackState.STATE_ERROR;
-                    break;
-                case Renderer.STATE_PAUSED:
-                    pbState = PlaybackState.STATE_PAUSED;
-                    break;
-                case Renderer.STATE_PLAYING:
-                    pbState = PlaybackState.STATE_PLAYING;
-                    rate = 1;
-                    break;
-                default:
-                    pbState = PlaybackState.STATE_ERROR;
-                    errorMsg = "unknown state";
-                    break;
-            }
-            PlaybackState.Builder bob = new PlaybackState.Builder(mPlaybackState);
-            bob.setState(pbState, position, rate, SystemClock.elapsedRealtime());
-            bob.setErrorMessage(errorMsg);
-            mPlaybackState = bob.build();
-
-            sendStatusUpdate(mPlaybackState.getState());
-        }
-
-        @Override
-        public void onBufferingUpdate(int percent) {
-        }
-
-        @Override
-        public void onFocusLost() {
-            Log.d(TAG, "Focus lost, pausing");
-            // Don't update state here, we'll get a separate call to
-            // onStateChanged when it pauses
-            mRenderer.onPause();
-        }
-
-        @Override
-        public void onNextStarted() {
-        }
-
-        private void sendStatusUpdate(int state) {
-            if (mStub != null) {
-                MediaStatus status = new MediaStatus(1, mStub.mMediaInfo);
-                switch (state) {
-                    case PlaybackState.STATE_BUFFERING:
-                    case PlaybackState.STATE_FAST_FORWARDING:
-                    case PlaybackState.STATE_REWINDING:
-                    case PlaybackState.STATE_SKIPPING_TO_NEXT:
-                    case PlaybackState.STATE_SKIPPING_TO_PREVIOUS:
-                        status.setPlayerState(MediaStatus.PLAYER_STATE_BUFFERING);
-                        break;
-                    case PlaybackState.STATE_CONNECTING:
-                    case PlaybackState.STATE_STOPPED:
-                        status.setPlayerState(MediaStatus.PLAYER_STATE_IDLE);
-                        break;
-                    case PlaybackState.STATE_PAUSED:
-                        status.setPlayerState(MediaStatus.PLAYER_STATE_PAUSED);
-                        break;
-                    case PlaybackState.STATE_PLAYING:
-                        status.setPlayerState(MediaStatus.PLAYER_STATE_PLAYING);
-                        break;
-                    case PlaybackState.STATE_NONE:
-                    case PlaybackState.STATE_ERROR:
-                    default:
-                        status.setPlayerState(MediaStatus.PLAYER_STATE_UNKNOWN);
-                        break;
-                }
-                mStub.sendStatusUpdatedEvent(status, null);
-            }
-        }
-    }
-}
diff --git a/tests/VoiceInteraction/res/layout/main.xml b/tests/VoiceInteraction/res/layout/main.xml
index 34a7563..092d37d 100644
--- a/tests/VoiceInteraction/res/layout/main.xml
+++ b/tests/VoiceInteraction/res/layout/main.xml
@@ -34,12 +34,6 @@
             android:text="@string/asyncStructure"
             />
 
-    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
-        android:assistBlocked="true"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:text="This won't be included in assist."
-        />
-
 </LinearLayout>
 
 
diff --git a/tests/VoiceInteraction/res/xml/interaction_service.xml b/tests/VoiceInteraction/res/xml/interaction_service.xml
index 789493a..c015ad2 100644
--- a/tests/VoiceInteraction/res/xml/interaction_service.xml
+++ b/tests/VoiceInteraction/res/xml/interaction_service.xml
@@ -21,4 +21,4 @@
     android:sessionService="com.android.test.voiceinteraction.MainInteractionSessionService"
     android:recognitionService="com.android.test.voiceinteraction.MainRecognitionService"
     android:settingsActivity="com.android.test.voiceinteraction.SettingsActivity"
-    android:supportsAssistGesture="true" />
+    android:supportsAssist="true" />
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java
index 73e04e5..ae8e9e4 100644
--- a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java
@@ -20,7 +20,7 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.widget.TextView;
 
 /**
@@ -32,9 +32,9 @@
     }
 
     @Override
-    public void onProvideVirtualAssistStructure(ViewAssistStructure structure) {
+    public void onProvideVirtualStructure(ViewStructure structure) {
         structure.setChildCount(1);
-        final ViewAssistStructure child = structure.asyncNewChild(0);
+        final ViewStructure child = structure.asyncNewChild(0);
         final int width = getWidth();
         final int height = getHeight();
         (new Thread() {
diff --git a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
index 30d204f..4098b98 100644
--- a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
@@ -57,6 +57,11 @@
                 public String[] getPackagesForUid(int uid) {
                     return new String[0];
                 }
+
+                @Override
+                public boolean isRuntimePermission(String permission) {
+                    return false;
+                }
             };
             ServiceManagerNative.asInterface(BinderInternal.getContextObject())
                     .setPermissionController(pc);
diff --git a/tools/aapt/Android.mk b/tools/aapt/Android.mk
index 9956bd7..bbe6860 100644
--- a/tools/aapt/Android.mk
+++ b/tools/aapt/Android.mk
@@ -64,7 +64,8 @@
     libutils \
     libcutils \
     libexpat \
-    libziparchive-host
+    libziparchive-host \
+    libbase
 
 aaptCFlags := -DAAPT_VERSION=\"$(BUILD_NUMBER)\"
 aaptCFlags += -Wall -Werror
@@ -131,28 +132,4 @@
 include $(BUILD_HOST_NATIVE_TEST)
 
 
-# ==========================================================
-# Build the device executable: aapt
-# ==========================================================
-ifneq ($(SDK_ONLY),true)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := aapt
-LOCAL_CFLAGS += $(aaptCFlags)
-LOCAL_SRC_FILES := $(aaptSources) $(aaptMain)
-LOCAL_C_INCLUDES += $(aaptCIncludes)
-LOCAL_SHARED_LIBRARIES := \
-    libandroidfw \
-    libutils \
-    libcutils \
-    libpng \
-    liblog \
-    libz
-LOCAL_STATIC_LIBRARIES := \
-    libexpat_static
-
-include $(BUILD_EXECUTABLE)
-
-endif # Not SDK_ONLY
-
 endif # No TARGET_BUILD_APPS or TARGET_BUILD_PDK
diff --git a/tools/aapt2/Android.mk b/tools/aapt2/Android.mk
index 05034c3..5ef4311 100644
--- a/tools/aapt2/Android.mk
+++ b/tools/aapt2/Android.mk
@@ -40,10 +40,10 @@
 	ManifestValidator.cpp \
 	Png.cpp \
 	ResChunkPullParser.cpp \
-	Resolver.cpp \
 	Resource.cpp \
 	ResourceParser.cpp \
 	ResourceTable.cpp \
+	ResourceTableResolver.cpp \
 	ResourceValues.cpp \
 	SdkConstants.cpp \
 	StringPool.cpp \
@@ -90,7 +90,8 @@
 	libcutils \
 	libexpat \
 	libziparchive-host \
-	libpng
+	libpng \
+	libbase
 
 ifneq ($(strip $(USE_MINGW)),)
 	hostStaticLibs += libz
diff --git a/tools/aapt2/BinaryResourceParser.cpp b/tools/aapt2/BinaryResourceParser.cpp
index 326a2ac..d16f63b 100644
--- a/tools/aapt2/BinaryResourceParser.cpp
+++ b/tools/aapt2/BinaryResourceParser.cpp
@@ -39,7 +39,7 @@
  * given a mapping from resource ID to resource name.
  */
 struct ReferenceIdToNameVisitor : ValueVisitor {
-    ReferenceIdToNameVisitor(const std::shared_ptr<Resolver>& resolver,
+    ReferenceIdToNameVisitor(const std::shared_ptr<IResolver>& resolver,
                              std::map<ResourceId, ResourceName>* cache) :
             mResolver(resolver), mCache(cache) {
     }
@@ -96,30 +96,25 @@
             reference.name = cacheIter->second;
             reference.id = 0;
         } else {
-            const android::ResTable& table = mResolver->getResTable();
-            android::ResTable::resource_name resourceName;
-            if (table.getResourceName(reference.id.id, false, &resourceName)) {
-                const ResourceType* type = parseResourceType(StringPiece16(resourceName.type,
-                                                                           resourceName.typeLen));
-                assert(type);
-                reference.name.package.assign(resourceName.package, resourceName.packageLen);
-                reference.name.type = *type;
-                reference.name.entry.assign(resourceName.name, resourceName.nameLen);
-                reference.id = 0;
+            Maybe<ResourceName> result = mResolver->findName(reference.id);
+            if (result) {
+                reference.name = result.value();
 
                 // Add to cache.
                 mCache->insert({reference.id, reference.name});
+
+                reference.id = 0;
             }
         }
     }
 
-    std::shared_ptr<Resolver> mResolver;
+    std::shared_ptr<IResolver> mResolver;
     std::map<ResourceId, ResourceName>* mCache;
 };
 
 
 BinaryResourceParser::BinaryResourceParser(const std::shared_ptr<ResourceTable>& table,
-                                           const std::shared_ptr<Resolver>& resolver,
+                                           const std::shared_ptr<IResolver>& resolver,
                                            const Source& source,
                                            const void* data,
                                            size_t len) :
@@ -401,6 +396,12 @@
             }
             break;
 
+        case RES_TABLE_PUBLIC_TYPE:
+            if (!parsePublic(parser.getChunk())) {
+                return false;
+            }
+            break;
+
         default:
             Logger::warn(mSource)
                     << "unexpected chunk of type "
@@ -434,6 +435,55 @@
     return true;
 }
 
+bool BinaryResourceParser::parsePublic(const ResChunk_header* chunk) {
+    const Public_header* header = convertTo<Public_header>(chunk);
+
+    if (header->typeId == 0) {
+        Logger::error(mSource)
+                << "invalid type ID " << header->typeId << std::endl;
+        return false;
+    }
+
+    const ResourceType* parsedType = parseResourceType(util::getString(mTypePool,
+                                                                       header->typeId - 1));
+    if (!parsedType) {
+        Logger::error(mSource)
+                << "invalid type " << util::getString(mTypePool, header->typeId - 1) << std::endl;
+        return false;
+    }
+
+    const uintptr_t chunkEnd = reinterpret_cast<uintptr_t>(chunk) + chunk->size;
+    const Public_entry* entry = reinterpret_cast<const Public_entry*>(
+            getChunkData(header->header));
+    for (uint32_t i = 0; i < header->count; i++) {
+        if (reinterpret_cast<uintptr_t>(entry) + sizeof(*entry) > chunkEnd) {
+            Logger::error(mSource)
+                    << "Public_entry extends beyond chunk."
+                    << std::endl;
+            return false;
+        }
+
+        const ResourceId resId = { mTable->getPackageId(), header->typeId, entry->entryId };
+        const ResourceName name = {
+                mTable->getPackage(),
+                *parsedType,
+                util::getString(mKeyPool, entry->key.index).toString() };
+
+        SourceLine source;
+        if (mSourcePool.getError() == NO_ERROR) {
+            source.path = util::utf16ToUtf8(util::getString(mSourcePool, entry->source.index));
+            source.line = entry->sourceLine;
+        }
+
+        if (!mTable->markPublic(name, resId, source)) {
+            return false;
+        }
+
+        entry++;
+    }
+    return true;
+}
+
 bool BinaryResourceParser::parseTypeSpec(const ResChunk_header* chunk) {
     if (mTypePool.getError() != NO_ERROR) {
         Logger::error(mSource)
@@ -641,10 +691,6 @@
         return util::make_unique<BinaryPrimitive>(nullType);
     }
 
-    if (value->dataType == ExtendedTypes::TYPE_SENTINEL) {
-        return util::make_unique<Sentinel>();
-    }
-
     if (value->dataType == ExtendedTypes::TYPE_RAW_STRING) {
         return util::make_unique<RawString>(
                 mTable->getValueStringPool().makeRef(util::getString(mValuePool, value->data),
diff --git a/tools/aapt2/BinaryResourceParser.h b/tools/aapt2/BinaryResourceParser.h
index f95a0c8..32876cd 100644
--- a/tools/aapt2/BinaryResourceParser.h
+++ b/tools/aapt2/BinaryResourceParser.h
@@ -43,7 +43,7 @@
      * add any resources parsed to `table`. `source` is for logging purposes.
      */
     BinaryResourceParser(const std::shared_ptr<ResourceTable>& table,
-                         const std::shared_ptr<Resolver>& resolver,
+                         const std::shared_ptr<IResolver>& resolver,
                          const Source& source,
                          const void* data, size_t len);
 
@@ -66,6 +66,7 @@
     bool idToName(Reference* reference);
 
     bool parsePackage(const android::ResChunk_header* chunk);
+    bool parsePublic(const android::ResChunk_header* chunk);
     bool parseTypeSpec(const android::ResChunk_header* chunk);
     bool parseType(const android::ResChunk_header* chunk);
 
@@ -92,7 +93,7 @@
 
     std::shared_ptr<ResourceTable> mTable;
 
-    std::shared_ptr<Resolver> mResolver;
+    std::shared_ptr<IResolver> mResolver;
 
     const Source mSource;
 
diff --git a/tools/aapt2/BinaryXmlPullParser.cpp b/tools/aapt2/BinaryXmlPullParser.cpp
index 7a07c06..476a215 100644
--- a/tools/aapt2/BinaryXmlPullParser.cpp
+++ b/tools/aapt2/BinaryXmlPullParser.cpp
@@ -15,6 +15,8 @@
  */
 
 #include "BinaryXmlPullParser.h"
+#include "Maybe.h"
+#include "Util.h"
 
 #include <androidfw/ResourceTypes.h>
 #include <memory>
@@ -77,12 +79,31 @@
     mEvent = codeToEvent(code);
     switch (mEvent) {
         case Event::kStartNamespace:
-        case Event::kEndNamespace:
+        case Event::kEndNamespace: {
             data = mParser->getNamespacePrefix(&len);
-            mStr1.assign(data, len);
+            if (data) {
+                mStr1.assign(data, len);
+            } else {
+                mStr1.clear();
+            }
             data = mParser->getNamespaceUri(&len);
-            mStr2.assign(data, len);
+            if (data) {
+                mStr2.assign(data, len);
+            } else {
+                mStr2.clear();
+            }
+
+            Maybe<std::u16string> result = util::extractPackageFromNamespace(mStr2);
+            if (result) {
+                if (mEvent == Event::kStartNamespace) {
+                    mPackageAliases.emplace_back(mStr1, result.value());
+                } else {
+                    assert(mPackageAliases.back().second == result.value());
+                    mPackageAliases.pop_back();
+                }
+            }
             break;
+        }
 
         case Event::kStartElement:
             copyAttributes();
@@ -90,14 +111,26 @@
 
         case Event::kEndElement:
             data = mParser->getElementNamespace(&len);
-            mStr1.assign(data, len);
+            if (data) {
+                mStr1.assign(data, len);
+            } else {
+                mStr1.clear();
+            }
             data = mParser->getElementName(&len);
-            mStr2.assign(data, len);
+            if (data) {
+                mStr2.assign(data, len);
+            } else {
+                mStr2.clear();
+            }
             break;
 
         case Event::kText:
             data = mParser->getText(&len);
-            mStr1.assign(data, len);
+            if (data) {
+                mStr1.assign(data, len);
+            } else {
+                mStr1.clear();
+            }
             break;
 
         default:
@@ -155,6 +188,22 @@
     return sEmpty;
 }
 
+bool BinaryXmlPullParser::applyPackageAlias(std::u16string* package,
+                                            const std::u16string& defaultPackage) const {
+    const auto endIter = mPackageAliases.rend();
+    for (auto iter = mPackageAliases.rbegin(); iter != endIter; ++iter) {
+        if (iter->first == *package) {
+            if (iter->second.empty()) {
+                *package = defaultPackage;
+            } else {
+                *package = iter->second;
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
 const std::u16string& BinaryXmlPullParser::getElementNamespace() const {
     if (!mHasComment && (mEvent == XmlPullParser::Event::kStartElement ||
             mEvent == XmlPullParser::Event::kEndElement)) {
@@ -191,11 +240,17 @@
             XmlPullParser::Attribute attr;
             size_t len;
             const char16_t* str = mParser->getAttributeNamespace(i, &len);
-            attr.namespaceUri.assign(str, len);
+            if (str) {
+                attr.namespaceUri.assign(str, len);
+            }
             str = mParser->getAttributeName(i, &len);
-            attr.name.assign(str, len);
+            if (str) {
+                attr.name.assign(str, len);
+            }
             str = mParser->getAttributeStringValue(i, &len);
-            attr.value.assign(str, len);
+            if (str) {
+                attr.value.assign(str, len);
+            }
             mAttributes.push_back(std::move(attr));
         }
     }
diff --git a/tools/aapt2/BinaryXmlPullParser.h b/tools/aapt2/BinaryXmlPullParser.h
index 2d4256a..16fc8b7 100644
--- a/tools/aapt2/BinaryXmlPullParser.h
+++ b/tools/aapt2/BinaryXmlPullParser.h
@@ -34,25 +34,27 @@
     BinaryXmlPullParser(const std::shared_ptr<android::ResXMLTree>& parser);
     BinaryXmlPullParser(const BinaryXmlPullParser& rhs) = delete;
 
-    Event getEvent() const;
-    const std::string& getLastError() const;
-    Event next();
+    Event getEvent() const override;
+    const std::string& getLastError() const override;
+    Event next() override;
 
-    const std::u16string& getComment() const;
-    size_t getLineNumber() const;
-    size_t getDepth() const;
+    const std::u16string& getComment() const override;
+    size_t getLineNumber() const override;
+    size_t getDepth() const override;
 
-    const std::u16string& getText() const;
+    const std::u16string& getText() const override;
 
-    const std::u16string& getNamespacePrefix() const;
-    const std::u16string& getNamespaceUri() const;
+    const std::u16string& getNamespacePrefix() const override;
+    const std::u16string& getNamespaceUri() const override;
+    bool applyPackageAlias(std::u16string* package, const std::u16string& defaultpackage)
+            const override;
 
-    const std::u16string& getElementNamespace() const;
-    const std::u16string& getElementName() const;
+    const std::u16string& getElementNamespace() const override;
+    const std::u16string& getElementName() const override;
 
-    const_iterator beginAttributes() const;
-    const_iterator endAttributes() const;
-    size_t getAttributeCount() const;
+    const_iterator beginAttributes() const override;
+    const_iterator endAttributes() const override;
+    size_t getAttributeCount() const override;
 
 private:
     void copyAttributes();
@@ -66,6 +68,7 @@
     const std::u16string sEmpty;
     const std::string sEmpty8;
     size_t mDepth;
+    std::vector<std::pair<std::u16string, std::u16string>> mPackageAliases;
 };
 
 } // namespace aapt
diff --git a/tools/aapt2/BindingXmlPullParser.cpp b/tools/aapt2/BindingXmlPullParser.cpp
index 58b96e8..4b7a656 100644
--- a/tools/aapt2/BindingXmlPullParser.cpp
+++ b/tools/aapt2/BindingXmlPullParser.cpp
@@ -252,6 +252,11 @@
     return mParser->getNamespaceUri();
 }
 
+bool BindingXmlPullParser::applyPackageAlias(std::u16string* package,
+                                             const std::u16string& defaultPackage) const {
+    return mParser->applyPackageAlias(package, defaultPackage);
+}
+
 const std::u16string& BindingXmlPullParser::getElementNamespace() const {
     return mParser->getElementNamespace();
 }
diff --git a/tools/aapt2/BindingXmlPullParser.h b/tools/aapt2/BindingXmlPullParser.h
index c892b09..cfb16ef 100644
--- a/tools/aapt2/BindingXmlPullParser.h
+++ b/tools/aapt2/BindingXmlPullParser.h
@@ -42,6 +42,8 @@
 
     const std::u16string& getNamespacePrefix() const override;
     const std::u16string& getNamespaceUri() const override;
+    bool applyPackageAlias(std::u16string* package, const std::u16string& defaultPackage)
+            const override;
 
     const std::u16string& getElementNamespace() const override;
     const std::u16string& getElementName() const override;
diff --git a/tools/aapt2/Flag.cpp b/tools/aapt2/Flag.cpp
index 3b2ff51..0f63c2c 100644
--- a/tools/aapt2/Flag.cpp
+++ b/tools/aapt2/Flag.cpp
@@ -65,7 +65,7 @@
     for (int i = 0; i < argc; i++) {
         const StringPiece arg(argv[i]);
         if (*arg.data() != '-') {
-            sArgs.emplace_back(arg.toString());
+            sArgs.push_back(arg.toString());
             continue;
         }
 
diff --git a/tools/aapt2/JavaClassGenerator.cpp b/tools/aapt2/JavaClassGenerator.cpp
index 3f92f18..2bb0e65 100644
--- a/tools/aapt2/JavaClassGenerator.cpp
+++ b/tools/aapt2/JavaClassGenerator.cpp
@@ -94,12 +94,12 @@
     std::u16string* entryName = static_cast<GenArgs&>(a).entryName;
 
     // This must be sorted by resource ID.
-    std::vector<std::pair<ResourceId, StringPiece16>> sortedAttributes;
+    std::vector<std::pair<ResourceId, ResourceNameRef>> sortedAttributes;
     sortedAttributes.reserve(styleable.entries.size());
     for (const auto& attr : styleable.entries) {
         assert(attr.id.isValid() && "no ID set for Styleable entry");
         assert(attr.name.isValid() && "no name set for Styleable entry");
-        sortedAttributes.emplace_back(attr.id, attr.name.entry);
+        sortedAttributes.emplace_back(attr.id, attr.name);
     }
     std::sort(sortedAttributes.begin(), sortedAttributes.end());
 
@@ -124,8 +124,15 @@
     for (size_t i = 0; i < attrCount; i++) {
         *out << "        "
              << "public static" << finalModifier
-             << " int " << transform(*entryName) << "_" << transform(sortedAttributes[i].second)
-             << " = " << i << ";" << std::endl;
+             << " int " << transform(*entryName);
+
+        // We may reference IDs from other packages, so prefix the entry name with
+        // the package.
+        const ResourceNameRef& itemName = sortedAttributes[i].second;
+        if (itemName.package != mTable->getPackage()) {
+            *out << "_" << transform(itemName.package);
+        }
+        *out << "_" << transform(itemName.entry) << " = " << i << ";" << std::endl;
     }
 }
 
diff --git a/tools/aapt2/JavaClassGenerator_test.cpp b/tools/aapt2/JavaClassGenerator_test.cpp
index 96bb10b..d4341b6 100644
--- a/tools/aapt2/JavaClassGenerator_test.cpp
+++ b/tools/aapt2/JavaClassGenerator_test.cpp
@@ -16,8 +16,9 @@
 
 #include "JavaClassGenerator.h"
 #include "Linker.h"
-#include "Resolver.h"
+#include "MockResolver.h"
 #include "ResourceTable.h"
+#include "ResourceTableResolver.h"
 #include "ResourceValues.h"
 #include "Util.h"
 
@@ -84,6 +85,7 @@
               output.find("public static final int hey_dude_cool_attr = 0;"));
 }
 
+
 TEST_F(JavaClassGeneratorTest, EmitPackageMangledSymbols) {
     ASSERT_TRUE(addResource(ResourceName{ {}, ResourceType::kId, u"foo" },
                             ResourceId{ 0x01, 0x02, 0x0000 }));
@@ -93,9 +95,8 @@
                                   SourceLine{ "lib.xml", 33 }, util::make_unique<Id>()));
     ASSERT_TRUE(mTable->merge(std::move(table)));
 
-    std::shared_ptr<Resolver> resolver = std::make_shared<Resolver>(mTable,
-            std::make_shared<const android::AssetManager>());
-    Linker linker(mTable, resolver);
+    Linker linker(mTable, std::make_shared<MockResolver>(mTable,
+                                                         std::map<ResourceName, ResourceId>()));
     ASSERT_TRUE(linker.linkAndValidate());
 
     JavaClassGenerator generator(mTable, {});
@@ -113,4 +114,32 @@
     EXPECT_EQ(std::string::npos, output.find("int foo ="));
 }
 
+TEST_F(JavaClassGeneratorTest, EmitOtherPackagesAttributesInStyleable) {
+    std::unique_ptr<Styleable> styleable = util::make_unique<Styleable>();
+    styleable->entries.emplace_back(ResourceNameRef{ mTable->getPackage(),
+                                                     ResourceType::kAttr,
+                                                     u"bar" });
+    styleable->entries.emplace_back(ResourceNameRef{ u"com.lib", ResourceType::kAttr, u"bar" });
+    ASSERT_TRUE(mTable->addResource(ResourceName{ {}, ResourceType::kStyleable, u"Foo" }, {}, {},
+                                    std::move(styleable)));
+
+    std::shared_ptr<IResolver> resolver = std::make_shared<MockResolver>(mTable,
+            std::map<ResourceName, ResourceId>({
+                    { ResourceName{ u"android", ResourceType::kAttr, u"bar" },
+                      ResourceId{ 0x01, 0x01, 0x0000 } },
+                    { ResourceName{ u"com.lib", ResourceType::kAttr, u"bar" },
+                      ResourceId{ 0x02, 0x01, 0x0000 } }}));
+
+    Linker linker(mTable, resolver);
+    ASSERT_TRUE(linker.linkAndValidate());
+
+    JavaClassGenerator generator(mTable, {});
+
+    std::stringstream out;
+    EXPECT_TRUE(generator.generate(mTable->getPackage(), out));
+    std::string output = out.str();
+    EXPECT_NE(std::string::npos, output.find("int Foo_bar ="));
+    EXPECT_NE(std::string::npos, output.find("int Foo_com_lib_bar ="));
+}
+
 } // namespace aapt
diff --git a/tools/aapt2/Linker.cpp b/tools/aapt2/Linker.cpp
index 4346c8b..a8b7a14 100644
--- a/tools/aapt2/Linker.cpp
+++ b/tools/aapt2/Linker.cpp
@@ -16,6 +16,8 @@
 
 #include "Linker.h"
 #include "Logger.h"
+#include "NameMangler.h"
+#include "Resolver.h"
 #include "ResourceParser.h"
 #include "ResourceTable.h"
 #include "ResourceValues.h"
@@ -38,7 +40,7 @@
 Linker::Args::Args(const ResourceNameRef& r, const SourceLine& s) : referrer(r), source(s) {
 }
 
-Linker::Linker(std::shared_ptr<ResourceTable> table, std::shared_ptr<Resolver> resolver) :
+Linker::Linker(std::shared_ptr<ResourceTable> table, std::shared_ptr<IResolver> resolver) :
         mTable(table), mResolver(resolver), mError(false) {
 }
 
@@ -65,13 +67,21 @@
                 usedIds[type->typeId].insert(entry->entryId);
             }
 
-            for (auto& valueConfig : entry->values) {
-                // Dispatch to the right method of this linker
-                // based on the value's type.
-                valueConfig.value->accept(*this, Args{
-                        ResourceNameRef{ mTable->getPackage(), type->type, entry->name },
-                        valueConfig.source
-                });
+            if (entry->publicStatus.isPublic && entry->values.empty()) {
+                // A public resource has no values. It will not be encoded
+                // properly without a symbol table. This is a unresolved symbol.
+                addUnresolvedSymbol(ResourceNameRef{
+                        mTable->getPackage(), type->type, entry->name },
+                        entry->publicStatus.source);
+            } else {
+                for (auto& valueConfig : entry->values) {
+                    // Dispatch to the right method of this linker
+                    // based on the value's type.
+                    valueConfig.value->accept(*this, Args{
+                            ResourceNameRef{ mTable->getPackage(), type->type, entry->name },
+                            valueConfig.source
+                    });
+                }
             }
         }
     }
@@ -100,11 +110,15 @@
                 }
                 entry->entryId = nextIndex++;
 
+                std::u16string unmangledPackage = mTable->getPackage();
+                std::u16string unmangledName = entry->name;
+                NameMangler::unmangle(&unmangledName, &unmangledPackage);
+
                 // Update callers of this resource with the right ID.
                 auto callersIter = mGraph.find(ResourceNameRef{
-                        mTable->getPackage(),
+                        unmangledPackage,
                         type->type,
-                        entry->name
+                        unmangledName
                 });
 
                 if (callersIter != std::end(mGraph)) {
@@ -175,13 +189,14 @@
         // we called through the original value.
 
         auto onCreateReference = [&](const ResourceName& name) {
-            mTable->addResource(name, ConfigDescription{},
-                    source, util::make_unique<Id>());
+            // We should never get here. All references would have been
+            // parsed in the parser phase.
+            assert(false);
+            //mTable->addResource(name, ConfigDescription{}, source, util::make_unique<Id>());
         };
 
-        convertedValue = ResourceParser::parseItemForAttribute(
-                *str.value, attr, mResolver->getDefaultPackage(),
-                onCreateReference);
+        convertedValue = ResourceParser::parseItemForAttribute(*str.value, attr,
+                                                               onCreateReference);
         if (!convertedValue && attr.typeMask & android::ResTable_map::TYPE_STRING) {
             // Last effort is to parse as a string.
             util::StringBuilder builder;
@@ -225,13 +240,13 @@
     }
 
     for (Style::Entry& styleEntry : style.entries) {
-        Maybe<Resolver::Entry> result = mResolver->findAttribute(styleEntry.key.name);
+        Maybe<IResolver::Entry> result = mResolver->findAttribute(styleEntry.key.name);
         if (!result || !result.value().attr) {
             addUnresolvedSymbol(styleEntry.key.name, args.source);
             continue;
         }
 
-        const Resolver::Entry& entry = result.value();
+        const IResolver::Entry& entry = result.value();
         if (entry.id.isValid()) {
             styleEntry.key.id = entry.id;
         } else {
@@ -263,11 +278,6 @@
     }
 }
 
-void Linker::visit(Sentinel& sentinel, ValueVisitorArgs& a) {
-    Args& args = static_cast<Args&>(a);
-    addUnresolvedSymbol(args.referrer, args.source);
-}
-
 void Linker::visit(Array& array, ValueVisitorArgs& a) {
     Args& args = static_cast<Args&>(a);
 
diff --git a/tools/aapt2/Linker.h b/tools/aapt2/Linker.h
index 9b911b7..9db64ab 100644
--- a/tools/aapt2/Linker.h
+++ b/tools/aapt2/Linker.h
@@ -52,9 +52,9 @@
 public:
     /**
      * Create a Linker for the given resource table with the sources available in
-     * Resolver. Resolver should contain the ResourceTable as a source too.
+     * IResolver. IResolver should contain the ResourceTable as a source too.
      */
-    Linker(std::shared_ptr<ResourceTable> table, std::shared_ptr<Resolver> resolver);
+    Linker(std::shared_ptr<ResourceTable> table, std::shared_ptr<IResolver> resolver);
 
     Linker(const Linker&) = delete;
 
@@ -88,7 +88,6 @@
     void visit(Attribute& attribute, ValueVisitorArgs& args) override;
     void visit(Styleable& styleable, ValueVisitorArgs& args) override;
     void visit(Style& style, ValueVisitorArgs& args) override;
-    void visit(Sentinel& sentinel, ValueVisitorArgs& args) override;
     void visit(Array& array, ValueVisitorArgs& args) override;
     void visit(Plural& plural, ValueVisitorArgs& args) override;
 
@@ -117,7 +116,7 @@
     friend ::std::ostream& operator<<(::std::ostream&, const Node&);
 
     std::shared_ptr<ResourceTable> mTable;
-    std::shared_ptr<Resolver> mResolver;
+    std::shared_ptr<IResolver> mResolver;
     std::map<ResourceNameRef, std::vector<Node>> mGraph;
     std::map<ResourceName, std::vector<SourceLine>> mUnresolvedSymbols;
     bool mError;
diff --git a/tools/aapt2/Linker_test.cpp b/tools/aapt2/Linker_test.cpp
index 4d2d360..3c5b8b4 100644
--- a/tools/aapt2/Linker_test.cpp
+++ b/tools/aapt2/Linker_test.cpp
@@ -15,8 +15,8 @@
  */
 
 #include "Linker.h"
-#include "Resolver.h"
 #include "ResourceTable.h"
+#include "ResourceTableResolver.h"
 #include "ResourceValues.h"
 #include "Util.h"
 
@@ -31,7 +31,7 @@
         mTable = std::make_shared<ResourceTable>();
         mTable->setPackage(u"android");
         mTable->setPackageId(0x01);
-        mLinker = std::make_shared<Linker>(mTable, std::make_shared<Resolver>(
+        mLinker = std::make_shared<Linker>(mTable, std::make_shared<ResourceTableResolver>(
                 mTable, std::make_shared<android::AssetManager>()));
 
         // Create a few attributes for use in the tests.
diff --git a/tools/aapt2/Main.cpp b/tools/aapt2/Main.cpp
index be806c9..3377f07 100644
--- a/tools/aapt2/Main.cpp
+++ b/tools/aapt2/Main.cpp
@@ -29,6 +29,7 @@
 #include "Png.h"
 #include "ResourceParser.h"
 #include "ResourceTable.h"
+#include "ResourceTableResolver.h"
 #include "ResourceValues.h"
 #include "SdkConstants.h"
 #include "SourceXmlPullParser.h"
@@ -271,6 +272,7 @@
     ConfigDescription config;
     std::string originalPath;
     ZipFile* apk;
+    std::u16string originalPackage;
 };
 
 template <typename TChar>
@@ -321,9 +323,17 @@
         Compile,
     };
 
+    enum class PackageType {
+        StandardApp,
+        StaticLibrary,
+    };
+
     // The phase to process.
     Phase phase;
 
+    // The type of package to produce.
+    PackageType packageType = PackageType::StandardApp;
+
     // Details about the app.
     AppInfo appInfo;
 
@@ -371,6 +381,8 @@
     XmlFlattener flattener(table, {});
 
     XmlFlattener::Options xmlOptions;
+    xmlOptions.defaultPackage = table->getPackage();
+
     if (options.versionStylesAndLayouts) {
         // We strip attributes that do not belong in this version of the resource.
         // Non-version qualified resources have an implicit version 1 requirement.
@@ -432,7 +444,7 @@
     return true;
 }
 
-bool linkXml(const AaptOptions& options, const std::shared_ptr<Resolver>& resolver,
+bool linkXml(const AaptOptions& options, const std::shared_ptr<IResolver>& resolver,
              const LinkItem& item, const void* data, size_t dataLen, ZipFile* outApk) {
     std::shared_ptr<android::ResXMLTree> tree = std::make_shared<android::ResXMLTree>();
     if (tree->setTo(data, dataLen, false) != android::NO_ERROR) {
@@ -443,7 +455,10 @@
 
     BigBuffer outBuffer(1024);
     XmlFlattener flattener({}, resolver);
-    if (!flattener.flatten(item.source, xmlParser, &outBuffer, {})) {
+
+    XmlFlattener::Options xmlOptions;
+    xmlOptions.defaultPackage = item.originalPackage;
+    if (!flattener.flatten(item.source, xmlParser, &outBuffer, xmlOptions)) {
         return false;
     }
 
@@ -490,8 +505,8 @@
     return true;
 }
 
-bool compileManifest(const AaptOptions& options, const std::shared_ptr<Resolver>& resolver,
-                     ZipFile* outApk) {
+bool compileManifest(const AaptOptions& options,
+                     const std::shared_ptr<ResourceTableResolver>& resolver, ZipFile* outApk) {
     if (options.verbose) {
         Logger::note(options.manifest) << "compiling AndroidManifest.xml." << std::endl;
     }
@@ -506,7 +521,9 @@
     std::shared_ptr<XmlPullParser> xmlParser = std::make_shared<SourceXmlPullParser>(in);
     XmlFlattener flattener({}, resolver);
 
-    if (!flattener.flatten(options.manifest, xmlParser, &outBuffer, {})) {
+    XmlFlattener::Options xmlOptions;
+    xmlOptions.defaultPackage = options.appInfo.package;
+    if (!flattener.flatten(options.manifest, xmlParser, &outBuffer, xmlOptions)) {
         return false;
     }
 
@@ -640,8 +657,12 @@
             for (auto& value : entry->values) {
                 visitFunc<FileReference>(*value.value, [&](FileReference& ref) {
                     std::string pathUtf8 = util::utf16ToUtf8(*ref.path);
+                    Source newSource = source;
+                    newSource.path += "/";
+                    newSource.path += pathUtf8;
                     outLinkQueue->push(LinkItem{
-                            source, name, value.config, pathUtf8, apk.get() });
+                            newSource, name, value.config, pathUtf8, apk.get(),
+                            table->getPackage() });
                     // Now rewrite the file path.
                     if (mangle) {
                         ref.path = table->getValueStringPool().makeRef(util::utf8ToUtf16(
@@ -657,9 +678,20 @@
 static constexpr int kOpenFlags = ZipFile::kOpenCreate | ZipFile::kOpenTruncate |
         ZipFile::kOpenReadWrite;
 
+struct DeleteMalloc {
+    void operator()(void* ptr) {
+        free(ptr);
+    }
+};
+
+struct StaticLibraryData {
+    Source source;
+    std::unique_ptr<ZipFile> apk;
+};
+
 bool link(const AaptOptions& options, const std::shared_ptr<ResourceTable>& outTable,
-          const std::shared_ptr<Resolver>& resolver) {
-    std::map<std::shared_ptr<ResourceTable>, std::unique_ptr<ZipFile>> apkFiles;
+          const std::shared_ptr<ResourceTableResolver>& resolver) {
+    std::map<std::shared_ptr<ResourceTable>, StaticLibraryData> apkFiles;
     std::unordered_set<std::u16string> linkedPackages;
 
     // Populate the linkedPackages with our own.
@@ -681,19 +713,18 @@
             return false;
         }
 
-        void* uncompressedData = zipFile->uncompress(entry);
+        std::unique_ptr<void, DeleteMalloc> uncompressedData = std::unique_ptr<void, DeleteMalloc>(
+                zipFile->uncompress(entry));
         assert(uncompressedData);
 
-        BinaryResourceParser parser(table, resolver, source, uncompressedData,
+        BinaryResourceParser parser(table, resolver, source, uncompressedData.get(),
                                     entry->getUncompressedLen());
         if (!parser.parse()) {
-            free(uncompressedData);
             return false;
         }
-        free(uncompressedData);
 
         // Keep track of where this table came from.
-        apkFiles[table] = std::move(zipFile);
+        apkFiles[table] = StaticLibraryData{ source, std::move(zipFile) };
 
         // Add the package to the set of linked packages.
         linkedPackages.insert(table->getPackage());
@@ -704,7 +735,8 @@
         const std::shared_ptr<ResourceTable>& inTable = p.first;
 
         // Collect all FileReferences and add them to the queue for processing.
-        addApkFilesToLinkQueue(options.appInfo.package, Source{}, inTable, p.second, &linkQueue);
+        addApkFilesToLinkQueue(options.appInfo.package, p.second.source, inTable, p.second.apk,
+                               &linkQueue);
 
         // Merge the tables.
         if (!outTable->merge(std::move(*inTable))) {
@@ -746,6 +778,7 @@
     for (; !linkQueue.empty(); linkQueue.pop()) {
         const LinkItem& item = linkQueue.front();
 
+        assert(!item.originalPackage.empty());
         ZipEntry* entry = item.apk->getEntryByName(item.originalPath.data());
         if (!entry) {
             Logger::error(item.source) << "failed to find '" << item.originalPath << "'."
@@ -775,7 +808,11 @@
 
     // Generate the Java class file.
     if (options.generateJavaClass) {
-        JavaClassGenerator generator(outTable, {});
+        JavaClassGenerator::Options javaOptions;
+        if (options.packageType == AaptOptions::PackageType::StaticLibrary) {
+            javaOptions.useFinal = false;
+        }
+        JavaClassGenerator generator(outTable, javaOptions);
 
         for (const std::u16string& package : linkedPackages) {
             Source outPath = options.generateJavaClass.value();
@@ -811,9 +848,26 @@
         }
     }
 
+    outTable->getValueStringPool().prune();
+    outTable->getValueStringPool().sort(
+            [](const StringPool::Entry& a, const StringPool::Entry& b) -> bool {
+                if (a.context.priority < b.context.priority) {
+                    return true;
+                }
+
+                if (a.context.priority > b.context.priority) {
+                    return false;
+                }
+                return a.value < b.value;
+            });
+
+
     // Flatten the resource table.
     TableFlattener::Options flattenerOptions;
-    flattenerOptions.useExtendedChunks = false;
+    if (options.packageType == AaptOptions::PackageType::StaticLibrary) {
+        flattenerOptions.useExtendedChunks = true;
+    }
+
     if (!writeResourceTable(options, outTable, flattenerOptions, &outApk)) {
         return false;
     }
@@ -823,7 +877,7 @@
 }
 
 bool compile(const AaptOptions& options, const std::shared_ptr<ResourceTable>& table,
-             const std::shared_ptr<Resolver>& resolver) {
+             const std::shared_ptr<IResolver>& resolver) {
     std::queue<CompileItem> compileQueue;
     bool error = false;
 
@@ -960,6 +1014,7 @@
         printCommandsAndDie();
     }
 
+    bool isStaticLib = false;
     if (options.phase == AaptOptions::Phase::Compile) {
         flag::requiredFlag("--package", "Android package name",
                 [&options](const StringPiece& arg) {
@@ -987,6 +1042,8 @@
                 [&options](const StringPiece& arg) {
                     options.generateJavaClass = Source{ arg.toString() };
                 });
+        flag::optionalSwitch("--static-lib", "generate a static Android library", true,
+                             &isStaticLib);
     }
 
     // Common flags for all steps.
@@ -1010,6 +1067,10 @@
         flag::usageAndDie(fullCommand);
     }
 
+    if (isStaticLib) {
+        options.packageType = AaptOptions::PackageType::StaticLibrary;
+    }
+
     // Copy all the remaining arguments.
     for (const std::string& arg : flag::getArgs()) {
         options.input.push_back(Source{ arg });
@@ -1073,7 +1134,8 @@
     }
 
     // Make the resolver that will cache IDs for us.
-    std::shared_ptr<Resolver> resolver = std::make_shared<Resolver>(table, libraries);
+    std::shared_ptr<ResourceTableResolver> resolver = std::make_shared<ResourceTableResolver>(
+            table, libraries);
 
     if (options.phase == AaptOptions::Phase::Compile) {
         if (!compile(options, table, resolver)) {
diff --git a/tools/aapt2/ManifestValidator.cpp b/tools/aapt2/ManifestValidator.cpp
index 7ec0bc7..123b9fa 100644
--- a/tools/aapt2/ManifestValidator.cpp
+++ b/tools/aapt2/ManifestValidator.cpp
@@ -190,18 +190,26 @@
     bool error = false;
     SourceLogger logger(source);
 
-    const size_t attrCount = parser->getAttributeCount();
-    for (size_t i = 0; i < attrCount; i++) {
-        size_t len = 0;
-        StringPiece16 attrNamespace(parser->getAttributeNamespace(i, &len), len);
-        StringPiece16 attrName(parser->getAttributeName(i, &len), len);
-        if (attrNamespace.empty() && attrName == u"package") {
-            error |= !validateInlineAttribute(parser, i, logger, kPackageIdentSet);
-        } else if (attrNamespace == u"android") {
-            if (attrName == u"sharedUserId") {
-                error |= !validateInlineAttribute(parser, i, logger, kPackageIdentSet);
-            }
-        }
+    const StringPiece16 kAndroid = u"android";
+    const StringPiece16 kPackage = u"package";
+    const StringPiece16 kSharedUserId = u"sharedUserId";
+
+    ssize_t idx;
+
+    idx = parser->indexOfAttribute(nullptr, 0, kPackage.data(), kPackage.size());
+    if (idx < 0) {
+        logger.error(parser->getLineNumber())
+                << "missing package attribute."
+                << std::endl;
+        error = true;
+    } else {
+        error |= !validateInlineAttribute(parser, idx, logger, kPackageIdentSet);
+    }
+
+    idx = parser->indexOfAttribute(kAndroid.data(), kAndroid.size(),
+                                   kSharedUserId.data(), kSharedUserId.size());
+    if (idx >= 0) {
+        error |= !validateInlineAttribute(parser, idx, logger, kPackageIdentSet);
     }
     return !error;
 }
diff --git a/tools/aapt2/Maybe.h b/tools/aapt2/Maybe.h
index f6a396d..ff6625f 100644
--- a/tools/aapt2/Maybe.h
+++ b/tools/aapt2/Maybe.h
@@ -34,54 +34,68 @@
     /**
      * Construct Nothing.
      */
-    inline Maybe();
+    Maybe();
 
-    inline ~Maybe();
+    ~Maybe();
+
+    Maybe(const Maybe& rhs);
 
     template <typename U>
-    inline Maybe(const Maybe<U>& rhs);
+    Maybe(const Maybe<U>& rhs);
+
+    Maybe(Maybe&& rhs);
 
     template <typename U>
-    inline Maybe(Maybe<U>&& rhs);
+    Maybe(Maybe<U>&& rhs);
+
+    Maybe& operator=(const Maybe& rhs);
 
     template <typename U>
-    inline Maybe& operator=(const Maybe<U>& rhs);
+    Maybe& operator=(const Maybe<U>& rhs);
+
+    Maybe& operator=(Maybe&& rhs);
 
     template <typename U>
-    inline Maybe& operator=(Maybe<U>&& rhs);
+    Maybe& operator=(Maybe<U>&& rhs);
 
     /**
      * Construct a Maybe holding a value.
      */
-    inline Maybe(const T& value);
+    Maybe(const T& value);
 
     /**
      * Construct a Maybe holding a value.
      */
-    inline Maybe(T&& value);
+    Maybe(T&& value);
 
     /**
      * True if this holds a value, false if
      * it holds Nothing.
      */
-    inline operator bool() const;
+    operator bool() const;
 
     /**
      * Gets the value if one exists, or else
      * panics.
      */
-    inline T& value();
+    T& value();
 
     /**
      * Gets the value if one exists, or else
      * panics.
      */
-    inline const T& value() const;
+    const T& value() const;
 
 private:
     template <typename U>
     friend class Maybe;
 
+    template <typename U>
+    Maybe& copy(const Maybe<U>& rhs);
+
+    template <typename U>
+    Maybe& move(Maybe<U>&& rhs);
+
     void destroy();
 
     bool mNothing;
@@ -102,6 +116,14 @@
 }
 
 template <typename T>
+Maybe<T>::Maybe(const Maybe& rhs)
+: mNothing(rhs.mNothing) {
+    if (!rhs.mNothing) {
+        new (&mStorage) T(reinterpret_cast<const T&>(rhs.mStorage));
+    }
+}
+
+template <typename T>
 template <typename U>
 Maybe<T>::Maybe(const Maybe<U>& rhs)
 : mNothing(rhs.mNothing) {
@@ -111,6 +133,18 @@
 }
 
 template <typename T>
+Maybe<T>::Maybe(Maybe&& rhs)
+: mNothing(rhs.mNothing) {
+    if (!rhs.mNothing) {
+        rhs.mNothing = true;
+
+        // Move the value from rhs.
+        new (&mStorage) T(std::move(reinterpret_cast<T&>(rhs.mStorage)));
+        rhs.destroy();
+    }
+}
+
+template <typename T>
 template <typename U>
 Maybe<T>::Maybe(Maybe<U>&& rhs)
 : mNothing(rhs.mNothing) {
@@ -119,16 +153,25 @@
 
         // Move the value from rhs.
         new (&mStorage) T(std::move(reinterpret_cast<U&>(rhs.mStorage)));
-
-        // Since the value in rhs is now Nothing,
-        // run the destructor for the value.
         rhs.destroy();
     }
 }
 
 template <typename T>
+inline Maybe<T>& Maybe<T>::operator=(const Maybe& rhs) {
+    // Delegate to the actual assignment.
+    return copy(rhs);
+}
+
+template <typename T>
 template <typename U>
-Maybe<T>& Maybe<T>::operator=(const Maybe<U>& rhs) {
+inline Maybe<T>& Maybe<T>::operator=(const Maybe<U>& rhs) {
+    return copy(rhs);
+}
+
+template <typename T>
+template <typename U>
+Maybe<T>& Maybe<T>::copy(const Maybe<U>& rhs) {
     if (mNothing && rhs.mNothing) {
         // Both are nothing, nothing to do.
         return *this;
@@ -150,8 +193,20 @@
 }
 
 template <typename T>
+inline Maybe<T>& Maybe<T>::operator=(Maybe&& rhs) {
+    // Delegate to the actual assignment.
+    return move(std::forward<Maybe<T>>(rhs));
+}
+
+template <typename T>
 template <typename U>
-Maybe<T>& Maybe<T>::operator=(Maybe<U>&& rhs) {
+inline Maybe<T>& Maybe<T>::operator=(Maybe<U>&& rhs) {
+    return move(std::forward<Maybe<U>>(rhs));
+}
+
+template <typename T>
+template <typename U>
+Maybe<T>& Maybe<T>::move(Maybe<U>&& rhs) {
     if (mNothing && rhs.mNothing) {
         // Both are nothing, nothing to do.
         return *this;
@@ -162,14 +217,15 @@
         rhs.destroy();
     } else if (mNothing) {
         // We are nothing but rhs is something.
-        mNothing = rhs.mNothing;
+        mNothing = false;
+        rhs.mNothing = true;
 
         // Move the value from rhs.
         new (&mStorage) T(std::move(reinterpret_cast<U&>(rhs.mStorage)));
         rhs.destroy();
     } else {
         // We are something but rhs is nothing, so destroy our value.
-        mNothing = rhs.mNothing;
+        mNothing = true;
         destroy();
     }
     return *this;
diff --git a/tools/aapt2/Maybe_test.cpp b/tools/aapt2/Maybe_test.cpp
index 348d7dd..71bbb94 100644
--- a/tools/aapt2/Maybe_test.cpp
+++ b/tools/aapt2/Maybe_test.cpp
@@ -23,20 +23,64 @@
 
 struct Dummy {
     Dummy() {
-        std::cerr << "Constructing Dummy " << (void *) this << std::endl;
+        data = new int;
+        *data = 1;
+        std::cerr << "Construct Dummy{0x" << (void *) this
+                  << "} with data=0x" << (void*) data
+                  << std::endl;
     }
 
     Dummy(const Dummy& rhs) {
-        std::cerr << "Copying Dummy " << (void *) this << " from " << (const void*) &rhs << std::endl;
+        data = nullptr;
+        if (rhs.data) {
+            data = new int;
+            *data = *rhs.data;
+        }
+        std::cerr << "CopyConstruct Dummy{0x" << (void *) this
+                  << "} from Dummy{0x" << (const void*) &rhs
+                  << "}" << std::endl;
     }
 
     Dummy(Dummy&& rhs) {
-        std::cerr << "Moving Dummy " << (void *) this << " from " << (void*) &rhs << std::endl;
+        data = rhs.data;
+        rhs.data = nullptr;
+        std::cerr << "MoveConstruct Dummy{0x" << (void *) this
+                  << "} from Dummy{0x" << (const void*) &rhs
+                  << "}" << std::endl;
+    }
+
+    Dummy& operator=(const Dummy& rhs) {
+        delete data;
+        data = nullptr;
+
+        if (rhs.data) {
+            data = new int;
+            *data = *rhs.data;
+        }
+        std::cerr << "CopyAssign Dummy{0x" << (void *) this
+                  << "} from Dummy{0x" << (const void*) &rhs
+                  << "}" << std::endl;
+        return *this;
+    }
+
+    Dummy& operator=(Dummy&& rhs) {
+        delete data;
+        data = rhs.data;
+        rhs.data = nullptr;
+        std::cerr << "MoveAssign Dummy{0x" << (void *) this
+                  << "} from Dummy{0x" << (const void*) &rhs
+                  << "}" << std::endl;
+        return *this;
     }
 
     ~Dummy() {
-        std::cerr << "Destroying Dummy " << (void *) this << std::endl;
+        std::cerr << "Destruct Dummy{0x" << (void *) this
+                  << "} with data=0x" << (void*) data
+                  << std::endl;
+        delete data;
     }
+
+    int* data;
 };
 
 TEST(MaybeTest, MakeNothing) {
@@ -66,4 +110,12 @@
     Maybe<Dummy> val2 = make_value(Dummy());
 }
 
+TEST(MaybeTest, MoveAssign) {
+    Maybe<Dummy> val;
+    {
+        Maybe<Dummy> val2 = Dummy();
+        val = std::move(val2);
+    }
+}
+
 } // namespace aapt
diff --git a/tools/aapt2/MockResolver.h b/tools/aapt2/MockResolver.h
new file mode 100644
index 0000000..48ff6a6
--- /dev/null
+++ b/tools/aapt2/MockResolver.h
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+
+#ifndef AAPT_MOCK_RESOLVER_H
+#define AAPT_MOCK_RESOLVER_H
+
+#include "Maybe.h"
+#include "Resolver.h"
+#include "Resource.h"
+#include "ResourceTable.h"
+#include "ResourceTableResolver.h"
+#include "ResourceValues.h"
+#include "StringPiece.h"
+
+#include <map>
+#include <string>
+
+namespace aapt {
+
+struct MockResolver : public IResolver {
+    MockResolver(const std::shared_ptr<ResourceTable>& table,
+                 const std::map<ResourceName, ResourceId>& items) :
+            mResolver(std::make_shared<ResourceTableResolver>(
+                        table, std::make_shared<const android::AssetManager>())),
+            mAttr(false, android::ResTable_map::TYPE_ANY), mItems(items) {
+    }
+
+    virtual Maybe<ResourceId> findId(const ResourceName& name) override {
+        Maybe<ResourceId> result = mResolver->findId(name);
+        if (result) {
+            return result;
+        }
+
+        const auto iter = mItems.find(name);
+        if (iter != mItems.end()) {
+            return iter->second;
+        }
+        return {};
+    }
+
+    virtual Maybe<Entry> findAttribute(const ResourceName& name) override {
+        Maybe<Entry> tableResult = mResolver->findAttribute(name);
+        if (tableResult) {
+            return tableResult;
+        }
+
+        Maybe<ResourceId> result = findId(name);
+        if (result) {
+            if (name.type == ResourceType::kAttr) {
+                return Entry{ result.value(), &mAttr };
+            } else {
+                return Entry{ result.value() };
+            }
+        }
+        return {};
+    }
+
+    virtual Maybe<ResourceName> findName(ResourceId resId) override {
+        Maybe<ResourceName> result = mResolver->findName(resId);
+        if (result) {
+            return result;
+        }
+
+        for (auto& p : mItems) {
+            if (p.second == resId) {
+                return p.first;
+            }
+        }
+        return {};
+    }
+
+private:
+    std::shared_ptr<ResourceTableResolver> mResolver;
+    Attribute mAttr;
+    std::map<ResourceName, ResourceId> mItems;
+};
+
+} // namespace aapt
+
+#endif // AAPT_MOCK_RESOLVER_H
diff --git a/tools/aapt2/Resolver.h b/tools/aapt2/Resolver.h
index cb2234d..cb9318e 100644
--- a/tools/aapt2/Resolver.h
+++ b/tools/aapt2/Resolver.h
@@ -19,31 +19,18 @@
 
 #include "Maybe.h"
 #include "Resource.h"
-#include "ResourceTable.h"
 #include "ResourceValues.h"
 
-#include <androidfw/AssetManager.h>
 #include <androidfw/ResourceTypes.h>
-#include <memory>
-#include <vector>
-#include <unordered_set>
 
 namespace aapt {
 
 /**
  * Resolves symbolic references (package:type/entry) into resource IDs/objects.
- * Encapsulates the search of library sources as well as the local ResourceTable.
  */
-class Resolver {
+class IResolver {
 public:
-    /**
-     * Creates a resolver with a local ResourceTable and an AssetManager
-     * loaded with library packages.
-     */
-    Resolver(std::shared_ptr<const ResourceTable> table,
-             std::shared_ptr<const android::AssetManager> sources);
-
-    Resolver(const Resolver&) = delete; // Not copyable.
+    virtual ~IResolver() {};
 
     /**
      * Holds the result of a resource name lookup.
@@ -65,47 +52,24 @@
     };
 
     /**
-     * Return the package to use when none is specified. This
-     * is the package name of the app being built.
-     */
-    const std::u16string& getDefaultPackage() const;
-
-    /**
      * Returns a ResourceID if the name is found. The ResourceID
      * may not be valid if the resource was not assigned an ID.
      */
-    Maybe<ResourceId> findId(const ResourceName& name);
+    virtual Maybe<ResourceId> findId(const ResourceName& name) = 0;
 
     /**
      * Returns an Entry if the name is found. Entry::attr
      * may be nullptr if the resource is not an attribute.
      */
-    Maybe<Entry> findAttribute(const ResourceName& name);
+    virtual Maybe<Entry> findAttribute(const ResourceName& name) = 0;
 
-    const android::ResTable& getResTable() const;
-
-private:
-    struct CacheEntry {
-        ResourceId id;
-        std::unique_ptr<Attribute> attr;
-    };
-
-    const CacheEntry* buildCacheEntry(const ResourceName& name);
-
-    std::shared_ptr<const ResourceTable> mTable;
-    std::shared_ptr<const android::AssetManager> mSources;
-    std::map<ResourceName, CacheEntry> mCache;
-    std::unordered_set<std::u16string> mIncludedPackages;
+    /**
+     * Find a resource by ID. Resolvers may contain resources without
+     * resource IDs assigned to them.
+     */
+    virtual Maybe<ResourceName> findName(ResourceId resId) = 0;
 };
 
-inline const std::u16string& Resolver::getDefaultPackage() const {
-    return mTable->getPackage();
-}
-
-inline const android::ResTable& Resolver::getResTable() const {
-    return mSources->getResources(false);
-}
-
 } // namespace aapt
 
 #endif // AAPT_RESOLVER_H
diff --git a/tools/aapt2/Resource.h b/tools/aapt2/Resource.h
index f928acd..fa9ac07 100644
--- a/tools/aapt2/Resource.h
+++ b/tools/aapt2/Resource.h
@@ -96,6 +96,8 @@
     ResourceNameRef(ResourceNameRef&&) = default;
     ResourceNameRef(const ResourceName& rhs);
     ResourceNameRef(const StringPiece16& p, ResourceType t, const StringPiece16& e);
+    ResourceNameRef& operator=(const ResourceNameRef& rhs) = default;
+    ResourceNameRef& operator=(ResourceNameRef&& rhs) = default;
     ResourceNameRef& operator=(const ResourceName& rhs);
 
     ResourceName toResourceName() const;
@@ -130,6 +132,7 @@
     uint8_t typeId() const;
     uint16_t entryId() const;
     bool operator<(const ResourceId& rhs) const;
+    bool operator==(const ResourceId& rhs) const;
 };
 
 //
@@ -178,6 +181,10 @@
     return id < rhs.id;
 }
 
+inline bool ResourceId::operator==(const ResourceId& rhs) const {
+    return id == rhs.id;
+}
+
 inline ::std::ostream& operator<<(::std::ostream& out,
         const ResourceId& resId) {
     std::ios_base::fmtflags oldFlags = out.flags();
diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp
index 943892d..e7e824c 100644
--- a/tools/aapt2/ResourceParser.cpp
+++ b/tools/aapt2/ResourceParser.cpp
@@ -175,23 +175,16 @@
 }
 
 std::unique_ptr<Reference> ResourceParser::tryParseReference(const StringPiece16& str,
-                                                             const StringPiece16& defaultPackage,
                                                              bool* outCreate) {
     ResourceNameRef ref;
     bool privateRef = false;
     if (tryParseReference(str, &ref, outCreate, &privateRef)) {
-        if (ref.package.empty()) {
-            ref.package = defaultPackage;
-        }
         std::unique_ptr<Reference> value = util::make_unique<Reference>(ref);
         value->privateReference = privateRef;
         return value;
     }
 
     if (tryParseAttributeReference(str, &ref)) {
-        if (ref.package.empty()) {
-            ref.package = defaultPackage;
-        }
         *outCreate = false;
         return util::make_unique<Reference>(ref, Reference::Type::kAttribute);
     }
@@ -330,7 +323,7 @@
     StringPiece16 trimmedStr(util::trimWhitespace(str));
     uint32_t data = 0;
     if (trimmedStr == u"true" || trimmedStr == u"TRUE") {
-        data = 1;
+        data = 0xffffffffu;
     } else if (trimmedStr != u"false" && trimmedStr != u"FALSE") {
         return {};
     }
@@ -397,7 +390,7 @@
 }
 
 std::unique_ptr<Item> ResourceParser::parseItemForAttribute(
-        const StringPiece16& value, uint32_t typeMask, const StringPiece16& defaultPackage,
+        const StringPiece16& value, uint32_t typeMask,
         std::function<void(const ResourceName&)> onCreateReference) {
     std::unique_ptr<BinaryPrimitive> nullOrEmpty = tryParseNullOrEmpty(value);
     if (nullOrEmpty) {
@@ -405,7 +398,7 @@
     }
 
     bool create = false;
-    std::unique_ptr<Reference> reference = tryParseReference(value, defaultPackage, &create);
+    std::unique_ptr<Reference> reference = tryParseReference(value, &create);
     if (reference) {
         if (create && onCreateReference) {
             onCreateReference(reference->name);
@@ -457,11 +450,10 @@
  * allows.
  */
 std::unique_ptr<Item> ResourceParser::parseItemForAttribute(
-        const StringPiece16& str, const Attribute& attr, const StringPiece16& defaultPackage,
+        const StringPiece16& str, const Attribute& attr,
         std::function<void(const ResourceName&)> onCreateReference) {
     const uint32_t typeMask = attr.typeMask;
-    std::unique_ptr<Item> value = parseItemForAttribute(str, typeMask, defaultPackage,
-                                                        onCreateReference);
+    std::unique_ptr<Item> value = parseItemForAttribute(str, typeMask, onCreateReference);
     if (value) {
         return value;
     }
@@ -770,14 +762,25 @@
     }
 
     auto onCreateReference = [&](const ResourceName& name) {
+        // name.package can be empty here, as it will assume the package name of the table.
         mTable->addResource(name, {}, mSource.line(beginXmlLine), util::make_unique<Id>());
     };
 
     // Process the raw value.
     std::unique_ptr<Item> processedItem = parseItemForAttribute(rawValue, typeMask,
-                                                                mTable->getPackage(),
                                                                 onCreateReference);
     if (processedItem) {
+        // Fix up the reference.
+        visitFunc<Reference>(*processedItem, [&](Reference& ref) {
+            if (!ref.name.package.empty()) {
+                // The package name was set, so lookup its alias.
+                parser->applyPackageAlias(&ref.name.package, mTable->getPackage());
+            } else {
+                // The package name was left empty, so it assumes the default package
+                // without alias lookup.
+                ref.name.package = mTable->getPackage();
+            }
+        });
         return processedItem;
     }
 
@@ -1093,7 +1096,7 @@
     return true;
 }
 
-static bool parseXmlAttributeName(StringPiece16 str, ResourceNameRef* outRef) {
+static bool parseXmlAttributeName(StringPiece16 str, ResourceName* outName) {
     str = util::trimWhitespace(str);
     const char16_t* const start = str.data();
     const char16_t* const end = start + str.size();
@@ -1110,12 +1113,12 @@
         p++;
     }
 
-    outRef->package = package;
-    outRef->type = ResourceType::kAttr;
+    outName->package = package.toString();
+    outName->type = ResourceType::kAttr;
     if (name.size() == 0) {
-        outRef->entry = str;
+        outName->entry = str.toString();
     } else {
-        outRef->entry = name;
+        outName->entry = name.toString();
     }
     return true;
 }
@@ -1130,8 +1133,8 @@
         return false;
     }
 
-    ResourceNameRef keyRef;
-    if (!parseXmlAttributeName(nameAttrIter->value, &keyRef)) {
+    ResourceName key;
+    if (!parseXmlAttributeName(nameAttrIter->value, &key)) {
         mLogger.error(parser->getLineNumber())
                 << "invalid attribute name '"
                 << nameAttrIter->value
@@ -1140,14 +1143,15 @@
         return false;
     }
 
-    if (keyRef.package.empty()) {
-        keyRef.package = mTable->getPackage();
+    if (!key.package.empty()) {
+        // We have a package name set, so lookup its alias.
+        parser->applyPackageAlias(&key.package, mTable->getPackage());
+    } else {
+        // The package name was omitted, so use the default package name with
+        // no alias lookup.
+        key.package = mTable->getPackage();
     }
 
-    // Create a copy instead of a reference because we
-    // are about to invalidate keyRef when advancing the parser.
-    ResourceName key = keyRef.toResourceName();
-
     std::unique_ptr<Item> value = parseXml(parser, 0, kAllowRawString);
     if (!value) {
         return false;
@@ -1170,7 +1174,11 @@
             return false;
         }
 
-        if (style->parent.name.package.empty()) {
+        if (!style->parent.name.package.empty()) {
+            // Try to interpret the package name as an alias. These take precedence.
+            parser->applyPackageAlias(&style->parent.name.package, mTable->getPackage());
+        } else {
+            // If no package is specified, this can not be an alias and is the local package.
             style->parent.name.package = mTable->getPackage();
         }
     }
diff --git a/tools/aapt2/ResourceParser.h b/tools/aapt2/ResourceParser.h
index 52194bd..7618999 100644
--- a/tools/aapt2/ResourceParser.h
+++ b/tools/aapt2/ResourceParser.h
@@ -76,12 +76,10 @@
 
     /*
      * Returns a Reference object if the string was parsed as a resource or attribute reference,
-     * ( @[+][package:]type/name | ?[package:]type/name )
-     * assigning defaultPackage if the package was not present in the string, and setting
-     * outCreate to true if the '+' was present in the string.
+     * ( @[+][package:]type/name | ?[package:]type/name ) setting outCreate to true if
+     * the '+' was present in the string.
      */
     static std::unique_ptr<Reference> tryParseReference(const StringPiece16& str,
-                                                        const StringPiece16& defaultPackage,
                                                         bool* outCreate);
 
     /*
@@ -127,20 +125,18 @@
      */
     static std::unique_ptr<BinaryPrimitive> tryParseFlagSymbol(const Attribute& enumAttr,
                                                                const StringPiece16& str);
-
     /*
      * Try to convert a string to an Item for the given attribute. The attribute will
      * restrict what values the string can be converted to.
-     * The defaultPackage is used when the string is a reference with no defined package.
      * The callback function onCreateReference is called when the parsed item is a
      * reference to an ID that must be created (@+id/foo).
      */
     static std::unique_ptr<Item> parseItemForAttribute(
-            const StringPiece16& value, const Attribute& attr, const StringPiece16& defaultPackage,
+            const StringPiece16& value, const Attribute& attr,
             std::function<void(const ResourceName&)> onCreateReference = {});
 
     static std::unique_ptr<Item> parseItemForAttribute(
-            const StringPiece16& value, uint32_t typeMask, const StringPiece16& defaultPackage,
+            const StringPiece16& value, uint32_t typeMask,
             std::function<void(const ResourceName&)> onCreateReference = {});
 
     static uint32_t androidTypeToAttributeTypeMask(uint16_t type);
diff --git a/tools/aapt2/ResourceParser_test.cpp b/tools/aapt2/ResourceParser_test.cpp
index 63352de..00be3bd 100644
--- a/tools/aapt2/ResourceParser_test.cpp
+++ b/tools/aapt2/ResourceParser_test.cpp
@@ -125,11 +125,9 @@
         mTable->setPackage(u"android");
     }
 
-    ::testing::AssertionResult testParse(std::istream& in) {
+    ::testing::AssertionResult testParse(const StringPiece& str) {
         std::stringstream input(kXmlPreamble);
-        input << "<resources>" << std::endl
-              << in.rdbuf() << std::endl
-              << "</resources>" << std::endl;
+        input << "<resources>\n" << str << "\n</resources>" << std::endl;
         ResourceParser parser(mTable, Source{ "test" }, {},
                               std::make_shared<SourceXmlPullParser>(input));
         if (parser.parse()) {
@@ -174,7 +172,7 @@
 }
 
 TEST_F(ResourceParserTest, ParseQuotedString) {
-    std::stringstream input("<string name=\"foo\">   \"  hey there \" </string>");
+    std::string input = "<string name=\"foo\">   \"  hey there \" </string>";
     ASSERT_TRUE(testParse(input));
 
     const String* str = findResource<String>(ResourceName{
@@ -184,7 +182,7 @@
 }
 
 TEST_F(ResourceParserTest, ParseEscapedString) {
-    std::stringstream input("<string name=\"foo\">\\?123</string>");
+    std::string input = "<string name=\"foo\">\\?123</string>";
     ASSERT_TRUE(testParse(input));
 
     const String* str = findResource<String>(ResourceName{
@@ -194,9 +192,8 @@
 }
 
 TEST_F(ResourceParserTest, ParseAttr) {
-    std::stringstream input;
-    input << "<attr name=\"foo\" format=\"string\"/>" << std::endl
-          << "<attr name=\"bar\"/>" << std::endl;
+    std::string input = "<attr name=\"foo\" format=\"string\"/>\n"
+                        "<attr name=\"bar\"/>";
     ASSERT_TRUE(testParse(input));
 
     const Attribute* attr = findResource<Attribute>(ResourceName{
@@ -211,11 +208,10 @@
 }
 
 TEST_F(ResourceParserTest, ParseUseAndDeclOfAttr) {
-    std::stringstream input;
-    input << "<declare-styleable name=\"Styleable\">" << std::endl
-          << "  <attr name=\"foo\" />" << std::endl
-          << "</declare-styleable>" << std::endl
-          << "<attr name=\"foo\" format=\"string\"/>" << std::endl;
+    std::string input = "<declare-styleable name=\"Styleable\">\n"
+                        "  <attr name=\"foo\" />\n"
+                        "</declare-styleable>\n"
+                        "<attr name=\"foo\" format=\"string\"/>";
     ASSERT_TRUE(testParse(input));
 
     const Attribute* attr = findResource<Attribute>(ResourceName{
@@ -225,14 +221,12 @@
 }
 
 TEST_F(ResourceParserTest, ParseDoubleUseOfAttr) {
-    std::stringstream input;
-    input << "<declare-styleable name=\"Theme\">" << std::endl
-          << "  <attr name=\"foo\" />" << std::endl
-          << "</declare-styleable>" << std::endl
-          << "<declare-styleable name=\"Window\">" << std::endl
-          << "  <attr name=\"foo\" format=\"boolean\"/>" << std::endl
-          << "</declare-styleable>" << std::endl;
-
+    std::string input = "<declare-styleable name=\"Theme\">"
+                        "  <attr name=\"foo\" />\n"
+                        "</declare-styleable>\n"
+                        "<declare-styleable name=\"Window\">\n"
+                        "  <attr name=\"foo\" format=\"boolean\"/>\n"
+                        "</declare-styleable>";
     ASSERT_TRUE(testParse(input));
 
     const Attribute* attr = findResource<Attribute>(ResourceName{
@@ -242,12 +236,11 @@
 }
 
 TEST_F(ResourceParserTest, ParseEnumAttr) {
-    std::stringstream input;
-    input << "<attr name=\"foo\">" << std::endl
-          << "  <enum name=\"bar\" value=\"0\"/>" << std::endl
-          << "  <enum name=\"bat\" value=\"1\"/>" << std::endl
-          << "  <enum name=\"baz\" value=\"2\"/>" << std::endl
-          << "</attr>" << std::endl;
+    std::string input = "<attr name=\"foo\">\n"
+                        "  <enum name=\"bar\" value=\"0\"/>\n"
+                        "  <enum name=\"bat\" value=\"1\"/>\n"
+                        "  <enum name=\"baz\" value=\"2\"/>\n"
+                        "</attr>";
     ASSERT_TRUE(testParse(input));
 
     const Attribute* enumAttr = findResource<Attribute>(ResourceName{
@@ -267,12 +260,11 @@
 }
 
 TEST_F(ResourceParserTest, ParseFlagAttr) {
-    std::stringstream input;
-    input << "<attr name=\"foo\">" << std::endl
-          << "  <flag name=\"bar\" value=\"0\"/>" << std::endl
-          << "  <flag name=\"bat\" value=\"1\"/>" << std::endl
-          << "  <flag name=\"baz\" value=\"2\"/>" << std::endl
-          << "</attr>" << std::endl;
+    std::string input = "<attr name=\"foo\">\n"
+                        "  <flag name=\"bar\" value=\"0\"/>\n"
+                        "  <flag name=\"bat\" value=\"1\"/>\n"
+                        "  <flag name=\"baz\" value=\"2\"/>\n"
+                        "</attr>";
     ASSERT_TRUE(testParse(input));
 
     const Attribute* flagAttr = findResource<Attribute>(ResourceName{
@@ -297,22 +289,20 @@
 }
 
 TEST_F(ResourceParserTest, FailToParseEnumAttrWithNonUniqueKeys) {
-    std::stringstream input;
-    input << "<attr name=\"foo\">" << std::endl
-          << "  <enum name=\"bar\" value=\"0\"/>" << std::endl
-          << "  <enum name=\"bat\" value=\"1\"/>" << std::endl
-          << "  <enum name=\"bat\" value=\"2\"/>" << std::endl
-          << "</attr>" << std::endl;
+    std::string input = "<attr name=\"foo\">\n"
+                        "  <enum name=\"bar\" value=\"0\"/>\n"
+                        "  <enum name=\"bat\" value=\"1\"/>\n"
+                        "  <enum name=\"bat\" value=\"2\"/>\n"
+                        "</attr>";
     ASSERT_FALSE(testParse(input));
 }
 
 TEST_F(ResourceParserTest, ParseStyle) {
-    std::stringstream input;
-    input << "<style name=\"foo\" parent=\"@style/fu\">" << std::endl
-          << "  <item name=\"bar\">#ffffffff</item>" << std::endl
-          << "  <item name=\"bat\">@string/hey</item>" << std::endl
-          << "  <item name=\"baz\"><b>hey</b></item>" << std::endl
-          << "</style>" << std::endl;
+    std::string input = "<style name=\"foo\" parent=\"@style/fu\">\n"
+                        "  <item name=\"bar\">#ffffffff</item>\n"
+                        "  <item name=\"bat\">@string/hey</item>\n"
+                        "  <item name=\"baz\"><b>hey</b></item>\n"
+                        "</style>";
     ASSERT_TRUE(testParse(input));
 
     const Style* style = findResource<Style>(ResourceName{
@@ -330,8 +320,7 @@
 }
 
 TEST_F(ResourceParserTest, ParseStyleWithShorthandParent) {
-    std::stringstream input;
-    input << "<style name=\"foo\" parent=\"com.app:Theme\"/>" << std::endl;
+    std::string input = "<style name=\"foo\" parent=\"com.app:Theme\"/>";
     ASSERT_TRUE(testParse(input));
 
     const Style* style = findResource<Style>(
@@ -340,9 +329,34 @@
     EXPECT_EQ(ResourceNameRef(u"com.app", ResourceType::kStyle, u"Theme"), style->parent.name);
 }
 
+TEST_F(ResourceParserTest, ParseStyleWithPackageAliasedParent) {
+    std::string input = "<style xmlns:app=\"http://schemas.android.com/apk/res/android\"\n"
+                        "       name=\"foo\" parent=\"app:Theme\"/>";
+    ASSERT_TRUE(testParse(input));
+
+    const Style* style = findResource<Style>(ResourceName{
+            u"android", ResourceType::kStyle, u"foo" });
+    ASSERT_NE(style, nullptr);
+    EXPECT_EQ(ResourceNameRef(u"android", ResourceType::kStyle, u"Theme"), style->parent.name);
+}
+
+TEST_F(ResourceParserTest, ParseStyleWithPackageAliasedItems) {
+    std::string input =
+            "<style xmlns:app=\"http://schemas.android.com/apk/res/android\" name=\"foo\">\n"
+            "  <item name=\"app:bar\">0</item>\n"
+            "</style>";
+    ASSERT_TRUE(testParse(input));
+
+    const Style* style = findResource<Style>(ResourceName{
+            u"android", ResourceType::kStyle, u"foo" });
+    ASSERT_NE(style, nullptr);
+    ASSERT_EQ(1u, style->entries.size());
+    EXPECT_EQ(ResourceNameRef(u"android", ResourceType::kAttr, u"bar"),
+              style->entries[0].key.name);
+}
+
 TEST_F(ResourceParserTest, ParseAutoGeneratedIdReference) {
-    std::stringstream input;
-    input << "<string name=\"foo\">@+id/bar</string>" << std::endl;
+    std::string input = "<string name=\"foo\">@+id/bar</string>";
     ASSERT_TRUE(testParse(input));
 
     const Id* id = findResource<Id>(ResourceName{ u"android", ResourceType::kId, u"bar"});
@@ -350,11 +364,10 @@
 }
 
 TEST_F(ResourceParserTest, ParseAttributesDeclareStyleable) {
-    std::stringstream input;
-    input << "<declare-styleable name=\"foo\">" << std::endl
-          << "  <attr name=\"bar\" />" << std::endl
-          << "  <attr name=\"bat\" format=\"string|reference\"/>" << std::endl
-          << "</declare-styleable>" << std::endl;
+    std::string input = "<declare-styleable name=\"foo\">\n"
+                        "  <attr name=\"bar\" />\n"
+                        "  <attr name=\"bat\" format=\"string|reference\"/>\n"
+                        "</declare-styleable>";
     ASSERT_TRUE(testParse(input));
 
     const Attribute* attr = findResource<Attribute>(ResourceName{
@@ -376,12 +389,11 @@
 }
 
 TEST_F(ResourceParserTest, ParseArray) {
-    std::stringstream input;
-    input << "<array name=\"foo\">" << std::endl
-          << "  <item>@string/ref</item>" << std::endl
-          << "  <item>hey</item>" << std::endl
-          << "  <item>23</item>" << std::endl
-          << "</array>" << std::endl;
+    std::string input = "<array name=\"foo\">\n"
+                        "  <item>@string/ref</item>\n"
+                        "  <item>hey</item>\n"
+                        "  <item>23</item>\n"
+                        "</array>";
     ASSERT_TRUE(testParse(input));
 
     const Array* array = findResource<Array>(ResourceName{
@@ -395,19 +407,16 @@
 }
 
 TEST_F(ResourceParserTest, ParsePlural) {
-    std::stringstream input;
-    input << "<plurals name=\"foo\">" << std::endl
-          << "  <item quantity=\"other\">apples</item>" << std::endl
-          << "  <item quantity=\"one\">apple</item>" << std::endl
-          << "</plurals>" << std::endl
-          << std::endl;
+    std::string input = "<plurals name=\"foo\">\n"
+                        "  <item quantity=\"other\">apples</item>\n"
+                        "  <item quantity=\"one\">apple</item>\n"
+                        "</plurals>";
     ASSERT_TRUE(testParse(input));
 }
 
 TEST_F(ResourceParserTest, ParseCommentsWithResource) {
-    std::stringstream input;
-    input << "<!-- This is a comment -->" << std::endl
-          << "<string name=\"foo\">Hi</string>" << std::endl;
+    std::string input = "<!-- This is a comment -->\n"
+                        "<string name=\"foo\">Hi</string>";
     ASSERT_TRUE(testParse(input));
 
     const ResourceTableType* type;
@@ -425,7 +434,7 @@
  * (as an ID has no value).
  */
 TEST_F(ResourceParserTest, ParsePublicIdAsDefinition) {
-    std::stringstream input("<public type=\"id\" name=\"foo\"/>");
+    std::string input = "<public type=\"id\" name=\"foo\"/>";
     ASSERT_TRUE(testParse(input));
 
     const Id* id = findResource<Id>(ResourceName{ u"android", ResourceType::kId, u"foo" });
diff --git a/tools/aapt2/ResourceTable.cpp b/tools/aapt2/ResourceTable.cpp
index 02be651..9468860 100644
--- a/tools/aapt2/ResourceTable.cpp
+++ b/tools/aapt2/ResourceTable.cpp
@@ -299,16 +299,12 @@
 
     type->publicStatus.isPublic = true;
     entry->publicStatus.isPublic = true;
+    entry->publicStatus.source = source;
 
     if (resId.isValid()) {
         type->typeId = resId.typeId();
         entry->entryId = resId.entryId();
     }
-
-    if (entry->values.empty()) {
-        entry->values.push_back(ResourceConfigValue{ {}, source, {},
-                                    util::make_unique<Sentinel>() });
-    }
     return true;
 }
 
@@ -318,12 +314,16 @@
 
     for (auto& otherType : other) {
         std::unique_ptr<ResourceTableType>& type = findOrCreateType(otherType->type);
-        if (type->publicStatus.isPublic && otherType->publicStatus.isPublic &&
-                type->typeId != otherType->typeId) {
-            Logger::error() << "can not merge type '" << type->type << "': conflicting public IDs "
-                            << "(" << type->typeId << " vs " << otherType->typeId << ")."
-                            << std::endl;
-            return false;
+        if (otherType->publicStatus.isPublic) {
+            if (type->publicStatus.isPublic && type->typeId != otherType->typeId) {
+                Logger::error() << "can not merge type '" << type->type
+                                << "': conflicting public IDs "
+                                << "(" << type->typeId << " vs " << otherType->typeId << ")."
+                                << std::endl;
+                return false;
+            }
+            type->publicStatus = std::move(otherType->publicStatus);
+            type->typeId = otherType->typeId;
         }
 
         for (auto& otherEntry : otherType->entries) {
@@ -335,13 +335,16 @@
             }
 
             std::unique_ptr<ResourceEntry>& entry = findOrCreateEntry(type, *nameToAdd);
-            if (entry->publicStatus.isPublic && otherEntry->publicStatus.isPublic &&
-                    entry->entryId != otherEntry->entryId) {
-                Logger::error() << "can not merge entry '" << type->type << "/" << entry->name
-                                << "': conflicting public IDs "
-                                << "(" << entry->entryId << " vs " << entry->entryId << ")."
-                                << std::endl;
-                return false;
+            if (otherEntry->publicStatus.isPublic) {
+                if (entry->publicStatus.isPublic && entry->entryId != otherEntry->entryId) {
+                    Logger::error() << "can not merge entry '" << type->type << "/" << entry->name
+                                    << "': conflicting public IDs "
+                                    << "(" << entry->entryId << " vs " << entry->entryId << ")."
+                                    << std::endl;
+                    return false;
+                }
+                entry->publicStatus = std::move(otherEntry->publicStatus);
+                entry->entryId = otherEntry->entryId;
             }
 
             for (ResourceConfigValue& otherValue : otherEntry->values) {
diff --git a/tools/aapt2/ResourceTable.h b/tools/aapt2/ResourceTable.h
index 3591d11..94bacd8 100644
--- a/tools/aapt2/ResourceTable.h
+++ b/tools/aapt2/ResourceTable.h
@@ -35,6 +35,7 @@
  */
 struct Public {
     bool isPublic = false;
+    SourceLine source;
     std::u16string comment;
 };
 
diff --git a/tools/aapt2/Resolver.cpp b/tools/aapt2/ResourceTableResolver.cpp
similarity index 83%
rename from tools/aapt2/Resolver.cpp
rename to tools/aapt2/ResourceTableResolver.cpp
index ae006ab..0a9f521 100644
--- a/tools/aapt2/Resolver.cpp
+++ b/tools/aapt2/ResourceTableResolver.cpp
@@ -16,9 +16,9 @@
 
 #include "Maybe.h"
 #include "NameMangler.h"
-#include "Resolver.h"
 #include "Resource.h"
 #include "ResourceTable.h"
+#include "ResourceTableResolver.h"
 #include "ResourceValues.h"
 #include "Util.h"
 
@@ -29,8 +29,9 @@
 
 namespace aapt {
 
-Resolver::Resolver(std::shared_ptr<const ResourceTable> table,
-                   std::shared_ptr<const android::AssetManager> sources) :
+ResourceTableResolver::ResourceTableResolver(
+        std::shared_ptr<const ResourceTable> table,
+        std::shared_ptr<const android::AssetManager> sources) :
         mTable(table), mSources(sources) {
     const android::ResTable& resTable = mSources->getResources(false);
     const size_t packageCount = resTable.getBasePackageCount();
@@ -40,7 +41,7 @@
     }
 }
 
-Maybe<ResourceId> Resolver::findId(const ResourceName& name) {
+Maybe<ResourceId> ResourceTableResolver::findId(const ResourceName& name) {
     Maybe<Entry> result = findAttribute(name);
     if (result) {
         return result.value().id;
@@ -48,7 +49,7 @@
     return {};
 }
 
-Maybe<Resolver::Entry> Resolver::findAttribute(const ResourceName& name) {
+Maybe<IResolver::Entry> ResourceTableResolver::findAttribute(const ResourceName& name) {
     auto cacheIter = mCache.find(name);
     if (cacheIter != std::end(mCache)) {
         return Entry{ cacheIter->second.id, cacheIter->second.attr.get() };
@@ -97,12 +98,30 @@
     return {};
 }
 
+Maybe<ResourceName> ResourceTableResolver::findName(ResourceId resId) {
+    const android::ResTable& table = mSources->getResources(false);
+
+    android::ResTable::resource_name resourceName;
+    if (!table.getResourceName(resId.id, false, &resourceName)) {
+        return {};
+    }
+
+    const ResourceType* type = parseResourceType(StringPiece16(resourceName.type,
+                                                               resourceName.typeLen));
+    assert(type);
+    return ResourceName{
+            { resourceName.package, resourceName.packageLen },
+            *type,
+            { resourceName.name, resourceName.nameLen } };
+}
+
 /**
  * This is called when we need to lookup a resource name in the AssetManager.
  * Since the values in the AssetManager are not parsed like in a ResourceTable,
  * we must create Attribute objects here if we find them.
  */
-const Resolver::CacheEntry* Resolver::buildCacheEntry(const ResourceName& name) {
+const ResourceTableResolver::CacheEntry* ResourceTableResolver::buildCacheEntry(
+        const ResourceName& name) {
     const android::ResTable& table = mSources->getResources(false);
 
     const StringPiece16 type16 = toString(name.type);
diff --git a/tools/aapt2/ResourceTableResolver.h b/tools/aapt2/ResourceTableResolver.h
new file mode 100644
index 0000000..c8e8ab7
--- /dev/null
+++ b/tools/aapt2/ResourceTableResolver.h
@@ -0,0 +1,76 @@
+/*
+ * 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.
+ */
+
+#ifndef AAPT_RESOURCE_TABLE_RESOLVER_H
+#define AAPT_RESOURCE_TABLE_RESOLVER_H
+
+#include "Maybe.h"
+#include "Resolver.h"
+#include "Resource.h"
+#include "ResourceTable.h"
+#include "ResourceValues.h"
+
+#include <androidfw/AssetManager.h>
+#include <androidfw/ResourceTypes.h>
+#include <memory>
+#include <vector>
+#include <unordered_set>
+
+namespace aapt {
+
+/**
+ * Encapsulates the search of library sources as well as the local ResourceTable.
+ */
+class ResourceTableResolver : public IResolver {
+public:
+    /**
+     * Creates a resolver with a local ResourceTable and an AssetManager
+     * loaded with library packages.
+     */
+    ResourceTableResolver(std::shared_ptr<const ResourceTable> table,
+                          std::shared_ptr<const android::AssetManager> sources);
+
+    ResourceTableResolver(const ResourceTableResolver&) = delete; // Not copyable.
+
+    virtual Maybe<ResourceId> findId(const ResourceName& name) override;
+
+    virtual Maybe<Entry> findAttribute(const ResourceName& name) override;
+
+    virtual Maybe<ResourceName> findName(ResourceId resId) override;
+
+    const android::ResTable& getResTable() const;
+
+private:
+    struct CacheEntry {
+        ResourceId id;
+        std::unique_ptr<Attribute> attr;
+    };
+
+    const CacheEntry* buildCacheEntry(const ResourceName& name);
+
+    std::shared_ptr<const ResourceTable> mTable;
+    std::shared_ptr<const android::AssetManager> mSources;
+    std::map<ResourceName, CacheEntry> mCache;
+    std::unordered_set<std::u16string> mIncludedPackages;
+};
+
+inline const android::ResTable& ResourceTableResolver::getResTable() const {
+    return mSources->getResources(false);
+}
+
+} // namespace aapt
+
+#endif // AAPT_RESOURCE_TABLE_RESOLVER_H
diff --git a/tools/aapt2/ResourceTypeExtensions.h b/tools/aapt2/ResourceTypeExtensions.h
index 60e225e..dcbe923 100644
--- a/tools/aapt2/ResourceTypeExtensions.h
+++ b/tools/aapt2/ResourceTypeExtensions.h
@@ -30,6 +30,8 @@
  * future collisions.
  */
 enum {
+    RES_TABLE_PUBLIC_TYPE = 0x000d,
+
     /**
      * A chunk that holds the string pool
      * for source entries (path/to/source:line).
@@ -51,13 +53,6 @@
 struct ExtendedTypes {
     enum {
         /**
-         * A sentinel value used when a resource is defined as
-         * public but it has no defined value yet. If we don't
-         * flatten it with some value, we will lose its name.
-         */
-        TYPE_SENTINEL = 0xff,
-
-        /**
          * A raw string value that hasn't had its escape sequences
          * processed nor whitespace removed.
          */
@@ -65,6 +60,38 @@
     };
 };
 
+struct Public_header {
+    android::ResChunk_header header;
+
+    /**
+     * The ID of the type this structure refers to.
+     */
+    uint8_t typeId;
+
+    /**
+     * Reserved. Must be 0.
+     */
+    uint8_t res0;
+
+    /**
+     * Reserved. Must be 0.
+     */
+    uint16_t res1;
+
+    /**
+     * Number of public entries.
+     */
+    uint32_t count;
+};
+
+struct Public_entry {
+    uint16_t entryId;
+    uint16_t res0;
+    android::ResStringPool_ref key;
+    android::ResStringPool_ref source;
+    uint32_t sourceLine;
+};
+
 /**
  * A chunk with type RES_TABLE_SYMBOL_TABLE_TYPE.
  * Following the header are count number of SymbolTable_entry
diff --git a/tools/aapt2/ResourceValues.cpp b/tools/aapt2/ResourceValues.cpp
index 3a6d65d..2bf38e4 100644
--- a/tools/aapt2/ResourceValues.cpp
+++ b/tools/aapt2/ResourceValues.cpp
@@ -217,25 +217,6 @@
     }
 }
 
-bool Sentinel::isWeak() const {
-    return true;
-}
-
-bool Sentinel::flatten(android::Res_value& outValue) const {
-    outValue.dataType = ExtendedTypes::TYPE_SENTINEL;
-    outValue.data = 0;
-    return true;
-}
-
-Sentinel* Sentinel::clone(StringPool* /*newPool*/) const {
-    return new Sentinel();
-}
-
-void Sentinel::print(std::ostream& out) const {
-    out << "(sentinel)";
-    return;
-}
-
 Attribute::Attribute(bool w, uint32_t t) : weak(w), typeMask(t) {
 }
 
diff --git a/tools/aapt2/ResourceValues.h b/tools/aapt2/ResourceValues.h
index e3352f3..f8ece6f 100644
--- a/tools/aapt2/ResourceValues.h
+++ b/tools/aapt2/ResourceValues.h
@@ -206,18 +206,6 @@
     void print(std::ostream& out) const override;
 };
 
-/**
- * Sentinel value that should be ignored in the final output.
- * Mainly used as a placeholder for public entries with no
- * values defined yet.
- */
-struct Sentinel : public BaseItem<Sentinel> {
-    bool isWeak() const override;
-    bool flatten(android::Res_value& outValue) const override;
-    Sentinel* clone(StringPool* newPool) const override;
-    void print(std::ostream& out) const override;
-};
-
 struct Attribute : public BaseValue<Attribute> {
     struct Symbol {
         Reference symbol;
@@ -332,10 +320,6 @@
         visitItem(primitive, args);
     }
 
-    virtual void visit(Sentinel& sentinel, ValueVisitorArgs& args) {
-        visitItem(sentinel, args);
-    }
-
     virtual void visit(Attribute& attr, ValueVisitorArgs& args) {}
     virtual void visit(Style& style, ValueVisitorArgs& args) {}
     virtual void visit(Array& array, ValueVisitorArgs& args) {}
@@ -377,10 +361,6 @@
         visitItem(primitive, args);
     }
 
-    virtual void visit(const Sentinel& sentinel, ValueVisitorArgs& args) {
-        visitItem(sentinel, args);
-    }
-
     virtual void visit(const Attribute& attr, ValueVisitorArgs& args) {}
     virtual void visit(const Style& style, ValueVisitorArgs& args) {}
     virtual void visit(const Array& array, ValueVisitorArgs& args) {}
diff --git a/tools/aapt2/ScopedXmlPullParser.cpp b/tools/aapt2/ScopedXmlPullParser.cpp
index d9ae72c..48da93e 100644
--- a/tools/aapt2/ScopedXmlPullParser.cpp
+++ b/tools/aapt2/ScopedXmlPullParser.cpp
@@ -76,6 +76,11 @@
     return mParser->getNamespaceUri();
 }
 
+bool ScopedXmlPullParser::applyPackageAlias(std::u16string* package,
+                                            const std::u16string& defaultPackage) const {
+    return mParser->applyPackageAlias(package, defaultPackage);
+}
+
 const std::u16string& ScopedXmlPullParser::getElementNamespace() const {
     return mParser->getElementNamespace();
 }
diff --git a/tools/aapt2/ScopedXmlPullParser.h b/tools/aapt2/ScopedXmlPullParser.h
index e660499..a040f60 100644
--- a/tools/aapt2/ScopedXmlPullParser.h
+++ b/tools/aapt2/ScopedXmlPullParser.h
@@ -52,25 +52,27 @@
     ScopedXmlPullParser& operator=(const ScopedXmlPullParser&) = delete;
     ~ScopedXmlPullParser();
 
-    Event getEvent() const;
-    const std::string& getLastError() const;
-    Event next();
+    Event getEvent() const override;
+    const std::string& getLastError() const override;
+    Event next() override;
 
-    const std::u16string& getComment() const;
-    size_t getLineNumber() const;
-    size_t getDepth() const;
+    const std::u16string& getComment() const override;
+    size_t getLineNumber() const override;
+    size_t getDepth() const override;
 
-    const std::u16string& getText() const;
+    const std::u16string& getText() const override;
 
-    const std::u16string& getNamespacePrefix() const;
-    const std::u16string& getNamespaceUri() const;
+    const std::u16string& getNamespacePrefix() const override;
+    const std::u16string& getNamespaceUri() const override;
+    bool applyPackageAlias(std::u16string* package, const std::u16string& defaultPackage)
+            const override;
 
-    const std::u16string& getElementNamespace() const;
-    const std::u16string& getElementName() const;
+    const std::u16string& getElementNamespace() const override;
+    const std::u16string& getElementName() const override;
 
-    const_iterator beginAttributes() const;
-    const_iterator endAttributes() const;
-    size_t getAttributeCount() const;
+    const_iterator beginAttributes() const override;
+    const_iterator endAttributes() const override;
+    size_t getAttributeCount() const override;
 
 private:
     XmlPullParser* mParser;
diff --git a/tools/aapt2/SourceXmlPullParser.cpp b/tools/aapt2/SourceXmlPullParser.cpp
index cb6a3c0..8099044 100644
--- a/tools/aapt2/SourceXmlPullParser.cpp
+++ b/tools/aapt2/SourceXmlPullParser.cpp
@@ -17,6 +17,7 @@
 #include <iostream>
 #include <string>
 
+#include "Maybe.h"
 #include "SourceXmlPullParser.h"
 #include "Util.h"
 
@@ -66,7 +67,25 @@
         }
     }
 
-    return getEvent();
+    Event event = getEvent();
+
+    // Record namespace prefixes and package names so that we can do our own
+    // handling of references that use namespace aliases.
+    if (event == Event::kStartNamespace || event == Event::kEndNamespace) {
+        Maybe<std::u16string> result = util::extractPackageFromNamespace(getNamespaceUri());
+        if (event == Event::kStartNamespace) {
+            if (result) {
+                mPackageAliases.emplace_back(getNamespacePrefix(), result.value());
+            }
+        } else {
+            if (result) {
+                assert(mPackageAliases.back().second == result.value());
+                mPackageAliases.pop_back();
+            }
+        }
+    }
+
+    return event;
 }
 
 SourceXmlPullParser::Event SourceXmlPullParser::getEvent() const {
@@ -112,6 +131,22 @@
     return mEventQueue.front().data2;
 }
 
+bool SourceXmlPullParser::applyPackageAlias(std::u16string* package,
+                                            const std::u16string& defaultPackage) const {
+    const auto endIter = mPackageAliases.rend();
+    for (auto iter = mPackageAliases.rbegin(); iter != endIter; ++iter) {
+        if (iter->first == *package) {
+            if (iter->second.empty()) {
+                *package = defaultPackage;
+            } else {
+                *package = iter->second;
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
 const std::u16string& SourceXmlPullParser::getElementNamespace() const {
     const Event currentEvent = getEvent();
     if (currentEvent != Event::kStartElement && currentEvent != Event::kEndElement) {
diff --git a/tools/aapt2/SourceXmlPullParser.h b/tools/aapt2/SourceXmlPullParser.h
index ba904ba..15936d6 100644
--- a/tools/aapt2/SourceXmlPullParser.h
+++ b/tools/aapt2/SourceXmlPullParser.h
@@ -17,6 +17,8 @@
 #ifndef AAPT_SOURCE_XML_PULL_PARSER_H
 #define AAPT_SOURCE_XML_PULL_PARSER_H
 
+#include "XmlPullParser.h"
+
 #include <istream>
 #include <libexpat/expat.h>
 #include <queue>
@@ -24,8 +26,6 @@
 #include <string>
 #include <vector>
 
-#include "XmlPullParser.h"
-
 namespace aapt {
 
 class SourceXmlPullParser : public XmlPullParser {
@@ -34,25 +34,28 @@
     SourceXmlPullParser(const SourceXmlPullParser& rhs) = delete;
     ~SourceXmlPullParser();
 
-    Event getEvent() const;
-    const std::string& getLastError() const;
-    Event next();
+    Event getEvent() const override;
+    const std::string& getLastError() const override ;
+    Event next() override ;
 
-    const std::u16string& getComment() const;
-    size_t getLineNumber() const;
-    size_t getDepth() const;
+    const std::u16string& getComment() const override;
+    size_t getLineNumber() const override;
+    size_t getDepth() const override;
 
-    const std::u16string& getText() const;
+    const std::u16string& getText() const override;
 
-    const std::u16string& getNamespacePrefix() const;
-    const std::u16string& getNamespaceUri() const;
+    const std::u16string& getNamespacePrefix() const override;
+    const std::u16string& getNamespaceUri() const override;
+    bool applyPackageAlias(std::u16string* package,
+                           const std::u16string& defaultPackage) const override;
 
-    const std::u16string& getElementNamespace() const;
-    const std::u16string& getElementName() const;
 
-    const_iterator beginAttributes() const;
-    const_iterator endAttributes() const;
-    size_t getAttributeCount() const;
+    const std::u16string& getElementNamespace() const override;
+    const std::u16string& getElementName() const override;
+
+    const_iterator beginAttributes() const override;
+    const_iterator endAttributes() const override;
+    size_t getAttributeCount() const override;
 
 private:
     static void XMLCALL startNamespaceHandler(void* userData, const char* prefix, const char* uri);
@@ -80,6 +83,7 @@
     const std::u16string mEmpty;
     size_t mDepth;
     std::stack<std::u16string> mNamespaceUris;
+    std::vector<std::pair<std::u16string, std::u16string>> mPackageAliases;
 };
 
 } // namespace aapt
diff --git a/tools/aapt2/StringPool.cpp b/tools/aapt2/StringPool.cpp
index b983a53..c19aa98 100644
--- a/tools/aapt2/StringPool.cpp
+++ b/tools/aapt2/StringPool.cpp
@@ -265,25 +265,38 @@
     );
 }
 
-static uint8_t* encodeLength(uint8_t* data, size_t length) {
-    if (length > 0x7fu) {
-        *data++ = 0x80u | (0x000000ffu & (length >> 8));
+template <typename T>
+static T* encodeLength(T* data, size_t length) {
+    static_assert(std::is_integral<T>::value, "wat.");
+
+    constexpr size_t kMask = 1 << ((sizeof(T) * 8) - 1);
+    constexpr size_t kMaxSize = kMask - 1;
+    if (length > kMaxSize) {
+        *data++ = kMask | (kMaxSize & (length >> (sizeof(T) * 8)));
     }
-    *data++ = 0x000000ffu & length;
+    *data++ = length;
     return data;
 }
 
-static size_t encodedLengthByteCount(size_t length) {
-    return length > 0x7fu ? 2 : 1;
+template <typename T>
+static size_t encodedLengthUnits(size_t length) {
+    static_assert(std::is_integral<T>::value, "wat.");
+
+    constexpr size_t kMask = 1 << ((sizeof(T) * 8) - 1);
+    constexpr size_t kMaxSize = kMask - 1;
+    return length > kMaxSize ? 2 : 1;
 }
 
-bool StringPool::flattenUtf8(BigBuffer* out, const StringPool& pool) {
+
+bool StringPool::flatten(BigBuffer* out, const StringPool& pool, bool utf8) {
     const size_t startIndex = out->size();
     android::ResStringPool_header* header = out->nextBlock<android::ResStringPool_header>();
     header->header.type = android::RES_STRING_POOL_TYPE;
     header->header.headerSize = sizeof(*header);
     header->stringCount = pool.size();
-    header->flags |= android::ResStringPool_header::UTF8_FLAG;
+    if (utf8) {
+        header->flags |= android::ResStringPool_header::UTF8_FLAG;
+    }
 
     uint32_t* indices = pool.size() != 0 ? out->nextBlock<uint32_t>(pool.size()) : nullptr;
 
@@ -300,25 +313,31 @@
         *indices = out->size() - beforeStringsIndex;
         indices++;
 
-        std::string encoded = util::utf16ToUtf8(entry->value);
+        if (utf8) {
+            std::string encoded = util::utf16ToUtf8(entry->value);
 
-        const size_t stringByteLength = sizeof(char) * encoded.length();
-        const size_t totalSize = encodedLengthByteCount(entry->value.size())
-                + encodedLengthByteCount(encoded.length())
-                + stringByteLength
-                + sizeof(char);
+            const size_t totalSize = encodedLengthUnits<char>(entry->value.size())
+                    + encodedLengthUnits<char>(encoded.length())
+                    + encoded.size() + 1;
 
-        uint8_t* data = out->nextBlock<uint8_t>(totalSize);
+            char* data = out->nextBlock<char>(totalSize);
 
-        // First encode the actual UTF16 string length.
-        data = encodeLength(data, entry->value.size());
+            // First encode the actual UTF16 string length.
+            data = encodeLength(data, entry->value.size());
 
-        // Now encode the size of the converted UTF8 string.
-        data = encodeLength(data, encoded.length());
+            // Now encode the size of the converted UTF8 string.
+            data = encodeLength(data, encoded.length());
+            strncpy(data, encoded.data(), encoded.size());
+        } else {
+            const size_t totalSize = encodedLengthUnits<char16_t>(entry->value.size())
+                    + entry->value.size() + 1;
 
-        memcpy(data, encoded.data(), stringByteLength);
-        data += stringByteLength;
-        *data = 0;
+            char16_t* data = out->nextBlock<char16_t>(totalSize);
+
+            // Encode the actual UTF16 string length.
+            data = encodeLength(data, entry->value.size());
+            strncpy16(data, entry->value.data(), entry->value.size());
+        }
     }
 
     out->align4();
@@ -364,4 +383,12 @@
     return true;
 }
 
+bool StringPool::flattenUtf8(BigBuffer* out, const StringPool& pool) {
+    return flatten(out, pool, true);
+}
+
+bool StringPool::flattenUtf16(BigBuffer* out, const StringPool& pool) {
+    return flatten(out, pool, false);
+}
+
 } // namespace aapt
diff --git a/tools/aapt2/StringPool.h b/tools/aapt2/StringPool.h
index 64772a4..14304a6 100644
--- a/tools/aapt2/StringPool.h
+++ b/tools/aapt2/StringPool.h
@@ -127,7 +127,7 @@
     using const_iterator = std::vector<std::unique_ptr<Entry>>::const_iterator;
 
     static bool flattenUtf8(BigBuffer* out, const StringPool& pool);
-    static bool flatten(BigBuffer* out, const StringPool& pool);
+    static bool flattenUtf16(BigBuffer* out, const StringPool& pool);
 
     StringPool() = default;
     StringPool(const StringPool&) = delete;
@@ -193,6 +193,8 @@
     friend const_iterator begin(const StringPool& pool);
     friend const_iterator end(const StringPool& pool);
 
+    static bool flatten(BigBuffer* out, const StringPool& pool, bool utf8);
+
     Ref makeRefImpl(const StringPiece16& str, const Context& context, bool unique);
 
     std::vector<std::unique_ptr<Entry>> mStrings;
diff --git a/tools/aapt2/TableFlattener.cpp b/tools/aapt2/TableFlattener.cpp
index 4aadadc..aa0f1d5 100644
--- a/tools/aapt2/TableFlattener.cpp
+++ b/tools/aapt2/TableFlattener.cpp
@@ -31,8 +31,8 @@
 namespace aapt {
 
 struct FlatEntry {
-    const ResourceEntry& entry;
-    const Value& value;
+    const ResourceEntry* entry;
+    const Value* value;
     uint32_t entryKey;
     uint32_t sourcePathKey;
     uint32_t sourceLine;
@@ -48,10 +48,10 @@
         mMap = mOut->nextBlock<android::ResTable_map_entry>();
         mMap->key.index = flatEntry.entryKey;
         mMap->flags = android::ResTable_entry::FLAG_COMPLEX;
-        if (flatEntry.entry.publicStatus.isPublic) {
+        if (flatEntry.entry->publicStatus.isPublic) {
             mMap->flags |= android::ResTable_entry::FLAG_PUBLIC;
         }
-        if (flatEntry.value.isWeak()) {
+        if (flatEntry.value->isWeak()) {
             mMap->flags |= android::ResTable_entry::FLAG_WEAK;
         }
 
@@ -211,6 +211,7 @@
 
     virtual void visitItem(const Item& item, ValueVisitorArgs&) override {
         result = item.flatten(*mOutValue);
+        mOutValue->res0 = 0;
         mOutValue->size = sizeof(*mOutValue);
     }
 
@@ -228,14 +229,14 @@
 
 bool TableFlattener::flattenValue(BigBuffer* out, const FlatEntry& flatEntry,
                                   SymbolEntryVector* symbols) {
-    if (flatEntry.value.isItem()) {
+    if (flatEntry.value->isItem()) {
         android::ResTable_entry* entry = out->nextBlock<android::ResTable_entry>();
 
-        if (flatEntry.entry.publicStatus.isPublic) {
+        if (flatEntry.entry->publicStatus.isPublic) {
             entry->flags |= android::ResTable_entry::FLAG_PUBLIC;
         }
 
-        if (flatEntry.value.isWeak()) {
+        if (flatEntry.value->isWeak()) {
             entry->flags |= android::ResTable_entry::FLAG_WEAK;
         }
 
@@ -251,14 +252,14 @@
             entry->size += sizeof(*sourceBlock);
         }
 
-        const Item* item = static_cast<const Item*>(&flatEntry.value);
+        const Item* item = static_cast<const Item*>(flatEntry.value);
         ValueFlattener flattener(out, symbols);
         item->accept(flattener, {});
         return flattener.result;
     }
 
     MapFlattener flattener(out, flatEntry, symbols);
-    flatEntry.value.accept(flattener, {});
+    flatEntry.value->accept(flattener, {});
     return true;
 }
 
@@ -372,6 +373,15 @@
             }
         }
 
+        const size_t beforePublicHeader = typeBlock.size();
+        Public_header* publicHeader = nullptr;
+        if (mOptions.useExtendedChunks) {
+            publicHeader = typeBlock.nextBlock<Public_header>();
+            publicHeader->header.type = RES_TABLE_PUBLIC_TYPE;
+            publicHeader->header.headerSize = sizeof(*publicHeader);
+            publicHeader->typeId = type->typeId;
+        }
+
         // The binary resource table lists resource entries for each configuration.
         // We store them inverted, where a resource entry lists the values for each
         // configuration available. Here we reverse this to match the binary table.
@@ -386,18 +396,35 @@
                 return false;
             }
 
+            if (publicHeader && entry->publicStatus.isPublic) {
+                // Write the public status of this entry.
+                Public_entry* publicEntry = typeBlock.nextBlock<Public_entry>();
+                publicEntry->entryId = static_cast<uint32_t>(entry->entryId);
+                publicEntry->key.index = static_cast<uint32_t>(keyIndex);
+                publicEntry->source.index = static_cast<uint32_t>(sourcePool.makeRef(
+                            util::utf8ToUtf16(entry->publicStatus.source.path)).getIndex());
+                publicEntry->sourceLine = static_cast<uint32_t>(entry->publicStatus.source.line);
+                publicHeader->count += 1;
+            }
+
             for (const auto& configValue : entry->values) {
                 data[configValue.config].push_back(FlatEntry{
-                        *entry,
-                        *configValue.value,
+                        entry,
+                        configValue.value.get(),
                         static_cast<uint32_t>(keyIndex),
                         static_cast<uint32_t>(sourcePool.makeRef(util::utf8ToUtf16(
-                                        configValue.source.path)).getIndex()),
+                                    configValue.source.path)).getIndex()),
                         static_cast<uint32_t>(configValue.source.line)
                 });
             }
         }
 
+        if (publicHeader) {
+            typeBlock.align4();
+            publicHeader->header.size =
+                    static_cast<uint32_t>(typeBlock.size() - beforePublicHeader);
+        }
+
         // Begin flattening a configuration for the current type.
         for (const auto& entry : data) {
             const size_t typeHeaderStart = typeBlock.size();
@@ -415,13 +442,13 @@
 
             const size_t entryStart = typeBlock.size();
             for (const FlatEntry& flatEntry : entry.second) {
-                assert(flatEntry.entry.entryId < type->entries.size());
-                indices[flatEntry.entry.entryId] = typeBlock.size() - entryStart;
+                assert(flatEntry.entry->entryId < type->entries.size());
+                indices[flatEntry.entry->entryId] = typeBlock.size() - entryStart;
                 if (!flattenValue(&typeBlock, flatEntry, &symbolEntries)) {
                     Logger::error()
                             << "failed to flatten resource '"
                             << ResourceNameRef {
-                                    table.getPackage(), type->type, flatEntry.entry.name }
+                                    table.getPackage(), type->type, flatEntry.entry->name }
                             << "' for configuration '"
                             << entry.first
                             << "'."
@@ -508,9 +535,9 @@
     package->name[table.getPackage().length()] = 0;
 
     package->typeStrings = package->header.headerSize;
-    StringPool::flattenUtf8(out, typePool);
+    StringPool::flattenUtf16(out, typePool);
     package->keyStrings = out->size() - beforePackageIndex;
-    StringPool::flattenUtf8(out, keyPool);
+    StringPool::flattenUtf16(out, keyPool);
 
     if (symbolEntryData != nullptr) {
         for (size_t i = 0; i < symbolEntries.size(); i++) {
diff --git a/tools/aapt2/Util.cpp b/tools/aapt2/Util.cpp
index c2418eb..7adaf1e 100644
--- a/tools/aapt2/Util.cpp
+++ b/tools/aapt2/Util.cpp
@@ -28,6 +28,9 @@
 namespace aapt {
 namespace util {
 
+constexpr const char16_t* kSchemaAuto = u"http://schemas.android.com/apk/res-auto";
+constexpr const char16_t* kSchemaPrefix = u"http://schemas.android.com/apk/res/";
+
 static std::vector<std::string> splitAndTransform(const StringPiece& str, char sep,
         const std::function<char(char)>& f) {
     std::vector<std::string> parts;
@@ -279,5 +282,17 @@
     return data;
 }
 
+Maybe<std::u16string> extractPackageFromNamespace(const std::u16string& namespaceUri) {
+    if (stringStartsWith<char16_t>(namespaceUri, kSchemaPrefix)) {
+        StringPiece16 schemaPrefix = kSchemaPrefix;
+        StringPiece16 package = namespaceUri;
+        return package.substr(schemaPrefix.size(), package.size() - schemaPrefix.size())
+                .toString();
+    } else if (namespaceUri == kSchemaAuto) {
+        return std::u16string();
+    }
+    return {};
+}
+
 } // namespace util
 } // namespace aapt
diff --git a/tools/aapt2/Util.h b/tools/aapt2/Util.h
index 9f9707c..6015d825 100644
--- a/tools/aapt2/Util.h
+++ b/tools/aapt2/Util.h
@@ -18,6 +18,7 @@
 #define AAPT_UTIL_H
 
 #include "BigBuffer.h"
+#include "Maybe.h"
 #include "StringPiece.h"
 
 #include <androidfw/ResourceTypes.h>
@@ -277,6 +278,15 @@
         mEnd(str, sep, BasicStringPiece<Char>(str.end(), 0)) {
 }
 
+/**
+ * Returns a package name if the namespace URI is of the form:
+ * http://schemas.android.com/apk/res/<package>
+ *
+ * Special case: if namespaceUri is http://schemas.android.com/apk/res-auto,
+ * returns an empty package name.
+ */
+Maybe<std::u16string> extractPackageFromNamespace(const std::u16string& namespaceUri);
+
 } // namespace util
 
 /**
diff --git a/tools/aapt2/XliffXmlPullParser.cpp b/tools/aapt2/XliffXmlPullParser.cpp
index f0950a3..31115f2 100644
--- a/tools/aapt2/XliffXmlPullParser.cpp
+++ b/tools/aapt2/XliffXmlPullParser.cpp
@@ -85,6 +85,11 @@
     return mParser->getNamespaceUri();
 }
 
+bool XliffXmlPullParser::applyPackageAlias(std::u16string* package,
+                                           const std::u16string& defaultPackage) const {
+    return mParser->applyPackageAlias(package, defaultPackage);
+}
+
 const std::u16string& XliffXmlPullParser::getElementNamespace() const {
     return mParser->getElementNamespace();
 }
diff --git a/tools/aapt2/XliffXmlPullParser.h b/tools/aapt2/XliffXmlPullParser.h
index d4aa222..7791227 100644
--- a/tools/aapt2/XliffXmlPullParser.h
+++ b/tools/aapt2/XliffXmlPullParser.h
@@ -33,25 +33,27 @@
     XliffXmlPullParser(const std::shared_ptr<XmlPullParser>& parser);
     XliffXmlPullParser(const XliffXmlPullParser& rhs) = delete;
 
-    Event getEvent() const;
-    const std::string& getLastError() const;
-    Event next();
+    Event getEvent() const override;
+    const std::string& getLastError() const override;
+    Event next() override;
 
-    const std::u16string& getComment() const;
-    size_t getLineNumber() const;
-    size_t getDepth() const;
+    const std::u16string& getComment() const override;
+    size_t getLineNumber() const override;
+    size_t getDepth() const override;
 
-    const std::u16string& getText() const;
+    const std::u16string& getText() const override;
 
-    const std::u16string& getNamespacePrefix() const;
-    const std::u16string& getNamespaceUri() const;
+    const std::u16string& getNamespacePrefix() const override;
+    const std::u16string& getNamespaceUri() const override;
+    bool applyPackageAlias(std::u16string* package, const std::u16string& defaultPackage)
+            const override;
 
-    const std::u16string& getElementNamespace() const;
-    const std::u16string& getElementName() const;
+    const std::u16string& getElementNamespace() const override;
+    const std::u16string& getElementName() const override;
 
-    const_iterator beginAttributes() const;
-    const_iterator endAttributes() const;
-    size_t getAttributeCount() const;
+    const_iterator beginAttributes() const override;
+    const_iterator endAttributes() const override;
+    size_t getAttributeCount() const override;
 
 private:
     std::shared_ptr<XmlPullParser> mParser;
diff --git a/tools/aapt2/XmlFlattener.cpp b/tools/aapt2/XmlFlattener.cpp
index dd6f63a..650e624 100644
--- a/tools/aapt2/XmlFlattener.cpp
+++ b/tools/aapt2/XmlFlattener.cpp
@@ -36,56 +36,67 @@
 namespace aapt {
 
 constexpr const char16_t* kSchemaAndroid = u"http://schemas.android.com/apk/res/android";
-constexpr const char16_t* kSchemaAuto = u"http://schemas.android.com/apk/res-auto";
-constexpr const char16_t* kSchemaPrefix = u"http://schemas.android.com/apk/res/";
 
 struct AttributeValueFlattener : ValueVisitor {
-    struct Args : ValueVisitorArgs {
-        Args(std::shared_ptr<Resolver> r, SourceLogger& s, android::Res_value& oV,
-                std::shared_ptr<XmlPullParser> p, bool& e, StringPool::Ref& rV,
-                std::vector<std::pair<StringPool::Ref, android::ResStringPool_ref*>>& sR) :
-                resolver(r), logger(s), outValue(oV), parser(p), error(e), rawValue(rV),
-                stringRefs(sR) {
+    AttributeValueFlattener(
+            std::shared_ptr<IResolver> resolver, SourceLogger* logger,
+            android::Res_value* outValue, std::shared_ptr<XmlPullParser> parser, bool* outError,
+            StringPool::Ref rawValue, std::u16string* defaultPackage,
+            std::vector<std::pair<StringPool::Ref, android::ResStringPool_ref*>>* outStringRefs) :
+            mResolver(resolver), mLogger(logger), mOutValue(outValue), mParser(parser),
+            mError(outError), mRawValue(rawValue), mDefaultPackage(defaultPackage),
+            mStringRefs(outStringRefs) {
+    }
+
+    void visit(Reference& reference, ValueVisitorArgs&) override {
+        // First see if we can convert the package name from a prefix to a real
+        // package name.
+        ResourceName aliasedName = reference.name;
+
+        if (!reference.name.package.empty()) {
+            // Only if we specified a package do we look for its alias.
+            mParser->applyPackageAlias(&reference.name.package, *mDefaultPackage);
+        } else {
+            reference.name.package = *mDefaultPackage;
         }
 
-        std::shared_ptr<Resolver> resolver;
-        SourceLogger& logger;
-        android::Res_value& outValue;
-        std::shared_ptr<XmlPullParser> parser;
-        bool& error;
-        StringPool::Ref& rawValue;
-        std::vector<std::pair<StringPool::Ref, android::ResStringPool_ref*>>& stringRefs;
-    };
-
-    void visit(Reference& reference, ValueVisitorArgs& a) override {
-        Args& args = static_cast<Args&>(a);
-
-        Maybe<ResourceId> result = args.resolver->findId(reference.name);
+        Maybe<ResourceId> result = mResolver->findId(reference.name);
         if (!result || !result.value().isValid()) {
-            args.logger.error(args.parser->getLineNumber())
+            std::ostream& out = mLogger->error(mParser->getLineNumber())
                     << "unresolved reference '"
-                    << reference.name
-                    << "'."
-                    << std::endl;
-            args.error = true;
+                    << aliasedName
+                    << "'";
+            if (aliasedName != reference.name) {
+                out << " (aka '" << reference.name << "')";
+            }
+            out << "'." << std::endl;
+            *mError = true;
         } else {
             reference.id = result.value();
-            reference.flatten(args.outValue);
+            reference.flatten(*mOutValue);
         }
     }
 
-    void visit(String& string, ValueVisitorArgs& a) override {
-        Args& args = static_cast<Args&>(a);
-
-        args.outValue.dataType = android::Res_value::TYPE_STRING;
-        args.stringRefs.emplace_back(args.rawValue,
-                reinterpret_cast<android::ResStringPool_ref*>(&args.outValue.data));
+    void visit(String& string, ValueVisitorArgs&) override {
+        mOutValue->dataType = android::Res_value::TYPE_STRING;
+        mStringRefs->emplace_back(
+                mRawValue,
+                reinterpret_cast<android::ResStringPool_ref*>(mOutValue->data));
     }
 
-    void visitItem(Item& item, ValueVisitorArgs& a) override {
-        Args& args = static_cast<Args&>(a);
-        item.flatten(args.outValue);
+    void visitItem(Item& item, ValueVisitorArgs&) override {
+        item.flatten(*mOutValue);
     }
+
+private:
+    std::shared_ptr<IResolver> mResolver;
+    SourceLogger* mLogger;
+    android::Res_value* mOutValue;
+    std::shared_ptr<XmlPullParser> mParser;
+    bool* mError;
+    StringPool::Ref mRawValue;
+    std::u16string* mDefaultPackage;
+    std::vector<std::pair<StringPool::Ref, android::ResStringPool_ref*>>* mStringRefs;
 };
 
 struct XmlAttribute {
@@ -100,7 +111,7 @@
 }
 
 XmlFlattener::XmlFlattener(const std::shared_ptr<ResourceTable>& table,
-                           const std::shared_ptr<Resolver>& resolver) :
+                           const std::shared_ptr<IResolver>& resolver) :
         mTable(table), mResolver(resolver) {
 }
 
@@ -184,8 +195,13 @@
                 node->comment.index = -1;
 
                 android::ResXMLTree_attrExt* elem = out.nextBlock<android::ResXMLTree_attrExt>();
-                stringRefs.emplace_back(
-                        pool.makeRef(parser->getElementNamespace(), lowPriority), &elem->ns);
+                if (!parser->getElementNamespace().empty()) {
+                    stringRefs.emplace_back(
+                            pool.makeRef(parser->getElementNamespace(), lowPriority), &elem->ns);
+                } else {
+                    // The device doesn't think a string of size 0 is the same as null.
+                    elem->ns.index = -1;
+                }
                 stringRefs.emplace_back(
                         pool.makeRef(parser->getElementName(), lowPriority), &elem->name);
                 elem->attributeStart = sizeof(*elem);
@@ -222,28 +238,25 @@
                     }
 
 
-                    StringPiece16 package;
-                    if (util::stringStartsWith<char16_t>(attrIter->namespaceUri, kSchemaPrefix)) {
-                        StringPiece16 schemaPrefix = kSchemaPrefix;
-                        package = attrIter->namespaceUri;
-                        package = package.substr(schemaPrefix.size(),
-                                                 package.size() - schemaPrefix.size());
-                    } else if (attrIter->namespaceUri == kSchemaAuto && mResolver) {
-                        package = mResolver->getDefaultPackage();
-                    }
-
-                    if (package.empty() || !mResolver) {
+                    Maybe<std::u16string> package = util::extractPackageFromNamespace(
+                            attrIter->namespaceUri);
+                    if (!package || !mResolver) {
                         // Attributes that have no resource ID (because they don't belong to a
                         // package) should appear after those that do have resource IDs. Assign
-                        // them some/ integer value that will appear after.
+                        // them some integer value that will appear after.
                         id = 0x80000000u | nextAttributeId++;
                         nameRef = pool.makeRef(attrIter->name, StringPool::Context{ id });
 
                     } else {
                         // Find the Attribute object via our Resolver.
                         ResourceName attrName = {
-                                package.toString(), ResourceType::kAttr, attrIter->name };
-                        Maybe<Resolver::Entry> result = mResolver->findAttribute(attrName);
+                                package.value(), ResourceType::kAttr, attrIter->name };
+
+                        if (attrName.package.empty()) {
+                            attrName.package = options.defaultPackage;
+                        }
+
+                        Maybe<IResolver::Entry> result = mResolver->findAttribute(attrName);
                         if (!result || !result.value().id.isValid()) {
                             logger.error(parser->getLineNumber())
                                     << "unresolved attribute '"
@@ -269,7 +282,7 @@
 
                         // Put the attribute name into a package specific pool, since we don't
                         // want to collapse names from different packages.
-                        nameRef = packagePools[package.toString()].makeRef(
+                        nameRef = packagePools[package.value()].makeRef(
                                 attrIter->name, StringPool::Context{ id });
                     }
 
@@ -290,26 +303,32 @@
                 for (auto entry : sortedAttributes) {
                     android::ResXMLTree_attribute* attr =
                             out.nextBlock<android::ResXMLTree_attribute>();
-                    stringRefs.emplace_back(
-                            pool.makeRef(entry.xmlAttr->namespaceUri, lowPriority), &attr->ns);
-                    StringPool::Ref rawValueRef = pool.makeRef(entry.xmlAttr->value, lowPriority);
-                    stringRefs.emplace_back(rawValueRef, &attr->rawValue);
+                    if (!entry.xmlAttr->namespaceUri.empty()) {
+                        stringRefs.emplace_back(
+                                pool.makeRef(entry.xmlAttr->namespaceUri, lowPriority), &attr->ns);
+                    } else {
+                        attr->ns.index = -1;
+                    }
+
                     stringRefs.emplace_back(entry.nameRef, &attr->name);
+                    attr->rawValue.index = -1;
+
+                    StringPool::Ref rawValueRef = pool.makeRef(entry.xmlAttr->value, lowPriority);
 
                     if (entry.attr) {
                         std::unique_ptr<Item> value = ResourceParser::parseItemForAttribute(
-                                entry.xmlAttr->value, *entry.attr, mResolver->getDefaultPackage());
+                                entry.xmlAttr->value, *entry.attr);
                         if (value) {
-                            AttributeValueFlattener flattener;
-                            value->accept(flattener, AttributeValueFlattener::Args{
+                            AttributeValueFlattener flattener(
                                     mResolver,
-                                    logger,
-                                    attr->typedValue,
+                                    &logger,
+                                    &attr->typedValue,
                                     parser,
-                                    error,
+                                    &error,
                                     rawValueRef,
-                                    stringRefs
-                            });
+                                    &options.defaultPackage,
+                                    &stringRefs);
+                            value->accept(flattener, {});
                         } else if (!(entry.attr->typeMask & android::ResTable_map::TYPE_STRING)) {
                             logger.error(parser->getLineNumber())
                                     << "'"
@@ -321,12 +340,14 @@
                             error = true;
                         } else {
                             attr->typedValue.dataType = android::Res_value::TYPE_STRING;
+                            stringRefs.emplace_back(rawValueRef, &attr->rawValue);
                             stringRefs.emplace_back(rawValueRef,
                                     reinterpret_cast<android::ResStringPool_ref*>(
                                             &attr->typedValue.data));
                         }
                     } else {
                         attr->typedValue.dataType = android::Res_value::TYPE_STRING;
+                        stringRefs.emplace_back(rawValueRef, &attr->rawValue);
                         stringRefs.emplace_back(rawValueRef,
                                 reinterpret_cast<android::ResStringPool_ref*>(
                                         &attr->typedValue.data));
@@ -438,7 +459,7 @@
     resIdMapChunk->size = outBuffer->size() - beforeResIdMapIndex;
 
     // Flatten the StringPool.
-    StringPool::flattenUtf8(outBuffer, pool);
+    StringPool::flattenUtf16(outBuffer, pool);
 
     // Move the temporary BigBuffer into outBuffer->
     outBuffer->appendBuffer(std::move(out));
diff --git a/tools/aapt2/XmlFlattener.h b/tools/aapt2/XmlFlattener.h
index 540a5ef..60a500e 100644
--- a/tools/aapt2/XmlFlattener.h
+++ b/tools/aapt2/XmlFlattener.h
@@ -23,6 +23,8 @@
 #include "Source.h"
 #include "XmlPullParser.h"
 
+#include <string>
+
 namespace aapt {
 
 /**
@@ -34,6 +36,12 @@
 public:
     struct Options {
         /**
+         * The package to use when a reference has no package specified
+         * (or a namespace URI equals "http://schemas.android.com/apk/res-auto").
+         */
+        std::u16string defaultPackage;
+
+        /**
          * If set, tells the XmlFlattener to strip out
          * attributes that have been introduced after
          * max SDK.
@@ -46,7 +54,7 @@
      * and attributes.
      */
     XmlFlattener(const std::shared_ptr<ResourceTable>& table,
-                 const std::shared_ptr<Resolver>& resolver);
+                 const std::shared_ptr<IResolver>& resolver);
 
     XmlFlattener(const XmlFlattener&) = delete; // Not copyable.
 
@@ -62,7 +70,7 @@
 
 private:
     std::shared_ptr<ResourceTable> mTable;
-    std::shared_ptr<Resolver> mResolver;
+    std::shared_ptr<IResolver> mResolver;
 };
 
 } // namespace aapt
diff --git a/tools/aapt2/XmlFlattener_test.cpp b/tools/aapt2/XmlFlattener_test.cpp
index a7d7ac6..b45cd9b 100644
--- a/tools/aapt2/XmlFlattener_test.cpp
+++ b/tools/aapt2/XmlFlattener_test.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include "Resolver.h"
+#include "MockResolver.h"
 #include "ResourceTable.h"
 #include "ResourceValues.h"
 #include "SourceXmlPullParser.h"
@@ -36,27 +36,29 @@
 class XmlFlattenerTest : public ::testing::Test {
 public:
     virtual void SetUp() override {
-        std::shared_ptr<ResourceTable> table = std::make_shared<ResourceTable>();
-        table->setPackage(u"android");
-        table->setPackageId(0x01);
+        std::shared_ptr<IResolver> resolver = std::make_shared<MockResolver>(
+                std::make_shared<ResourceTable>(),
+                std::map<ResourceName, ResourceId>({
+                        { ResourceName{ u"android", ResourceType::kAttr, u"attr" },
+                          ResourceId{ 0x01010000u } },
+                        { ResourceName{ u"android", ResourceType::kId, u"id" },
+                          ResourceId{ 0x01020000u } },
+                        { ResourceName{ u"com.lib", ResourceType::kAttr, u"attr" },
+                          ResourceId{ 0x01010001u } },
+                        { ResourceName{ u"com.lib", ResourceType::kId, u"id" },
+                          ResourceId{ 0x01020001u } }}));
 
-        table->addResource(ResourceName{ {}, ResourceType::kAttr, u"id" },
-                           ResourceId{ 0x01010000 }, {}, {},
-                           util::make_unique<Attribute>(false, ResTable_map::TYPE_ANY));
-
-        table->addResource(ResourceName{ {}, ResourceType::kId, u"test" },
-                           ResourceId{ 0x01020000 }, {}, {}, util::make_unique<Id>());
-
-        mFlattener = std::make_shared<XmlFlattener>(nullptr,
-                std::make_shared<Resolver>(table, std::make_shared<AssetManager>()));
+        mFlattener = std::make_shared<XmlFlattener>(nullptr, resolver);
     }
 
-    ::testing::AssertionResult testFlatten(std::istream& in, ResXMLTree* outTree) {
+    ::testing::AssertionResult testFlatten(const std::string& in, ResXMLTree* outTree) {
         std::stringstream input(kXmlPreamble);
-        input << in.rdbuf() << std::endl;
+        input << in << std::endl;
         std::shared_ptr<XmlPullParser> xmlParser = std::make_shared<SourceXmlPullParser>(input);
         BigBuffer outBuffer(1024);
-        if (!mFlattener->flatten(Source{ "test" }, xmlParser, &outBuffer, {})) {
+        XmlFlattener::Options xmlOptions;
+        xmlOptions.defaultPackage = u"android";
+        if (!mFlattener->flatten(Source{ "test" }, xmlParser, &outBuffer, xmlOptions)) {
             return ::testing::AssertionFailure();
         }
 
@@ -71,11 +73,9 @@
 };
 
 TEST_F(XmlFlattenerTest, ParseSimpleView) {
-    std::stringstream input;
-    input << "<View xmlns:android=\"http://schemas.android.com/apk/res/android\"" << std::endl
-          << "      android:id=\"@id/test\">" << std::endl
-          << "</View>" << std::endl;
-
+    std::string input = "<View xmlns:android=\"http://schemas.android.com/apk/res/android\"\n"
+                        "      android:attr=\"@id/id\">\n"
+                        "</View>";
     ResXMLTree tree;
     ASSERT_TRUE(testFlatten(input, &tree));
 
@@ -84,4 +84,113 @@
     }
 }
 
+TEST_F(XmlFlattenerTest, ParseViewWithPackageAlias) {
+    std::string input = "<View xmlns:ns1=\"http://schemas.android.com/apk/res/android\"\n"
+                        "      xmlns:ns2=\"http://schemas.android.com/apk/res/android\"\n"
+                        "      ns1:attr=\"@ns2:id/id\">\n"
+                        "</View>";
+    ResXMLTree tree;
+    ASSERT_TRUE(testFlatten(input, &tree));
+
+    while (tree.next() != ResXMLTree::END_DOCUMENT) {
+        ASSERT_NE(tree.getEventType(), ResXMLTree::BAD_DOCUMENT);
+    }
+}
+
+::testing::AssertionResult attributeNameAndValueEquals(ResXMLTree* tree, size_t index,
+                                                       ResourceId nameId, ResourceId valueId) {
+    if (index >= tree->getAttributeCount()) {
+        return ::testing::AssertionFailure() << "index " << index << " is out of bounds ("
+                                             << tree->getAttributeCount() << ")";
+    }
+
+    if (tree->getAttributeNameResID(index) != nameId.id) {
+        return ::testing::AssertionFailure()
+                << "attribute at index " << index << " has ID "
+                << ResourceId{ (uint32_t) tree->getAttributeNameResID(index) }
+                << ". Expected ID " << nameId;
+    }
+
+    if (tree->getAttributeDataType(index) != Res_value::TYPE_REFERENCE) {
+        return ::testing::AssertionFailure() << "attribute at index " << index << " has value of "
+                                             << "type " << std::hex
+                                             << tree->getAttributeDataType(index) << std::dec
+                                             << ". Expected reference (" << std::hex
+                                             << Res_value::TYPE_REFERENCE << std::dec << ")";
+    }
+
+    if ((uint32_t) tree->getAttributeData(index) != valueId.id) {
+        return ::testing::AssertionFailure()
+                << "attribute at index " << index << " has value " << "with ID "
+                << ResourceId{ (uint32_t) tree->getAttributeData(index) }
+                << ". Expected ID " << valueId;
+    }
+    return ::testing::AssertionSuccess();
+}
+
+TEST_F(XmlFlattenerTest, ParseViewWithShadowedPackageAlias) {
+    std::string input = "<View xmlns:app=\"http://schemas.android.com/apk/res/android\"\n"
+                        "      app:attr=\"@app:id/id\">\n"
+                        "  <View xmlns:app=\"http://schemas.android.com/apk/res/com.lib\"\n"
+                        "        app:attr=\"@app:id/id\"/>\n"
+                        "</View>";
+    ResXMLTree tree;
+    ASSERT_TRUE(testFlatten(input, &tree));
+
+    while (tree.next() != ResXMLTree::START_TAG) {
+        ASSERT_NE(tree.getEventType(), ResXMLTree::BAD_DOCUMENT);
+        ASSERT_NE(tree.getEventType(), ResXMLTree::END_DOCUMENT);
+    }
+
+    ASSERT_TRUE(attributeNameAndValueEquals(&tree, 0u, ResourceId{ 0x01010000u },
+                                            ResourceId{ 0x01020000u }));
+
+    while (tree.next() != ResXMLTree::START_TAG) {
+        ASSERT_NE(tree.getEventType(), ResXMLTree::BAD_DOCUMENT);
+        ASSERT_NE(tree.getEventType(), ResXMLTree::END_DOCUMENT);
+    }
+
+    ASSERT_TRUE(attributeNameAndValueEquals(&tree, 0u, ResourceId{ 0x01010001u },
+                                            ResourceId{ 0x01020001u }));
+}
+
+TEST_F(XmlFlattenerTest, ParseViewWithLocalPackageAndAliasOfTheSameName) {
+    std::string input = "<View xmlns:android=\"http://schemas.android.com/apk/res/com.lib\"\n"
+                        "      android:attr=\"@id/id\"/>";
+    ResXMLTree tree;
+    ASSERT_TRUE(testFlatten(input, &tree));
+
+    while (tree.next() != ResXMLTree::START_TAG) {
+        ASSERT_NE(tree.getEventType(), ResXMLTree::BAD_DOCUMENT);
+        ASSERT_NE(tree.getEventType(), ResXMLTree::END_DOCUMENT);
+    }
+
+    // We expect the 'android:attr' to be converted to 'com.lib:attr' due to the namespace
+    // assignment.
+    // However, we didn't give '@id/id' a package, so it should use the default package
+    // 'android', and not be converted from 'android' to 'com.lib'.
+    ASSERT_TRUE(attributeNameAndValueEquals(&tree, 0u, ResourceId{ 0x01010001u },
+                                            ResourceId{ 0x01020000u }));
+}
+
+/*
+ * The device ResXMLParser in libandroidfw differentiates between empty namespace and null
+ * namespace.
+ */
+TEST_F(XmlFlattenerTest, NoNamespaceIsNotTheSameAsEmptyNamespace) {
+    std::string input = "<View xmlns:android=\"http://schemas.android.com/apk/res/android\"\n"
+                        "      package=\"android\"/>";
+
+    ResXMLTree tree;
+    ASSERT_TRUE(testFlatten(input, &tree));
+
+    while (tree.next() != ResXMLTree::START_TAG) {
+        ASSERT_NE(tree.getEventType(), ResXMLTree::BAD_DOCUMENT);
+        ASSERT_NE(tree.getEventType(), ResXMLTree::END_DOCUMENT);
+    }
+
+    const StringPiece16 kPackage = u"package";
+    EXPECT_GE(tree.indexOfAttribute(nullptr, 0, kPackage.data(), kPackage.size()), 0);
+}
+
 } // namespace aapt
diff --git a/tools/aapt2/XmlPullParser.h b/tools/aapt2/XmlPullParser.h
index 753405c..accfd30a 100644
--- a/tools/aapt2/XmlPullParser.h
+++ b/tools/aapt2/XmlPullParser.h
@@ -72,16 +72,27 @@
      */
     virtual const std::u16string& getText() const = 0;
 
-    /**
-     * Namespace prefix is available for StartNamespace and EndNamespace.
-     */
-    virtual const std::u16string& getNamespacePrefix() const = 0;
+    //
+    // Namespace prefix and URI are available for StartNamespace and EndNamespace.
+    //
 
-    /**
-     * Namespace URI is available for StartNamespace.
-     */
+    virtual const std::u16string& getNamespacePrefix() const = 0;
     virtual const std::u16string& getNamespaceUri() const = 0;
 
+    /*
+     * Uses the current stack of namespaces to resolve the package. Eg:
+     * xmlns:app = "http://schemas.android.com/apk/res/com.android.app"
+     * ...
+     * android:text="@app:string/message"
+     *
+     * In this case, 'app' will be converted to 'com.android.app'.
+     *
+     * If xmlns:app="http://schemas.android.com/apk/res-auto", then
+     * 'package' will be set to 'defaultPackage'.
+     */
+    virtual bool applyPackageAlias(std::u16string* package,
+                                   const std::u16string& defaultPackage) const = 0;
+
     //
     // These are available for StartElement and EndElement.
     //
diff --git a/tools/aapt2/data/lib/Makefile b/tools/aapt2/data/lib/Makefile
index 8f56c54..372c225 100644
--- a/tools/aapt2/data/lib/Makefile
+++ b/tools/aapt2/data/lib/Makefile
@@ -56,7 +56,7 @@
 
 # Link: out/package-unaligned.apk <- out/values-v4.apk out/drawable-v4.apk
 $(PRIVATE_APK_UNALIGNED): $(PRIVATE_INTERMEDIATE_TABLES) $(PRIVATE_LIBS) AndroidManifest.xml
-	$(AAPT) link --manifest AndroidManifest.xml $(addprefix -I ,$(PRIVATE_LIBS)) --java $(LOCAL_GEN) -o $@ $(PRIVATE_INTERMEDIATE_TABLES)
+	$(AAPT) link --manifest AndroidManifest.xml $(addprefix -I ,$(PRIVATE_LIBS)) --java $(LOCAL_GEN) -o $@ $(PRIVATE_INTERMEDIATE_TABLES) --static-lib
 
 # R.java: gen/com/android/app/R.java <- out/resources.arsc
 # No action since R.java is generated when out/resources.arsc is.
diff --git a/tools/aapt2/data/lib/res/values/styles.xml b/tools/aapt2/data/lib/res/values/styles.xml
index adb5c4f..4ce6333 100644
--- a/tools/aapt2/data/lib/res/values/styles.xml
+++ b/tools/aapt2/data/lib/res/values/styles.xml
@@ -3,4 +3,6 @@
     <style name="Platform.AppCompat" parent="@android:style/Theme">
         <item name="android:windowNoTitle">true</item>
     </style>
+
+    <bool name="allow">true</bool>
 </resources>
diff --git a/tools/aapt2/data/res/layout/main.xml b/tools/aapt2/data/res/layout/main.xml
index 5160570..77ccedb 100644
--- a/tools/aapt2/data/res/layout/main.xml
+++ b/tools/aapt2/data/res/layout/main.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              xmlns:support="http://schemas.android.com/apk/res/android.appcompat"
     android:id="@+id/view"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
@@ -11,7 +12,7 @@
         android:layout_width="1dp"
         android:text="@{user.name}"
         android:layout_height="match_parent"
-        app:layout_width="false"
+        app:layout_width="@support:bool/allow"
         app:flags="complex|weak"
         android:colorAccent="#ffffff"/>
 </LinearLayout>
diff --git a/tools/aapt2/data/res/values/styles.xml b/tools/aapt2/data/res/values/styles.xml
index c5dd276..d0b19a3 100644
--- a/tools/aapt2/data/res/values/styles.xml
+++ b/tools/aapt2/data/res/values/styles.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources>
+<resources xmlns:lib="http://schemas.android.com/apk/res/android.appcompat">
     <style name="App" parent="android.appcompat:Platform.AppCompat">
         <item name="android:background">@color/primary</item>
         <item name="android:colorPrimary">@color/primary</item>
@@ -9,6 +9,7 @@
     <attr name="custom" format="reference" />
     <style name="Pop">
         <item name="custom">@drawable/image</item>
+        <item name="android:focusable">@lib:bool/allow</item>
     </style>
     <string name="yo">@string/wow</string>
 
diff --git a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
index 4bd83e9..41d94b7 100644
--- a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
@@ -27,6 +27,7 @@
 
 import android.content.res.Resources.NotFoundException;
 import android.content.res.Resources.Theme;
+import android.content.res.Resources.ThemeKey;
 import android.util.AttributeSet;
 import android.util.TypedValue;
 
@@ -110,22 +111,16 @@
     private static boolean setupResources(Theme thisTheme) {
         // Key is a space-separated list of theme ids applied that have been merged into the
         // BridgeContext's theme to make thisTheme.
-        String[] appliedStyles = thisTheme.getKey().split(" ");
+        final ThemeKey key = thisTheme.getKey();
+        final int[] resId = key.mResId;
+        final boolean[] force = key.mForce;
+
         boolean changed = false;
-        for (String s : appliedStyles) {
-            if (s.isEmpty()) {
-                continue;
-            }
-            // See the definition of force parameter in Theme.applyStyle().
-            boolean force = false;
-            if (s.charAt(s.length() - 1) == '!') {
-                force = true;
-                s = s.substring(0, s.length() - 1);
-            }
-            int styleId = Integer.parseInt(s, 16);
-            StyleResourceValue style = resolveStyle(styleId);
+        for (int i = 0, N = key.mCount; i < N; i++) {
+            StyleResourceValue style = resolveStyle(resId[i]);
             if (style != null) {
-                RenderSessionImpl.getCurrentContext().getRenderResources().applyStyle(style, force);
+                RenderSessionImpl.getCurrentContext().getRenderResources().applyStyle(
+                        style, force[i]);
                 changed = true;
             }
 
diff --git a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
index 9eea663..87762a6 100644
--- a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
+++ b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
@@ -16,19 +16,15 @@
 
 package android.view;
 
-import com.android.ide.common.rendering.api.LayoutlibCallback;
 import com.android.ide.common.rendering.api.LayoutLog;
+import com.android.ide.common.rendering.api.LayoutlibCallback;
 import com.android.ide.common.rendering.api.MergeCookie;
 import com.android.ide.common.rendering.api.ResourceReference;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.layoutlib.bridge.Bridge;
-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.android.support.RecyclerViewUtil.LayoutManagerType;
 import com.android.layoutlib.bridge.impl.ParserFactory;
-import com.android.layoutlib.bridge.impl.RenderSessionImpl;
 import com.android.resources.ResourceType;
 import com.android.util.Pair;
 
@@ -233,22 +229,6 @@
             if (viewKey != null) {
                 bc.addViewKey(view, viewKey);
             }
-            if (RenderSessionImpl.isInstanceOf(view, RecyclerViewUtil.CN_RECYCLER_VIEW)) {
-                String type = attrs.getAttributeValue(BridgeConstants.NS_RESOURCES,
-                                BridgeConstants.ATTR_LAYOUT_MANAGER_TYPE);
-                if (type != null) {
-                    LayoutManagerType layoutManagerType = LayoutManagerType.getByLogicalName(type);
-                    if (layoutManagerType == null) {
-                        layoutManagerType = LayoutManagerType.getByClassName(type);
-                    }
-                    if (layoutManagerType == null) {
-                        // add the classname itself.
-                        bc.addCookie(view, type);
-                    } else {
-                        bc.addCookie(view, layoutManagerType);
-                    }
-                }
-            }
         }
     }
 
diff --git a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
index 7f1e977..4072302 100644
--- a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
@@ -164,10 +164,6 @@
                                 com.android.internal.R.styleable.Include_id, View.NO_ID);
                         final int visibility = a.getInt(
                                 com.android.internal.R.styleable.Include_visibility, -1);
-                        final boolean hasWidth = a.hasValue(
-                                com.android.internal.R.styleable.Include_layout_width);
-                        final boolean hasHeight = a.hasValue(
-                                com.android.internal.R.styleable.Include_layout_height);
                         a.recycle();
 
                         // We try to load the layout params set in the <include /> tag. If
@@ -179,19 +175,17 @@
                         // successfully loaded layout params from the <include /> tag,
                         // false means we need to rely on the included layout params.
                         ViewGroup.LayoutParams params = null;
-                        if (hasWidth && hasHeight) {
-                            try {
-                                // ---- START CHANGES
-                                sIsInInclude = true;
-                                // ---- END CHANGES
+                        try {
+                            // ---- START CHANGES
+                            sIsInInclude = true;
+                            // ---- END CHANGES
 
-                                params = group.generateLayoutParams(attrs);
+                            params = group.generateLayoutParams(attrs);
 
-                            } finally {
-                                // ---- START CHANGES
-                                sIsInInclude = false;
-                                // ---- END CHANGES
-                            }
+                        } finally {
+                            // ---- START CHANGES
+                            sIsInInclude = false;
+                            // ---- END CHANGES
                         }
                         if (params == null) {
                             params = group.generateLayoutParams(childAttrs);
diff --git a/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java b/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java
index ec3a8d6..30512aa 100644
--- a/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java
+++ b/tools/layoutlib/bridge/src/android/view/RectShadowPainter.java
@@ -19,6 +19,7 @@
 import com.android.layoutlib.bridge.impl.ResourceHelper;
 
 import android.graphics.Canvas;
+import android.graphics.Canvas_Delegate;
 import android.graphics.LinearGradient;
 import android.graphics.Outline;
 import android.graphics.Paint;
@@ -125,6 +126,9 @@
 
     private static void sideShadow(Canvas canvas, Paint edgePaint,
             RectF edgeShadowRect, float dx, float dy, int rotations) {
+        if (isRectEmpty(edgeShadowRect)) {
+            return;
+        }
         int saved = canvas.save();
         canvas.translate(dx, dy);
         canvas.rotate(rotations * PERPENDICULAR_ANGLE);
@@ -153,4 +157,15 @@
         canvas.drawPath(path, paint);
         canvas.restoreToCount(saved);
     }
+
+    /**
+     * Differs from {@link RectF#isEmpty()} as this first converts the rect to int and then checks.
+     * <p/>
+     * This is required because {@link Canvas_Delegate#native_drawRect(long, float, float, float,
+     * float, long)} casts the co-ordinates to int and we want to ensure that it doesn't end up
+     * drawing empty rectangles, which results in IllegalArgumentException.
+     */
+    private static boolean isRectEmpty(RectF rect) {
+        return (int) rect.left >= (int) rect.right || (int) rect.top >= (int) rect.bottom;
+    }
 }
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 094778d..eb5f597 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
@@ -93,6 +93,8 @@
 import java.util.List;
 import java.util.Map;
 
+import static com.android.layoutlib.bridge.android.RenderParamsFlags.FLAG_KEY_APPLICATION_PACKAGE;
+
 /**
  * Custom implementation of Context/Activity to handle non compiled resources.
  */
@@ -306,7 +308,7 @@
         // check if this is a style resource
         if (value instanceof StyleResourceValue) {
             // get the id that will represent this style.
-            outValue.resourceId = getDynamicIdByStyle((StyleResourceValue)value);
+            outValue.resourceId = getDynamicIdByStyle((StyleResourceValue) value);
             return true;
         }
 
@@ -812,6 +814,14 @@
     }
 
 
+    @Override
+    public String getPackageName() {
+        if (mApplicationInfo.packageName == null) {
+            mApplicationInfo.packageName = mLayoutlibCallback.getFlag(FLAG_KEY_APPLICATION_PACKAGE);
+        }
+        return mApplicationInfo.packageName;
+    }
+
     // ------------- private new methods
 
     /**
@@ -1225,12 +1235,6 @@
     }
 
     @Override
-    public String getPackageName() {
-        // pass
-        return null;
-    }
-
-    @Override
     public String getBasePackageName() {
         // pass
         return null;
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
index c44a57c..8899e53 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
@@ -164,7 +164,8 @@
     }
 
     @Override
-    public void showInputMethodPickerFromClient(IInputMethodClient arg0) throws RemoteException {
+    public void showInputMethodPickerFromClient(IInputMethodClient arg0,
+            int arg1) throws RemoteException {
         // TODO Auto-generated method stub
 
     }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java
index 2f45473..b98f96f 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java
@@ -16,6 +16,7 @@
 
 package com.android.layoutlib.bridge.android;
 
+import com.android.ide.common.rendering.api.RenderParams;
 import com.android.ide.common.rendering.api.SessionParams.Key;
 
 /**
@@ -31,10 +32,21 @@
             new Key<String>("rootTag", String.class);
     public static final Key<Boolean> FLAG_KEY_DISABLE_BITMAP_CACHING =
             new Key<Boolean>("disableBitmapCaching", Boolean.class);
-    public static final Key<Boolean> FLAG_KEY_RECYCLER_VIEW_SUPPORT =
-            new Key<Boolean>("recyclerViewSupport", Boolean.class);
     public static final Key<Boolean> FLAG_KEY_RENDER_ALL_DRAWABLE_STATES =
             new Key<Boolean>("renderAllDrawableStates", Boolean.class);
+    /**
+     * To tell LayoutLib that the IDE supports RecyclerView.
+     * <p/>
+     * Default is false.
+     */
+    public static final Key<Boolean> FLAG_KEY_RECYCLER_VIEW_SUPPORT =
+            new Key<Boolean>("recyclerViewSupport", Boolean.class);
+    /**
+     * The application package name. Used via
+     * {@link com.android.ide.common.rendering.api.LayoutlibCallback#getFlag(Key)}
+     */
+    public static final Key<String> FLAG_KEY_APPLICATION_PACKAGE =
+            new Key<String>("applicationPackage", String.class);
 
     // Disallow instances.
     private RenderParamsFlags() {}
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 9273ac2..e4c7288 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
@@ -27,11 +27,12 @@
 
 import android.content.Context;
 import android.view.View;
-import android.widget.LinearLayout;
 
 import java.lang.reflect.Method;
 
-import static com.android.layoutlib.bridge.util.ReflectionUtils.*;
+import static com.android.layoutlib.bridge.util.ReflectionUtils.ReflectionException;
+import static com.android.layoutlib.bridge.util.ReflectionUtils.getMethod;
+import static com.android.layoutlib.bridge.util.ReflectionUtils.invoke;
 
 /**
  * Utility class for working with android.support.v7.widget.RecyclerView
@@ -39,17 +40,15 @@
 @SuppressWarnings("SpellCheckingInspection")  // for "recycler".
 public class RecyclerViewUtil {
 
-    /**
-     * Used by {@link LayoutManagerType}.
-     * <p/>
-     * Not declared inside the enum, since it needs to be accessible in the constructor.
-     */
-    private static final Object CONTEXT = new Object();
-
-    public static final String CN_RECYCLER_VIEW = "android.support.v7.widget.RecyclerView";
+    private static final String RV_PKG_PREFIX = "android.support.v7.widget.";
+    public static final String CN_RECYCLER_VIEW = RV_PKG_PREFIX + "RecyclerView";
     private static final String CN_LAYOUT_MANAGER = CN_RECYCLER_VIEW + "$LayoutManager";
     private static final String CN_ADAPTER = CN_RECYCLER_VIEW + "$Adapter";
 
+    // LinearLayoutManager related constants.
+    private static final String CN_LINEAR_LAYOUT_MANAGER = RV_PKG_PREFIX + "LinearLayoutManager";
+    private static final Class<?>[] LLM_CONSTRUCTOR_SIGNATURE = new Class<?>[]{Context.class};
+
     /**
      * Tries to create an Adapter ({@code android.support.v7.widget.RecyclerView.Adapter} and a
      * LayoutManager {@code RecyclerView.LayoutManager} and assign these to the {@code RecyclerView}
@@ -71,37 +70,33 @@
 
     private static void setLayoutManager(@NonNull View recyclerView, @NonNull BridgeContext context,
             @NonNull LayoutlibCallback callback) throws ReflectionException {
-        Object cookie = context.getCookie(recyclerView);
-        assert cookie == null || cookie instanceof LayoutManagerType || cookie instanceof String;
-        if (!(cookie instanceof LayoutManagerType)) {
-            if (cookie != null) {
-                // TODO: When layoutlib API is updated, try to load the class with a null
-                // constructor or a constructor taking one argument - the context.
-                Bridge.getLog().warning(LayoutLog.TAG_UNSUPPORTED,
-                        "LayoutManager (" + cookie + ") not found, falling back to " +
-                                "LinearLayoutManager", null);
-            }
-            cookie = LayoutManagerType.getDefault();
+        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");
         }
-        Object layoutManager = createLayoutManager((LayoutManagerType) cookie, context, callback);
-        setProperty(recyclerView, CN_LAYOUT_MANAGER, layoutManager, "setLayoutManager");
     }
 
+    /** Creates a LinearLayoutManager using the provided context. */
     @Nullable
-    private static Object createLayoutManager(@Nullable LayoutManagerType type,
-            @NonNull Context context, @NonNull LayoutlibCallback callback)
+    private static Object createLayoutManager(@NonNull Context context,
+            @NonNull LayoutlibCallback callback)
             throws ReflectionException {
-        if (type == null) {
-            type = LayoutManagerType.getDefault();
-        }
         try {
-            return callback.loadView(type.getClassName(), type.getSignature(), type.getArgs(context));
+            return callback.loadView(CN_LINEAR_LAYOUT_MANAGER, LLM_CONSTRUCTOR_SIGNATURE,
+                    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;
+    }
+
+    @Nullable
     private static Object createAdapter(@NonNull SessionParams params) throws ReflectionException {
         Boolean ideSupport = params.getFlag(RenderParamsFlags.FLAG_KEY_RECYCLER_VIEW_SUPPORT);
         if (ideSupport != Boolean.TRUE) {
@@ -145,74 +140,4 @@
         }
         throw new RuntimeException("invalid object/classname combination.");
     }
-
-    /** Supported LayoutManagers. */
-    public enum LayoutManagerType {
-        LINEAR_LAYOUT_MANGER("Linear",
-                "android.support.v7.widget.LinearLayoutManager",
-                new Class[]{Context.class}, new Object[]{CONTEXT}),
-        GRID_LAYOUT_MANAGER("Grid",
-                "android.support.v7.widget.GridLayoutManager",
-                new Class[]{Context.class, int.class}, new Object[]{CONTEXT, 2}),
-        STAGGERED_GRID_LAYOUT_MANAGER("StaggeredGrid",
-                "android.support.v7.widget.StaggeredGridLayoutManager",
-                new Class[]{int.class, int.class}, new Object[]{2, LinearLayout.VERTICAL});
-
-        private String mLogicalName;
-        private String mClassName;
-        private Class[] mSignature;
-        private Object[] mArgs;
-
-        LayoutManagerType(String logicalName, String className, Class[] signature, Object[] args) {
-            mLogicalName = logicalName;
-            mClassName = className;
-            mSignature = signature;
-            mArgs = args;
-        }
-
-        String getClassName() {
-            return mClassName;
-        }
-
-        Class[] getSignature() {
-            return mSignature;
-        }
-
-        @NonNull
-        Object[] getArgs(Context context) {
-            Object[] args = new Object[mArgs.length];
-            System.arraycopy(mArgs, 0, args, 0, mArgs.length);
-            for (int i = 0; i < args.length; i++) {
-                if (args[i] == CONTEXT) {
-                    args[i] = context;
-                }
-            }
-            return args;
-        }
-
-        @NonNull
-        public static LayoutManagerType getDefault() {
-            return LINEAR_LAYOUT_MANGER;
-        }
-
-        @Nullable
-        public static LayoutManagerType getByLogicalName(@NonNull String logicalName) {
-            for (LayoutManagerType type : values()) {
-                if (logicalName.equals(type.mLogicalName)) {
-                    return type;
-                }
-            }
-            return null;
-        }
-
-        @Nullable
-        public static LayoutManagerType getByClassName(@NonNull String className) {
-            for (LayoutManagerType type : values()) {
-                if (className.equals(type.mClassName)) {
-                    return type;
-                }
-            }
-            return null;
-        }
-    }
 }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/Config.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/Config.java
index 9f9b968..dc89d0c 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/Config.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/Config.java
@@ -74,7 +74,7 @@
     }
 
     public static String getTime(int platformVersion) {
-        if (platformVersion == 0) {
+        if (isGreaterOrEqual(platformVersion, LOLLIPOP_MR1)) {
             return "5:10";
         }
         if (platformVersion < GINGERBREAD) {
@@ -117,7 +117,7 @@
     }
 
     public static String getWifiIconType(int platformVersion) {
-        return platformVersion == 0 ? "xml" : "png";
+        return isGreaterOrEqual(platformVersion, LOLLIPOP) ? "xml" : "png";
     }
 
     /**
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
index 9450b6c..04aadff 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
@@ -21,6 +21,10 @@
 
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.util.AttributeSet;
+import android.view.View;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -29,6 +33,21 @@
     /** Navigation bar background color attribute name. */
     private static final String ATTR_COLOR = "navigationBarColor";
 
+    /**
+     * Constructor to be used when creating the {@link NavigationBar} as a regular control.
+     * This is currently used by the theme editor.
+     */
+    public NavigationBar(Context context, AttributeSet attrs)
+            throws XmlPullParserException {
+        this((BridgeContext) context,
+                Density.getEnum(((BridgeContext) context).getMetrics().densityDpi),
+                LinearLayout.HORIZONTAL, // In this mode, it doesn't need to be render vertically
+                ((BridgeContext) context).getConfiguration().getLayoutDirection() ==
+                        View.LAYOUT_DIRECTION_RTL,
+                (context.getApplicationInfo().flags & ApplicationInfo.FLAG_SUPPORTS_RTL) != 0,
+                context.getApplicationInfo().targetSdkVersion);
+    }
+
     public NavigationBar(BridgeContext context, Density density, int orientation, boolean isRtl,
             boolean rtlEnabled, int simulatedPlatformVersion) throws XmlPullParserException {
         super(context, orientation, "/bars/navigation_bar.xml", "navigation_bar.xml",
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
index e5f1f68..a0ed0e8 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
@@ -25,7 +25,9 @@
 
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
 import android.view.Gravity;
 import android.view.View;
 import android.widget.ImageView;
@@ -39,7 +41,20 @@
 
     private final int mSimulatedPlatformVersion;
     /** Status bar background color attribute name. */
-    private static final String ATTR_COLOR = "colorPrimaryDark";
+    private static final String ATTR_COLOR = "statusBarColor";
+
+    /**
+     * Constructor to be used when creating the {@link StatusBar} as a regular control. This
+     * is currently used by the theme editor.
+     */
+    public StatusBar(Context context, AttributeSet attrs) throws XmlPullParserException {
+        this((BridgeContext) context,
+                Density.getEnum(((BridgeContext) context).getMetrics().densityDpi),
+                LinearLayout.HORIZONTAL, // In this mode, it doesn't need to be render vertically
+                ((BridgeContext) context).getConfiguration().getLayoutDirection() ==
+                        View.LAYOUT_DIRECTION_RTL,
+                context.getApplicationInfo().targetSdkVersion);
+    }
 
     public StatusBar(BridgeContext context, Density density, int direction, boolean RtlEnabled,
             int simulatedPlatformVersion) throws XmlPullParserException {
@@ -50,6 +65,7 @@
 
         // FIXME: use FILL_H?
         setGravity(Gravity.START | Gravity.TOP | Gravity.RIGHT);
+
         int color = getThemeAttrColor(ATTR_COLOR, true);
         setBackgroundColor(color == 0 ? Config.getStatusBarColor(simulatedPlatformVersion) : color);
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java
index 3dee1e2..26f9000 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderDrawable.java
@@ -42,6 +42,10 @@
 import java.util.Collections;
 import java.util.List;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 /**
  * Action to render a given Drawable provided through {@link DrawableParams#getDrawable()}.
  *
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 d9572591..f6e5ef1 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
@@ -1075,7 +1075,7 @@
 
     private void findStatusBar(RenderResources resources, DisplayMetrics metrics) {
         boolean windowFullscreen = getBooleanThemeValue(resources,
-                "windowFullscreen", false, !isThemeAppCompat(resources));
+                "windowFullscreen", false, true);
 
         if (!windowFullscreen && !mWindowIsFloating) {
             // default value
@@ -1210,15 +1210,15 @@
           // between Theme.AppCompat.Light and Theme.AppCompat is Theme.Material (for v21).
             boolean isThemeAppCompat = false;
             for (int i = 0; i < 50; i++) {
+                if (defaultTheme == null) {
+                    break;
+                }
                 // for loop ensures that we don't run into cyclic theme inheritance.
                 if (defaultTheme.getName().startsWith("Theme.AppCompat")) {
                     isThemeAppCompat = true;
                     break;
                 }
                 defaultTheme = resources.getParent(defaultTheme);
-                if (defaultTheme == null) {
-                    break;
-                }
             }
             mIsThemeAppCompat = isThemeAppCompat;
         }
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/MyActivity.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/MyActivity.class
index d252462..8af93eb 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/MyActivity.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/MyActivity.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$id.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$id.class
index d109302..069f9f7 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$id.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$id.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class
index 816ecc8..36e2688 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$menu.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$menu.class
index b034b75..ca438ad 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$menu.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$menu.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$string.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$string.class
index f86b1d3..a98abf5 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$string.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$string.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$style.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$style.class
index 8bbae90..7d8cc84 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$style.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$style.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R.class
index 8af745d..7e6113b 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/allwidgets.png b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/allwidgets.png
new file mode 100644
index 0000000..c9b76be
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/allwidgets.png
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/allwidgets.xml b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/allwidgets.xml
new file mode 100644
index 0000000..2da2cb9
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/allwidgets.xml
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:ignore="HardcodedText,LabelFor,TextFields,ContentDescription,RtlHardcoded">
+
+    <FrameLayout
+        android:id="@id/frameLayout"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentTop="true"
+        android:layout_marginEnd="311dp">
+
+        <TextView
+            android:id="@id/textView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="left|top"
+            android:text="New Text" />
+    </FrameLayout>
+
+    <TextView
+        android:id="@id/textView2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentStart="true"
+        android:layout_below="@id/frameLayout"
+        android:text="Large Text"
+        android:textAppearance="?android:attr/textAppearanceLarge" />
+
+    <TextView
+        android:id="@id/textView3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:layout_toEndOf="@id/textView2"
+        android:text="Medium Text"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <TextView
+        android:id="@id/textView4"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignTop="@id/textView2"
+        android:layout_toEndOf="@id/textView2"
+        android:text="Small Text"
+        android:textAppearance="?android:attr/textAppearanceSmall" />
+
+    <Button
+        android:id="@id/button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/textView3"
+        android:layout_toEndOf="@id/textView4"
+        android:text="New Button" />
+
+    <Button
+        android:id="@id/button2"
+        style="?android:attr/buttonStyleSmall"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:layout_toEndOf="@id/button"
+        android:text="New Button" />
+
+    <CheckBox
+        android:id="@id/checkBox"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignEnd="@id/button"
+        android:layout_below="@id/button"
+        android:text="New CheckBox" />
+
+    <Switch
+        android:id="@id/switch1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentStart="true"
+        android:layout_below="@id/textView2"
+        android:text="New Switch" />
+
+    <ImageButton
+        android:id="@id/imageButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/button"
+        android:layout_toEndOf="@id/switch1" />
+
+    <ImageView
+        android:id="@id/imageView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_launcher"
+        android:layout_below="@id/button"
+        android:layout_toEndOf="@id/imageButton" />
+
+    <GridLayout
+        android:id="@id/gridLayout"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentStart="true"
+        android:layout_below="@id/imageButton"
+        android:columnCount="2"
+        android:rowCount="2">
+
+        <ProgressBar
+            android:id="@id/progressBar"
+            style="?android:attr/progressBarStyleLarge"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_column="0"
+            android:layout_row="0" />
+
+        <ProgressBar
+            android:id="@id/progressBar2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_column="1"
+            android:layout_row="0" />
+
+        <ProgressBar
+            android:id="@id/progressBar3"
+            style="?android:attr/progressBarStyleSmall"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_column="0"
+            android:layout_row="1" />
+
+        <ProgressBar
+            android:id="@id/progressBar4"
+            style="?android:attr/progressBarStyleHorizontal"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_column="1"
+            android:layout_row="1" />
+    </GridLayout>
+
+    <SeekBar
+        android:id="@id/seekBar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignTop="@id/gridLayout"
+        android:layout_toEndOf="@id/gridLayout" />
+
+    <RatingBar
+        android:id="@id/ratingBar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/switch2"
+        android:layout_toEndOf="@id/gridLayout" />
+
+    <Switch
+        android:id="@id/switch2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/seekBar"
+        android:layout_toEndOf="@id/switch1"
+        android:checked="true" />
+
+    <EditText
+        android:id="@id/editText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignBottom="@id/ratingBar"
+        android:layout_alignParentStart="true"
+        android:text="plain text" />
+
+    <EditText
+        android:id="@id/editText2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentStart="true"
+        android:layout_below="@id/ratingBar"
+        android:ems="3"
+        android:inputType="textPersonName"
+        android:text="Name" />
+
+    <EditText
+        android:id="@id/editText3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerVertical="true"
+        android:layout_toEndOf="@id/editText2"
+        android:ems="2"
+        android:inputType="textPassword"
+        android:text="password" />
+
+    <EditText
+        android:id="@id/editText4"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignTop="@id/editText3"
+        android:layout_toEndOf="@id/editText3"
+        android:ems="3"
+        android:inputType="numberPassword"
+        android:text="numeric password" />
+
+    <EditText
+        android:id="@id/editText5"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/editText3"
+        android:layout_toStartOf="@id/editText6"
+        android:ems="7"
+        android:inputType="textEmailAddress"
+        android:text="email@domain.com" />
+
+    <EditText
+        android:id="@id/editText6"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
+        android:layout_below="@id/editText4"
+        android:ems="7"
+        android:inputType="phone"
+        android:text="+11235554344" />
+
+    <EditText
+        android:id="@id/editText7"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/editText"
+        android:layout_toEndOf="@id/editText4"
+        android:ems="10"
+        android:inputType="textPostalAddress"
+        android:text="1600 Amphitheatre" />
+
+    <EditText
+        android:id="@id/editText9"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/editText5"
+        android:layout_alignParentStart="true"
+        android:ems="3"
+        android:inputType="time"
+        android:text="12:12" />
+
+    <RadioGroup
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/editText5"
+        android:layout_toEndOf="@id/editText9"
+        android:orientation="horizontal">
+
+        <RadioButton
+            android:id="@id/radioButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="New RadioButton" />
+
+        <RadioButton
+            android:id="@id/radioButton2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="New RadioButton" />
+
+    </RadioGroup>
+
+    <CheckedTextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="CheckedTextView"
+        android:id="@id/checkedTextView"
+        android:layout_below="@id/button2"
+        android:layout_alignParentEnd="true"
+        android:layout_alignStart="@id/button2" />
+
+    <DialerFilter
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/checkBox"
+        android:layout_toStartOf="@id/quickContactBadge"
+        android:id="@id/dialerFilter"
+        android:layout_above="@id/ratingBar"
+        android:layout_toEndOf="@id/seekBar">
+
+        <EditText
+            android:id="@android:id/hint"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="Hint" />
+
+        <EditText
+            android:id="@android:id/primary"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/hint"
+            android:text="Primary" />
+    </DialerFilter>
+
+    <QuickContactBadge
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@id/quickContactBadge"
+        android:layout_below="@id/checkedTextView"
+        android:layout_alignParentEnd="true" />
+
+    <android.inputmethodservice.ExtractEditText
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="ExtractEditText"
+        android:id="@id/extractEditText"
+        android:layout_below="@id/editText9"
+        android:layout_alignParentEnd="true"
+        android:layout_alignStart="@id/checkedTextView" />
+
+    <ZoomControls
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@id/zoomControls"
+        android:layout_below="@id/editText9"
+        android:layout_alignParentStart="true" />
+
+    <TextureView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@id/textureView"
+        android:layout_below="@id/zoomControls"
+        android:layout_alignParentStart="true"
+        android:layout_alignBottom="@id/extractEditText"
+        android:layout_toStartOf="@id/editText3" />
+
+    <ListView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@id/listView"
+        android:layout_below="@id/textureView"
+        android:layout_alignParentStart="true"
+        android:layout_alignEnd="@id/textureView" />
+
+    <GridView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@id/gridView"
+        android:layout_below="@id/extractEditText"
+        android:layout_alignParentEnd="true"
+        android:layout_alignStart="@id/extractEditText" />
+
+    <ScrollView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@id/scrollView"
+        android:layout_below="@id/zoomControls"
+        android:layout_toRightOf="@id/listView"
+        android:layout_toLeftOf="@id/extractEditText">
+
+    <TabHost
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@id/tabHost">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <TabWidget
+                android:id="@android:id/tabs"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"/>
+
+            <FrameLayout
+                android:id="@android:id/tabcontent"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <LinearLayout
+                    android:id="@id/linearLayout"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical"/>
+
+                <LinearLayout
+                    android:id="@id/linearLayout2"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical"/>
+
+            </FrameLayout>
+        </LinearLayout>
+    </TabHost>
+</ScrollView>
+
+    <SearchView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@id/searchView"
+        android:layout_alignBottom="@id/zoomControls"
+        android:layout_toEndOf="@id/seekBar" />
+
+</RelativeLayout>
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/values/ids.xml b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/values/ids.xml
new file mode 100644
index 0000000..1dc2fa0
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/values/ids.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <item type="id" name="button" />
+    <item type="id" name="button2" />
+    <item type="id" name="checkBox" />
+    <item type="id" name="checkedTextView" />
+    <item type="id" name="dialerFilter" />
+    <item type="id" name="editText" />
+    <item type="id" name="editText2" />
+    <item type="id" name="editText3" />
+    <item type="id" name="editText4" />
+    <item type="id" name="editText5" />
+    <item type="id" name="editText6" />
+    <item type="id" name="editText7" />
+    <item type="id" name="editText8" />
+    <item type="id" name="editText9" />
+    <item type="id" name="extractEditText" />
+    <item type="id" name="frameLayout" />
+    <item type="id" name="gridLayout" />
+    <item type="id" name="gridView" />
+    <item type="id" name="imageButton" />
+    <item type="id" name="imageView" />
+    <item type="id" name="linearLayout" />
+    <item type="id" name="linearLayout2" />
+    <item type="id" name="listView" />
+    <item type="id" name="progressBar" />
+    <item type="id" name="progressBar2" />
+    <item type="id" name="progressBar3" />
+    <item type="id" name="progressBar4" />
+    <item type="id" name="quickContactBadge" />
+    <item type="id" name="radioButton" />
+    <item type="id" name="radioButton2" />
+    <item type="id" name="ratingBar" />
+    <item type="id" name="scrollView" />
+    <item type="id" name="searchView" />
+    <item type="id" name="seekBar" />
+    <item type="id" name="spinner" />
+    <item type="id" name="switch1" />
+    <item type="id" name="switch2" />
+    <item type="id" name="tabHost" />
+    <item type="id" name="textView" />
+    <item type="id" name="textView2" />
+    <item type="id" name="textView3" />
+    <item type="id" name="textView4" />
+    <item type="id" name="textureView" />
+    <item type="id" name="zoomControls" />
+</resources>
\ No newline at end of file
diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
index ac23564..f2a039e 100644
--- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
+++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
@@ -261,7 +261,7 @@
                 new ResourceRepository(new FolderWrapper(TEST_RES_DIR + APP_TEST_RES), false) {
             @NonNull
             @Override
-            protected ResourceItem createResourceItem(String name) {
+            protected ResourceItem createResourceItem(@NonNull String name) {
                 return new ResourceItem(name);
             }
         };
@@ -275,14 +275,27 @@
                 ConfigGenerator.getEnumMap(attrs), getLayoutLog());
     }
 
-    /**
-     * Create a new rendering session and test that rendering /layout/activity.xml on nexus 5
-     * doesn't throw any exceptions.
-     */
+    /** Text activity.xml */
     @Test
-    public void testRendering() throws ClassNotFoundException {
+    public void testActivity() throws ClassNotFoundException {
+        renderAndVerify("activity.xml", "activity.png");
+
+    }
+
+    /** Test allwidgets.xml */
+    @Test
+    public void testAllWidgets() throws ClassNotFoundException {
+        renderAndVerify("allwidgets.xml", "allwidgets.png");
+    }
+
+    /**
+     * Create a new rendering session and test that rendering given layout on nexus 5
+     * doesn't throw any exceptions and matches the provided image.
+     */
+    private void renderAndVerify(String layoutFileName, String goldenFileName)
+            throws ClassNotFoundException {
         // Create the layout pull parser.
-        LayoutPullParser parser = new LayoutPullParser(APP_TEST_RES + "/layout/activity.xml");
+        LayoutPullParser parser = new LayoutPullParser(APP_TEST_RES + "/layout/" + layoutFileName);
         // Create LayoutLibCallback.
         LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger());
         layoutLibCallback.initResources();
@@ -301,7 +314,7 @@
                     session.getResult().getErrorMessage());
         }
         try {
-            String goldenImagePath = APP_TEST_DIR + "/golden/activity.png";
+            String goldenImagePath = APP_TEST_DIR + "/golden/" + goldenFileName;
             ImageUtils.requireSimilar(goldenImagePath, session.getImage());
         } catch (IOException e) {
             getLogger().error(e, e.getMessage());
@@ -309,7 +322,7 @@
     }
 
     /**
-     * Uses Theme.Material and Target sdk version as 21.
+     * Uses Theme.Material and Target sdk version as 22.
      */
     private SessionParams getSessionParams(LayoutPullParser layoutParser,
             ConfigGenerator configGenerator, LayoutLibTestCallback layoutLibCallback) {
@@ -327,7 +340,7 @@
                 resourceResolver,
                 layoutLibCallback,
                 0,
-                21, // TODO: Make it more configurable to run tests for various versions.
+                22, // TODO: Make it more configurable to run tests for various versions.
                 getLayoutLog());
     }
 
@@ -381,17 +394,17 @@
                 }
 
                 @Override
-                public void warning(String msgFormat, Object... args) {
+                public void warning(@NonNull String msgFormat, Object... args) {
                     failWithMsg(msgFormat, args);
                 }
 
                 @Override
-                public void info(String msgFormat, Object... args) {
+                public void info(@NonNull String msgFormat, Object... args) {
                     // pass.
                 }
 
                 @Override
-                public void verbose(String msgFormat, Object... args) {
+                public void verbose(@NonNull String msgFormat, Object... args) {
                     // pass.
                 }
             };
@@ -399,7 +412,7 @@
         return mLogger;
     }
 
-    private static void failWithMsg(String msgFormat, Object... args) {
-        fail(msgFormat == null || args == null ? "" : String.format(msgFormat, args));
+    private static void failWithMsg(@NonNull String msgFormat, Object... args) {
+        fail(args == null ? "" : String.format(msgFormat, args));
     }
 }
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 a5c3202..1191df6 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
@@ -21,12 +21,11 @@
 import com.android.ide.common.resources.configuration.DensityQualifier;
 import com.android.ide.common.resources.configuration.FolderConfiguration;
 import com.android.ide.common.resources.configuration.KeyboardStateQualifier;
-import com.android.ide.common.resources.configuration.LanguageQualifier;
 import com.android.ide.common.resources.configuration.LayoutDirectionQualifier;
+import com.android.ide.common.resources.configuration.LocaleQualifier;
 import com.android.ide.common.resources.configuration.NavigationMethodQualifier;
 import com.android.ide.common.resources.configuration.NetworkCodeQualifier;
 import com.android.ide.common.resources.configuration.NightModeQualifier;
-import com.android.ide.common.resources.configuration.RegionQualifier;
 import com.android.ide.common.resources.configuration.ScreenDimensionQualifier;
 import com.android.ide.common.resources.configuration.ScreenOrientationQualifier;
 import com.android.ide.common.resources.configuration.ScreenRatioQualifier;
@@ -158,10 +157,9 @@
         config.setUiModeQualifier(new UiModeQualifier(UiMode.NORMAL));
         config.setNightModeQualifier(new NightModeQualifier(NightMode.NOTNIGHT));
         config.setCountryCodeQualifier(new CountryCodeQualifier());
-        config.setLanguageQualifier(new LanguageQualifier());
         config.setLayoutDirectionQualifier(new LayoutDirectionQualifier());
         config.setNetworkCodeQualifier(new NetworkCodeQualifier());
-        config.setRegionQualifier(new RegionQualifier());
+        config.setLocaleQualifier(new LocaleQualifier());
         config.setVersionQualifier(new VersionQualifier());
         return config;
     }
diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutLibTestCallback.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutLibTestCallback.java
index 0a5e798..5b648ef 100644
--- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutLibTestCallback.java
+++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutLibTestCallback.java
@@ -23,8 +23,8 @@
 import com.android.ide.common.rendering.api.LayoutlibCallback;
 import com.android.ide.common.rendering.api.ResourceReference;
 import com.android.ide.common.rendering.api.ResourceValue;
-import com.android.resources.ResourceType;
 import com.android.ide.common.resources.IntArrayWrapper;
+import com.android.resources.ResourceType;
 import com.android.util.Pair;
 import com.android.utils.ILogger;
 
@@ -36,6 +36,8 @@
 
 import com.google.android.collect.Maps;
 
+import static org.junit.Assert.fail;
+
 @SuppressWarnings("deprecation") // For Pair
 public class LayoutLibTestCallback extends LayoutlibCallback {
 
@@ -121,7 +123,7 @@
 
     @Override
     public ILayoutPullParser getParser(String layoutName) {
-        org.junit.Assert.fail("This method shouldn't be called by this version of LayoutLib.");
+        fail("This method shouldn't be called by this version of LayoutLib.");
         return null;
     }
 
diff --git a/tools/split-select/Android.mk b/tools/split-select/Android.mk
index 013e570..d9ddf08 100644
--- a/tools/split-select/Android.mk
+++ b/tools/split-select/Android.mk
@@ -52,7 +52,8 @@
     libutils \
     libcutils \
     libexpat \
-    libziparchive-host
+    libziparchive-host \
+    libbase
 
 cFlags := -Wall -Werror
 
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 0e888e8..00cdc71 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -25,6 +25,7 @@
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiConnectionStatistics;
 import android.net.wifi.WifiActivityEnergyInfo;
+import android.net.Network;
 
 import android.net.DhcpInfo;
 
@@ -168,5 +169,7 @@
     void disableEphemeralNetwork(String SSID);
 
     void factoryReset();
+
+    Network getCurrentNetwork();
 }
 
diff --git a/wifi/java/android/net/wifi/RttManager.java b/wifi/java/android/net/wifi/RttManager.java
index d2fb0dd..dde8dba 100644
--- a/wifi/java/android/net/wifi/RttManager.java
+++ b/wifi/java/android/net/wifi/RttManager.java
@@ -134,6 +134,8 @@
     public static final int REASON_NOT_AVAILABLE            = -2;
     public static final int REASON_INVALID_LISTENER         = -3;
     public static final int REASON_INVALID_REQUEST          = -4;
+    /** Do not have required permission */
+    public static final int REASON_PERMISSION_DENIED        = -5;
 
     public static final String DESCRIPTION_KEY  = "android.net.wifi.RttManager.Description";
 
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index b731316..a38a96e 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -926,7 +926,7 @@
     public boolean isValid() {
         String reason = strIsValid();
         if (reason != null) {
-            Log.e("WFII", "WiFi Config not valid: " + reason);
+            Log.e(TAG, "WiFi Config not valid: " + reason);
             return false;
         }
         else {
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 3205351..5e996725 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -2804,4 +2804,17 @@
         } catch (RemoteException e) {
         }
     }
+
+    /**
+     * Get Network object of current wifi network
+     * @return Get Network object of current wifi network
+     * @hide
+     */
+    public Network getCurrentNetwork() {
+        try {
+            return mService.getCurrentNetwork();
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
 }